Add more specs for questions controller
[shapado:piglops-shapado.git] / spec / controllers / questions_controller_spec.rb
1 require 'spec_helper'
2
3 describe QuestionsController do
4   include Devise::TestHelpers
5
6   before (:each) do
7     stub_group
8     @user = User.make(:user)
9     stub_authentication @user
10   end
11
12   describe "GET 'index'" do
13     it "should be successful" do
14       get 'index'
15       response.should be_success
16     end
17   end
18
19   describe "GET 'history'" do
20     before (:each) do
21       @question = Question.make(:question)
22       stub_group(@question.group)
23     end
24
25     it "should be successful" do
26       get 'history', :id => @question.id
27       response.should be_success
28     end
29   end
30
31   describe "GET 'diff'" do
32     before (:each) do
33       @question = Question.make(:question)
34       stub_group(@question.group)
35     end
36
37     it "should be successful" do
38       get 'diff', :id => @question.id
39       response.should be_success
40     end
41   end
42
43   describe "GET 'revert'" do
44     before (:each) do
45       @question = Question.make(:question, :user => @user)
46       stub_group(@question.group)
47     end
48
49     it "should be successful" do
50       get 'revert', :id => @question.id
51       response.should be_success
52     end
53   end
54
55   describe "GET 'related_questions'" do
56     before (:each) do
57       @question = Question.make(:question)
58       stub_group(@question.group)
59     end
60
61     it "should be successful" do
62       get 'related_questions', :id => @question.id, :format => :js
63       response.should be_success
64     end
65   end
66
67   describe "GET 'tags_for_autocomplete'" do
68     before (:each) do
69       @question = Question.make(:question)
70       stub_group(@question.group)
71     end
72
73     it "should be successful" do
74       get 'tags_for_autocomplete', :term => @question.id, :format => :js
75       response.should be_success
76     end
77   end
78
79   describe "GET 'show'" do
80     before (:each) do
81       @question = Question.make(:question)
82       stub_group(@question.group)
83     end
84
85     it "should be successful" do
86       get 'show', :id => @question.id
87       response.should be_success
88       assigns[:question].id.should == @question.id
89     end
90   end
91
92   describe "GET 'new'" do
93     it "should be successful" do
94       get 'new'
95       response.should be_success
96     end
97   end
98
99   describe "GET 'edit'" do
100     before (:each) do
101       @question = Question.make(:question, :user => @user)
102       stub_group(@question.group)
103     end
104
105     it "should be successful" do
106       @user.stub!(:can_edit_others_posts_on?).with(@question.group).and_return(true)
107       get 'edit', :id => @question.id
108       response.should be_success
109     end
110   end
111
112   describe "POST 'create'" do
113     before (:each) do
114       @group = stub_group
115     end
116
117     it "should be successful" do
118       post 'create', :question => Question.plan(:question, :user => @user)
119       response.should redirect_to question_path(:id => assigns[:question].slug)
120     end
121
122     it "should be successful unlogged" do
123       sign_out(@user)
124       controller.stub!(:current_user).and_return(nil)
125       controller.should_receive(:recaptcha_valid?).twice.and_return(true)
126       post 'create', :question => Question.plan(:question),
127                      :user => {:email => "anonimous@example.com"}
128       response.should redirect_to question_path(:id => assigns[:question].slug)
129     end
130   end
131
132   describe "PUT 'update'" do
133     before (:each) do
134       @question = Question.make(:question, :user => @user)
135       @question_attrs = Question.plan(:question, :user => @user)
136       stub_group(@question.group)
137     end
138
139     it "should be successful" do
140       @question_attrs.delete("title")
141       put 'update', :id => @question.id, :question => @question_attrs
142       response.should redirect_to question_path(:id => assigns[:question].slug)
143     end
144   end
145
146   describe "DELETE 'destroy'" do
147     before (:each) do
148       @question = Question.make(:question, :user => @user)
149       stub_group(@question.group)
150     end
151
152     it "should be successful" do
153       delete 'destroy', :id => @question.id
154       response.should redirect_to questions_path
155     end
156   end
157
158   describe "GET 'solve'" do
159     before (:each) do
160       @question = Question.make(:question, :user => @user)
161       @answer = Answer.make(:answer, :question => @question)
162       @question.answers << @answer
163       @question.save
164       stub_group(@question.group)
165     end
166
167     it "should be successful" do
168       get 'solve', :id => @question.id, :answer_id => @answer.id
169       response.should redirect_to question_path(:id => assigns[:question].slug)
170     end
171   end
172
173   describe "GET 'unsolve'" do
174     before (:each) do
175       @question = Question.make(:question, :user => @user)
176       @answer = Answer.make(:answer, :question => @question)
177       @question.answers << @answer
178       @question.answer = @answer
179       @question.accepted = true
180       @question.save
181       stub_group(@question.group)
182     end
183
184     it "should be successful" do
185       get 'unsolve', :id => @question.id, :answer_id => @answer.id
186       response.should redirect_to question_path(:id => assigns[:question].slug)
187     end
188   end
189
190   describe "GET 'close'" do
191     before (:each) do
192       @question = Question.make(:question, :user => @user)
193       stub_group(@question.group)
194       @user.stub(:mod_of?).with{@question.group}.and_return(true)
195     end
196
197     it "should be successful" do
198       get 'close', :id => @question.id
199       response.should redirect_to question_path(:id => assigns[:question].slug)
200     end
201   end
202
203   describe "GET 'open'" do
204     before (:each) do
205       @question = Question.make(:question, :user => @user)
206       stub_group(@question.group)
207     end
208
209     it "should be successful" do
210       get 'open', :id => @question.id
211       response.should redirect_to question_path(:id => assigns[:question].slug)
212     end
213   end
214
215   describe "GET 'follow'" do
216     before (:each) do
217       @question = Question.make(:question, :user => @user)
218       stub_group(@question.group)
219     end
220
221     it "should be successful" do
222       get 'follow', :id => @question.id
223       response.should redirect_to question_path(:id => assigns[:question].slug)
224     end
225   end
226
227   describe "GET 'unfollow'" do
228     before (:each) do
229       @question = Question.make(:question, :user => @user)
230       stub_group(@question.group)
231     end
232
233     it "should be successful" do
234       get 'unfollow', :id => @question.id
235       response.should redirect_to question_path(:id => assigns[:question].slug)
236     end
237   end
238
239   describe "PUT 'retag_to'" do
240     before (:each) do
241       @question = Question.make(:question, :user => @user)
242       @question_attrs = {:tags => ["x","y","z"]}
243       stub_group(@question.group)
244     end
245
246     it "should be successful" do
247       put 'retag_to', :id => @question.id, :question => @question_attrs
248       response.should redirect_to question_path(:id => assigns[:question].slug)
249     end
250   end
251
252   describe "GET 'retag'" do
253     before (:each) do
254       @question = Question.make(:question, :user => @user)
255       stub_group(@question.group)
256     end
257
258     it "should be successful" do
259       @user.stub!(:can_edit_others_posts_on?).with(@question.group).and_return(true)
260       get 'retag', :id => @question.id
261       response.should be_success
262     end
263   end
264
265   describe "GET 'twitter_share'" do
266     before (:each) do
267       @question = Question.make(:question)
268       stub_group(@question.group)
269     end
270
271     it "should be successful" do
272       cmd = mock("cmd")
273       get 'twitter_share', :id => @question.id
274       response.should redirect_to question_path(@question)
275       assigns[:question].id.should == @question.id
276     end
277   end
278
279   describe "GET 'random'" do
280     before (:each) do
281       @question = Question.make(:question)
282       stub_group(@question.group)
283     end
284
285     it "should be successful" do
286       get 'random'
287       response.should redirect_to question_path(@question)
288       assigns[:question].id.should == @question.id
289     end
290   end
291
292   describe "GET 'remove_attachment'" do
293     before (:each) do
294       @question = Question.make(:question, :user => @user)
295       stub_group(@question.group)
296     end
297
298     it "should be successful" do
299       @question.group.questions.should_receive(:by_slug).and_return(@question)
300       @question.attachments.should_receive(:delete).with("attach_id")
301       get 'remove_attachment', :id => @question.id, :attach_id => "attach_id"
302       response.should redirect_to edit_question_path(@question)
303     end
304   end
305
306   describe "GET 'move'" do
307     before (:each) do
308       @question = Question.make(:question, :user => @user)
309       @user.stub!(:admin?).and_return(true)
310       stub_group(@question.group)
311     end
312
313     it "should be successful" do
314       get 'move', :id => @question.id
315       response.should be_success
316     end
317   end
318
319   describe "GET 'move_to'" do
320     before (:each) do
321       @question = Question.make(:question, :user => @user)
322       @user.stub!(:admin?).and_return(true)
323       @new_group = Group.make(:group)
324
325       Group.stub!(:by_slug).with(@new_group.id).and_return(@new_group)
326       stub_group(@question.group)
327     end
328
329     it "should be successful" do
330       get 'move_to', :id => @question.id, :question => {:group => @new_group.id}
331       response.should redirect_to question_path(@question)
332     end
333   end
334 end