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

Ajax

开发平台:

Others

  1. require File.dirname(__FILE__) + '/../../spec_helper'
  2. describe Admin::FeedbackController do
  3.   integrate_views
  4.   describe "destroy feedback with feedback from own article", :shared => true  do
  5.     it 'should destroy feedback' do
  6.       lambda do
  7.         post 'delete', :id => feedback_from_own_article.id
  8.       end.should change(Feedback, :count)
  9.       lambda do
  10.         Feedback.find(feedback_from_own_article.id)
  11.       end.should raise_error(ActiveRecord::RecordNotFound)
  12.     end
  13.     it 'should redirect to feedback from article' do
  14.       post 'delete', :id => feedback_from_own_article.id
  15.       response.should redirect_to(:controller => 'admin/feedback', :action => 'article', :id => feedback_from_own_article.article.id)
  16.     end
  17.     it 'should not delete feedback in get request' do
  18.       lambda do
  19.         get 'delete', :id => feedback_from_own_article.id
  20.       end.should_not change(Feedback, :count)
  21.       lambda do
  22.         Feedback.find(feedback_from_own_article.id)
  23.       end.should_not raise_error(ActiveRecord::RecordNotFound)
  24.       response.should redirect_to(:controller => 'admin/feedback', :action => 'article', :id => feedback_from_own_article.article.id)
  25.     end
  26.   end
  27.   describe 'logged in admin user' do
  28.     def feedback_from_own_article
  29.       feedback(:spam_comment)
  30.     end
  31.     def feedback_from_not_own_article
  32.       feedback(:spam_comment)
  33.     end
  34.     before do
  35.       request.session = { :user => users(:tobi).id }
  36.     end
  37.     describe 'delete action' do
  38.       it_should_behave_like "destroy feedback with feedback from own article"
  39.       it "should delete feedback from article doesn't own" do
  40.         lambda do
  41.           post 'delete', :id => feedback_from_not_own_article.id
  42.         end.should change(Feedback, :count)
  43.         lambda do
  44.           Feedback.find(feedback_from_not_own_article.id)
  45.         end.should raise_error(ActiveRecord::RecordNotFound)
  46.         response.should redirect_to(:controller => 'admin/feedback', :action => 'article', :id => feedback_from_not_own_article.article.id)
  47.       end
  48.     end
  49.     describe 'index action' do
  50.       def should_success_with_index(response)
  51.         response.should be_success
  52.         response.should render_template('index')
  53.       end
  54.       it 'should success' do
  55.         get :index
  56.         should_success_with_index(response)
  57.         #FIXME : Test is useless because the pagination is on 10. Now there are 11
  58.         #feedback, so there are several feedback :(
  59.         assert_equal 10, assigns(:feedback).size #Feedback.count, assigns(:feedback).size
  60.       end
  61.       it 'should view only confirmed feedback' do
  62.         get :index, :confirmed => 'f'
  63.         should_success_with_index(response)
  64.         Feedback.count(:conditions => { :status_confirmed => false }).should == assigns(:feedback).size
  65.       end
  66.       it 'should view only spam feedback' do
  67.         get :index, :published => 'f'
  68.         should_success_with_index(response)
  69.         Feedback.count(:conditions => { :published => false }).should == assigns(:feedback).size
  70.       end
  71.       it 'should view unconfirmed_spam' do
  72.         get :index, :published => 'f', :confirmed => 'f'
  73.         should_success_with_index(response)
  74.         Feedback.count(:conditions => { :published => false, :status_confirmed => false }).should == assigns(:feedback).size
  75.       end
  76.       it 'should get page 1 if page params empty' do
  77.         get :index, :page => ''
  78.         should_success_with_index(response)
  79.       end
  80.     end
  81.     describe 'article action' do
  82.       def should_success_with_article_view(response)
  83.         response.should be_success
  84.         response.should render_template('article')
  85.       end
  86.       it 'should see all feedback on one article' do
  87.         get :article, :id => contents(:article1).id
  88.         should_success_with_article_view(response)
  89.         assigns(:article).should == contents(:article1)
  90.         assigns(:comments).size.should == 2
  91.       end
  92.       it 'should see only spam feedback on one article' do
  93.         get :article, :id => contents(:article1).id, :spam => 'y'
  94.         should_success_with_article_view(response)
  95.         assigns(:article).should == contents(:article1)
  96.         assigns(:comments).size.should == 1
  97.       end
  98.       it 'should see only ham feedback on one article' do
  99.         get :article, :id => contents(:article1).id, :ham => 'y'
  100.         should_success_with_article_view(response)
  101.         assigns(:article).should == contents(:article1)
  102.         assigns(:comments).size.should == 1
  103.       end
  104.       it 'should redirect_to index if bad article id' do
  105.         lambda{
  106.           get :article, :id => 102302
  107.         }.should raise_error(ActiveRecord::RecordNotFound)
  108.       end
  109.     end
  110.     describe 'create action' do
  111.       def base_comment(options = {})
  112.         {"body"=>"a new comment", "author"=>"Me", "url"=>"http://typosphere.org", "email"=>"dev@typosphere.org"}.merge(options)
  113.       end
  114.       describe 'by get access' do
  115.         it "should raise ActiveRecordNotFound if article doesn't exist" do
  116.           lambda {
  117.             get 'create', :article_id => 120431, :comment => base_comment
  118.           }.should raise_error(ActiveRecord::RecordNotFound)
  119.         end
  120.         it 'should not create comment' do
  121.           assert_no_difference 'Comment.count' do
  122.             get 'create', :article_id => contents(:article1).id, :comment => base_comment
  123.             response.should redirect_to(:action => 'article', :id => contents(:article1).id)
  124.           end
  125.         end
  126.       end
  127.       describe 'by post access' do
  128.         it "should raise ActiveRecordNotFound if article doesn't exist" do
  129.           lambda {
  130.             post 'create', :article_id => 123104, :comment => base_comment
  131.           }.should raise_error(ActiveRecord::RecordNotFound)
  132.         end
  133.         it 'should create comment' do
  134.           assert_difference 'Comment.count' do
  135.             post 'create', :article_id => contents(:article1).id, :comment => base_comment
  136.             response.should redirect_to(:action => 'article', :id => contents(:article1).id)
  137.           end
  138.         end
  139.         it 'should create comment mark as ham' do
  140.           assert_difference 'Comment.count(:conditions => {:state => "ham"})' do
  141.             post 'create', :article_id => contents(:article1).id, :comment => base_comment
  142.             response.should redirect_to(:action => 'article', :id => contents(:article1).id)
  143.           end
  144.         end
  145.       end
  146.     end
  147.     describe 'edit action' do
  148.       it 'should render edit form' do
  149.         get 'edit', :id => feedback(:comment2).id
  150.         assigns(:comment).should == feedback(:comment2)
  151.         assigns(:article).should == contents(:article1)
  152.         response.should be_success
  153.         response.should render_template('edit')
  154.       end
  155.     end
  156.     describe 'update action' do
  157.       it 'should update comment if post request' do
  158.         post 'update', :id => feedback(:comment2).id, 
  159.           :comment => {:author => 'Bob Foo2', 
  160.                        :url => 'http://fakeurl.com',
  161.                        :body => 'updated comment'}
  162.         response.should redirect_to(:action => 'article', :id => contents(:article1).id)
  163.         feedback(:comment2).reload
  164.         feedback(:comment2).body.should == 'updated comment'
  165.       end
  166.       it 'should not  update comment if get request' do
  167.         get 'update', :id => feedback(:comment2).id, 
  168.           :comment => {:author => 'Bob Foo2', 
  169.                        :url => 'http://fakeurl.com',
  170.                        :body => 'updated comment'}
  171.         response.should redirect_to(:action => 'edit', :id => feedback(:comment2).id)
  172.         feedback(:comment2).reload
  173.         feedback(:comment2).body.should_not == 'updated comment'
  174.       end
  175.     end
  176.   end
  177.   describe 'publisher access' do
  178.     before :each do
  179.       request.session = { :user => users(:user_publisher).id }
  180.     end
  181.     def feedback_from_own_article
  182.       feedback(:comment_on_publisher_article)
  183.     end
  184.     
  185.     def feedback_from_not_own_article
  186.       feedback(:comment2)
  187.     end
  188.     describe 'delete action' do
  189.       it_should_behave_like "destroy feedback with feedback from own article"
  190.       it "should not delete feedback doesn't own" do
  191.         lambda do
  192.           post 'delete', :id => feedback_from_not_own_article.id
  193.         end.should_not change(Feedback, :count)
  194.         lambda do
  195.           Feedback.find(feedbackfrom_not_own_article.id)
  196.         end.should_not raise_error(ActiveRecord::RecordNotFound)
  197.         response.should redirect_to(:controller => 'admin/feedback', :action => 'index')
  198.       end
  199.     end
  200.     describe 'edit action' do
  201.       it 'should not edit comment no own article' do
  202.         get 'edit', :id => feedback_from_not_own_article.id
  203.         response.should redirect_to(:action => 'index')
  204.       end
  205.       it 'should edit comment if own article' do
  206.         get 'edit', :id => feedback_from_own_article.id
  207.         response.should be_success
  208.         response.should render_template('edit')
  209.         assigns(:comment).should == feedback_from_own_article
  210.         assigns(:article).should == feedback_from_own_article.article
  211.       end
  212.     end
  213.     describe 'update action' do
  214.       it 'should update comment if own article' do
  215.         post 'update', :id => feedback_from_own_article.id, 
  216.           :comment => {:author => 'Bob Foo2', 
  217.                        :url => 'http://fakeurl.com',
  218.                        :body => 'updated comment'}
  219.         response.should redirect_to(:action => 'article', :id => feedback_from_own_article.article.id)
  220.         feedback_from_own_article.reload
  221.         feedback_from_own_article.body.should == 'updated comment'
  222.       end
  223.       it 'should not update comment if not own article' do
  224.         post 'update', :id => feedback_from_not_own_article.id, 
  225.           :comment => {:author => 'Bob Foo2', 
  226.                        :url => 'http://fakeurl.com',
  227.                        :body => 'updated comment'}
  228.         response.should redirect_to(:action => 'index')
  229.         feedback_from_not_own_article.reload
  230.         feedback_from_not_own_article.body.should_not == 'updated comment'
  231.       end
  232.     end
  233.     describe '#bulkops action' do
  234.       before :each do
  235.         post :bulkops, :bulkop_top => 'Delete all spam'
  236.       end
  237.       it 'should redirect to action' do
  238.         @response.should redirect_to(:action => 'index')
  239.       end
  240.     end
  241.   end
  242. end