Finish port to fabrication
[shapado:piglops-shapado.git] / spec / controllers / comments_controller_spec.rb
1 require 'spec_helper'
2
3 describe CommentsController do
4   include Devise::TestHelpers
5
6   before (:each) do
7     @group = stub_group
8     @user = Fabricate(:user)
9     Thread.current[:current_user] = @user
10     @question = Fabricate(:question, :group => @group)
11     stub_authentication @user
12   end
13
14   describe "GET 'index'" do
15     it "should be successful" do
16       get 'index', :question_id => @question.slug, :format => :json
17       response.should be_success
18     end
19   end
20
21   describe "GET 'edit'" do
22     before (:each) do
23       @comment = Fabricate(:comment, :commentable => @question, :group_id => @group.id, :user_id => @user.id)
24       stub_group(@question.group)
25     end
26
27     it "should be successful" do
28       get 'edit', :id => @comment.id, :question_id => @question.id, :format => "js"
29       response.should be_success
30     end
31   end
32
33   describe "POST 'create'" do
34     before (:each) do
35       @comment = Fabricate(:comment,
36                            :commentable => @question,
37                            :group_id => @group.id,
38                            :user_id => @user.id)
39       stub_group(@group)
40     end
41
42     it "should be successful" do
43       post 'create', :question_id => @question.id, :comment => Fabricate.attributes_for(:comment, :user => @user)
44       response.should redirect_to question_path(:id => assigns[:question].slug)
45     end
46   end
47
48   describe "PUT 'update'" do
49     before (:each) do
50       @comment = Fabricate(:comment,
51                            :commentable => @question,
52                               :group_id => @group.id,
53                               :user_id => @user.id)
54
55       @comment_attrs = Fabricate.attributes_for(:comment, :user => @user)
56       stub_group(@question.group)
57     end
58
59     it "should be successful" do
60       @user.stub!(:can_modify?).with(@comment).and_return(true)
61       put 'update', :id => @comment.id, :question_id => @question.id, :comment => @comment_attrs
62       response.should redirect_to question_path(:id => @question.slug)
63     end
64   end
65
66   describe "DELETE 'destroy'" do
67     before (:each) do
68       @comment = Fabricate(:comment, :commentable => @question, :group_id => @group.id, :user_id => @user.id)
69       stub_group(@question.group)
70     end
71
72     it "should be successful" do
73       @user.should_receive(:mod_of?).with{@group}.and_return(true)
74       delete 'destroy', :id => @comment.id, :question_id => @question.id
75       response.should redirect_to question_path(:id => @question.slug)
76     end
77   end
78 end