comment_spec.rb
上传用户:netsea168
上传日期:2022-07-22
资源大小:4652k
文件大小:7k
源码类别:

Ajax

开发平台:

Others

  1. require File.dirname(__FILE__) + "/../spec_helper"
  2. require 'dns_mock'
  3. describe Comment do
  4.   def valid_comment(options={})
  5.     Comment.new({:author => 'Bob',
  6.                 :article_id => contents(:article1).id,
  7.                 :body => 'nice post',
  8.                 :ip => '1.2.3.4'}.merge(options))
  9.   end
  10.   describe '#permalink_url' do
  11.     it 'should render permalink to comment in public part' do
  12.       c = feedback(:old_comment)
  13.       assert_equal "http://myblog.net/2004/05/01/inactive-article#comment-#{c.id}", c.permalink_url
  14.     end
  15.   end
  16.   describe '#edit_url' do
  17.     it 'should get a url where edit comment in admin' do
  18.       c = feedback(:old_comment)
  19.       assert_equal "http://myblog.net/admin/comments/edit/#{c.id}", c.edit_url
  20.     end
  21.   end
  22.   describe '#delete_url' do
  23.     it 'should get the delete url of comment in admin part' do
  24.       c = feedback(:old_comment)
  25.       assert_equal "http://myblog.net/admin/comments/destroy/#{c.id}", c.delete_url
  26.     end
  27.   end
  28.   describe '#save' do
  29.     it 'should save good comment' do
  30.       assert feedback(:comment2).save
  31.       assert_equal "http://www.google.com", feedback(:comment2).url
  32.     end
  33.     it 'should save spam comment' do
  34.       assert feedback(:spam_comment).save
  35.       assert_equal "http://fakeurl.com", feedback(:spam_comment).url
  36.     end
  37.     it 'should not save in invalid article' do
  38.       c = valid_comment(:author => "Old Spammer",
  39.                         :body => "Old trackback body",
  40.                         :article => contents(:inactive_article))
  41.       assert ! c.save
  42.       assert c.errors.invalid?('article_id')
  43.       c.article = contents(:article1)
  44.       assert c.save
  45.       assert c.errors.empty?
  46.     end
  47.     it 'should change old comment' do
  48.       c = contents(:inactive_article).comments.first
  49.       c.body = 'Comment body <em>italic</em> <strong>bold</strong>'
  50.       assert c.save
  51.       assert c.errors.empty?
  52.     end
  53.     it 'should save a valid comment' do
  54.       c = valid_comment # article created 2 days ago
  55.       c.save.should be_true
  56.       c.errors.should be_empty
  57.     end
  58.     it 'should not save with article not allow comment'  do
  59.       b = Blog.default
  60.       b.sp_article_auto_close = 1
  61.       b.save
  62.       c = valid_comment # article created 2 days ago
  63.       c.save.should_not be_true
  64.       c.errors.should_not be_empty
  65.     end
  66.   end
  67.   describe '#create' do
  68.     it 'should create comment' do
  69.       c = valid_comment
  70.       assert c.save
  71.       assert c.guid.size > 15
  72.     end
  73.   end
  74.   describe '#spam?' do
  75.     it 'should reject spam rbl' do
  76.       c = valid_comment(:author => "Spammer",
  77.                         :body => %{This is just some random text. &lt;a href="http://chinaaircatering.com"&gt;without any senses.&lt;/a&gt;. Please disregard.},
  78.                         :url => "http://buy-computer.us")
  79.       should_be_spam(c)
  80.     end
  81.     it 'should not define spam a comment rbl with lookup succeeds' do
  82.       c = valid_comment(:author => "Not a Spammer",
  83.                         :body   => "Useful commentary!",
  84.                         :url    => "http://www.bofh.org.uk")
  85.       c.should_not be_spam
  86.       c.should_not be_status_confirmed
  87.     end
  88.     it 'should reject spam with uri limit' do
  89.       c = valid_comment(:author => "Yet Another Spammer",
  90.                         :body => %{ <a href="http://www.one.com/">one</a> <a href="http://www.two.com/">two</a> <a href="http://www.three.com/">three</a> <a href="http://www.four.com/">four</a> },
  91.                         :url => "http://www.uri-limit.com")
  92.       should_be_spam(c)
  93.     end
  94.     def should_be_spam(comment)
  95.       comment.should be_spam
  96.       comment.should_not be_status_confirmed
  97.     end
  98.   end
  99.   it 'should have good relation' do
  100.     assert feedback(:comment2).article
  101.     assert_equal contents(:article1), feedback(:comment2).article
  102.   end
  103.   describe 'reject xss' do
  104.     before(:each) do
  105.       @comment = Comment.new do |c|
  106.         c.body = "Test foo <script>do_evil();</script>"
  107.         c.author = 'Bob'
  108.         c.article_id = contents(:article1).id
  109.       end
  110.     end
  111.     ['','textile','markdown','smartypants','markdown smartypants'].each do |filter|
  112.       it "should reject with filter #{filter}" do
  113.         Blog.default.comment_text_filter = filter
  114.         assert @comment.save
  115.         assert @comment.errors.empty?
  116.         assert @comment.html(:body) !~ /<script>/
  117.       end
  118.     end
  119.   end
  120.   describe 'change state' do
  121.     it 'should becomes withdraw' do
  122.       c = Comment.find(feedback(:comment2).id)
  123.       assert c.withdraw!
  124.       assert ! c.published?
  125.       assert c.spam?
  126.       assert c.status_confirmed?
  127.       c.reload
  128.       assert ! c.published?
  129.       assert c.spam?
  130.       assert c.status_confirmed?
  131.     end
  132.     it 'should becomes not published in article if withdraw' do
  133.       a = Article.new(:title => 'foo')
  134.       assert a.save
  135.       assert_equal 0, a.published_comments.size
  136.       c = a.comments.build(:body => 'foo', :author => 'bob', :published => true, :published_at => Time.now)
  137.       assert c.save
  138.       assert c.published?
  139.       c.reload
  140.       a.reload
  141.       assert_equal 1, a.published_comments.size
  142.       c.withdraw!
  143.       a = Article.new(:title => 'foo')
  144.       assert_equal 0, a.published_comments.size
  145.     end
  146.     it 'should becomes not confirmed in article if withdraw' do
  147.       a = contents(:spammed_article)
  148.       assert !a.comments[0].status_confirmed?
  149.       assert  a.comments[1].status_confirmed?
  150.       a.reload
  151.       assert_equal 1,
  152.         a.comments.find_all_by_status_confirmed(true).size
  153.       assert_equal 1,
  154.         a.comments.find_all_by_status_confirmed(true).size
  155.       a.comments[0].withdraw!
  156.       assert_equal 2,
  157.         a.comments.find_all_by_status_confirmed(true).size
  158.     end
  159.   end
  160.   it 'should have good default filter' do
  161.     a = Comment.find(:first)
  162.     assert_equal 'markdown', a.default_text_filter.name
  163.   end
  164.   describe 'with feedback moderation enabled' do
  165.     before(:each) do
  166.       @blog = Blog.default
  167.       @blog.sp_global = false
  168.       @blog.default_moderate_comments = true
  169.       @blog.save!
  170.     end
  171.     it 'should save comment as presumably spam' do
  172.       comment = Comment.new do |c|
  173.         c.body = "Test foo"
  174.         c.author = 'Bob'
  175.         c.article_id = contents(:article1).id
  176.       end
  177.       assert comment.save!
  178.       
  179.       assert ! comment.published?
  180.       assert comment.spam?
  181.       assert ! comment.status_confirmed?
  182.     end
  183.     it 'should save comment as confirmed ham' do
  184.       comment = Comment.new do |c|
  185.         c.body = "Test foo"
  186.         c.author = 'Bob'
  187.         c.article_id = contents(:article1).id
  188.         c.user_id = users(:tobi).id
  189.       end
  190.       assert comment.save!
  191.       
  192.       assert comment.published?
  193.       assert comment.ham?
  194.       assert comment.status_confirmed?
  195.       
  196.     end
  197.   end
  198. end