OSDN Git Service

t30350#:fix destroy
[pettanr/pettanr.git] / spec / controllers / comics_controller_spec.rb
1 # -*- encoding: utf-8 -*-\r
2 require 'spec_helper'\r
3 #コミック\r
4 \r
5 describe ComicsController do\r
6   before do\r
7     @admin =FactoryGirl.create :admin\r
8     @sp = FactoryGirl.create :system_picture\r
9     @lg = FactoryGirl.create :license_group\r
10     @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id\r
11     @user = FactoryGirl.create :user_yas\r
12     @author = FactoryGirl.create :author, :user_id => @user.id\r
13   end\r
14   \r
15   describe '一覧表示に於いて' do\r
16     before do\r
17       @comic = FactoryGirl.create :comic, :author_id => @user.author.id\r
18       Comic.stub(:list).and_return([@comic, @comic, @comic])\r
19       sign_in @user\r
20     end\r
21     context '事前チェックする' do\r
22       it '与えられたpageがセットされている' do\r
23         get :index, :page => 5\r
24         assigns(:page).should eq 5\r
25       end\r
26       it '省略されると@pageに1値が入る' do\r
27         get :index\r
28         assigns(:page).should eq 1\r
29       end\r
30       it '与えられたpage_sizeがセットされている' do\r
31         get :index, :page_size => 15\r
32         assigns(:page_size).should eq 15\r
33       end\r
34       it '省略されると@page_sizeにデフォルト値が入る' do\r
35         get :index\r
36         assigns(:page_size).should eq Comic.default_page_size\r
37       end\r
38       it '最大を超えると@page_sizeにデフォルト最大値が入る' do\r
39         get :index, :page_size => 1500\r
40         assigns(:page_size).should eq Comic.max_page_size\r
41       end\r
42       it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do\r
43         get :index, :page_size => 0\r
44         assigns(:page_size).should eq Comic.default_page_size\r
45       end\r
46     end\r
47     context 'つつがなく終わるとき' do\r
48       it 'ステータスコード200 OKを返す' do\r
49         get :index\r
50         response.should be_success \r
51       end\r
52       it 'コミックモデルに一覧を問い合わせている' do\r
53         Comic.should_receive(:list).exactly(1)\r
54         get :index\r
55       end\r
56       it '@comicsにリストを取得している' do\r
57         get :index\r
58         assigns(:comics).should have_at_least(3).items\r
59       end\r
60       context 'html形式' do\r
61         it 'indexテンプレートを描画する' do\r
62           get :index\r
63           response.should render_template("index")\r
64         end\r
65       end\r
66       context 'json形式' do\r
67         it 'jsonデータを返す' do\r
68           get :index, :format => :json\r
69           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)\r
70         end\r
71         it 'コミックモデルにjson一覧出力オプションを問い合わせている' do\r
72           Comic.should_receive(:list_json_opt).exactly(1)\r
73           get :index, :format => :json\r
74         end\r
75         it 'データがリスト構造になっている' do\r
76           get :index, :format => :json\r
77           json = JSON.parse response.body\r
78           json.should have_at_least(3).items\r
79         end\r
80         it 'リストの先頭くらいはコミックっぽいものであって欲しい' do\r
81           get :index, :format => :json\r
82           json = JSON.parse response.body\r
83           json.first.has_key?("title").should be_true\r
84           json.first.has_key?("visible").should be_true\r
85         end\r
86       end\r
87     end\r
88     context '作家権限がないとき' do\r
89       before do\r
90         sign_out @user\r
91       end\r
92       context 'html形式' do\r
93         it 'ステータスコード302 Foundを返す' do\r
94           get :index\r
95           response.status.should eq 302\r
96         end\r
97         it 'サインインページへ遷移する' do\r
98           get :index\r
99           response.should redirect_to '/users/sign_in'\r
100         end\r
101       end\r
102       context 'json形式' do\r
103         it 'ステータスコード401 Unauthorizedを返す' do\r
104           get :index, :format => :json\r
105           response.status.should eq 401\r
106         end\r
107         it '応答メッセージにUnauthorizedを返す' do\r
108           get :index, :format => :json\r
109           response.message.should match(/Unauthorized/)\r
110         end\r
111       end\r
112     end\r
113   end\r
114   \r
115   describe '単体表示に於いて' do\r
116     before do\r
117       @comic = FactoryGirl.create :comic, :author_id => @user.author.id, :title => 'normal'\r
118       Comic.stub(:show).and_return(@comic)\r
119       sign_in @user\r
120     end\r
121     context 'つつがなく終わるとき' do\r
122       it 'ステータスコード200 OKを返す' do\r
123         get :show, :id => @comic.id\r
124         response.should be_success\r
125       end\r
126       it 'コミックモデルに単体取得を問い合わせている' do\r
127         Comic.should_receive(:show).exactly(1)\r
128         get :show\r
129       end\r
130       it '@comicにアレを取得している' do\r
131         get :show, :id => @comic.id\r
132         assigns(:comic).id.should eq(@comic.id)\r
133       end\r
134       context 'html形式' do\r
135         it 'showテンプレートを描画する' do\r
136           get :show, :id => @comic.id\r
137           response.should render_template("show")\r
138         end\r
139       end\r
140       context 'json形式' do\r
141         it 'jsonデータを返す' do\r
142           get :show, :id => @comic.id, :format => :json\r
143           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)\r
144         end\r
145         it 'コミックモデルにjson単体出力オプションを問い合わせている' do\r
146           Comic.should_receive(:show_json_opt).exactly(1)\r
147           get :show, :id => @comic.id, :format => :json\r
148         end\r
149         it 'データがアレになっている' do\r
150           get :show, :id => @comic.id, :format => :json\r
151           json = JSON.parse response.body\r
152           json["title"].should match(/normal/)\r
153           json["visible"].should_not be_nil\r
154         end\r
155       end\r
156     end\r
157     context '作家権限がないとき' do\r
158       before do\r
159         sign_out @user\r
160       end\r
161       context 'html形式' do\r
162         it 'ステータスコード302 Foundを返す' do\r
163           get :show, :id => @comic.id\r
164           response.status.should eq 302\r
165         end\r
166         it 'サインインページへ遷移する' do\r
167           get :show, :id => @comic.id\r
168           response.body.should redirect_to '/users/sign_in'\r
169         end\r
170       end\r
171       context 'json形式' do\r
172         it 'ステータスコード401 Unauthorizedを返す' do\r
173           get :show, :id => @comic.id, :format => :json\r
174           response.status.should eq 401\r
175         end\r
176         it '応答メッセージにUnauthorizedを返す' do\r
177           get :show, :id => @comic.id, :format => :json\r
178           response.message.should match(/Unauthorized/)\r
179         end\r
180       end\r
181     end\r
182 =begin\r
183     context '対象コミックがないとき' do\r
184       context 'html形式' do\r
185         it '例外404 not_foundを返す' do\r
186           lambda{\r
187             get :show, :id => 0\r
188           }.should raise_error(ActiveRecord::RecordNotFound)\r
189         end\r
190       end\r
191       context 'json形式' do\r
192         it '例外404 not_foundを返す' do\r
193           lambda{ \r
194             get :show, :id => 0, :format => :json\r
195           }.should raise_error(ActiveRecord::RecordNotFound)\r
196         end\r
197       end\r
198     end\r
199     context '非公開コミックを見ようとしたとき' do\r
200       context 'html形式' do\r
201         it '例外403 forbiddenを返す' do\r
202           Comic.any_instance.stub(:visible?).with(any_args()).and_return(false)\r
203           hidden = FactoryGirl.create :hidden_comic, :author_id => @author.id\r
204           lambda{\r
205             get :show, :id => hidden\r
206           }.should raise_error(ActiveRecord::Forbidden)\r
207         end\r
208       end\r
209       context 'json形式' do\r
210         it '例外403 forbiddenを返す' do\r
211           Comic.any_instance.stub(:visible?).with(any_args()).and_return(false)\r
212           hidden = FactoryGirl.create :hidden_comic, :author_id => @author.id\r
213           lambda{\r
214             get :show, :id => hidden, :format => :json\r
215           }.should raise_error(ActiveRecord::Forbidden)\r
216         end\r
217       end\r
218     end\r
219 =end\r
220   end\r
221   describe 'コミック数取得に於いて' do\r
222     before do\r
223       Comic.should_receive(:visible_count).and_return(3)\r
224 #      sign_in @user\r
225     end\r
226     context 'つつがなく終わるとき' do\r
227       it 'ステータスコード200 OKを返す' do\r
228         get :count, :format => :json\r
229         response.should be_success \r
230       end\r
231       context 'json形式' do\r
232         it 'jsonデータを返す' do\r
233           get :count, :format => :json\r
234           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)\r
235         end\r
236         it 'データがHash構造になっていてコミック数が1である' do\r
237           get :count, :format => :json\r
238           json = JSON.parse response.body\r
239           json["count"].should == 3\r
240         end\r
241       end\r
242     end\r
243   end\r
244 \r
245   describe '新規作成フォーム表示に於いて' do\r
246     before do\r
247       sign_in @user\r
248     end\r
249     context 'つつがなく終わるとき' do\r
250       it 'ステータスコード200 OKを返す' do\r
251         get :new\r
252         response.should be_success \r
253       end\r
254       it '@comicに新規データを用意している' do\r
255         get :new\r
256         assigns(:comic).should be_a_new(Comic)\r
257       end\r
258       it 'コミックモデルにデフォルト値補充を依頼している' do\r
259         Comic.any_instance.should_receive(:supply_default).exactly(1)\r
260         get :new\r
261       end\r
262       context 'html形式' do\r
263         it 'newテンプレートを描画する' do\r
264           get :new\r
265           response.should render_template("new")\r
266         end\r
267       end\r
268       context 'js形式' do\r
269         it 'new.jsテンプレートを描画する' do\r
270           get :new, :format => :js\r
271           response.should render_template("new")\r
272         end\r
273       end\r
274       context 'json形式' do\r
275         it 'jsonデータを返す' do\r
276           get :new, :format => :json\r
277           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)\r
278         end\r
279         it 'コミックモデルにjson単体出力オプションを問い合わせている' do\r
280           Comic.should_receive(:show_json_opt).exactly(1)\r
281           get :new, :format => :json\r
282         end\r
283       end\r
284     end\r
285     context '作家権限がないとき' do\r
286       before do\r
287         sign_out @user\r
288       end\r
289       context 'html形式' do\r
290         it 'ステータスコード302 Foundを返す' do\r
291           get :new\r
292           response.status.should eq 302\r
293         end\r
294         it 'サインインページへ遷移する' do\r
295           get :new\r
296           response.body.should redirect_to '/users/sign_in'\r
297         end\r
298       end\r
299       context 'js形式' do\r
300         it 'ステータスコード401 Unauthorizedを返す' do\r
301           get :new, :format => :js\r
302           response.status.should eq 401\r
303         end\r
304         it '応答メッセージにUnauthorizedを返す' do\r
305           get :new, :format => :js\r
306           response.message.should match(/Unauthorized/)\r
307         end\r
308       end\r
309       context 'json形式' do\r
310         it 'ステータスコード401 Unauthorizedを返す' do\r
311           get :new, :format => :json\r
312           response.status.should eq 401\r
313         end\r
314         it '応答メッセージにUnauthorizedを返す' do\r
315           get :new, :format => :json\r
316           response.message.should match(/Unauthorized/)\r
317         end\r
318       end\r
319     end\r
320   end\r
321 \r
322   describe '新規作成に於いて' do\r
323     before do\r
324       sign_in @user\r
325       @attr = FactoryGirl.attributes_for(:comic, :author_id => @author.id, :title => 'normal')\r
326     end\r
327     context '事前チェックしておく' do\r
328       it 'コミックモデルにデフォルト値補充を依頼している' do\r
329         Comic.any_instance.should_receive(:supply_default).exactly(1)\r
330         post :create, :comic => @attr\r
331       end\r
332       it 'コミックモデルにカラム値復元を依頼している' do\r
333         Comic.any_instance.should_receive(:attributes=).exactly(1)\r
334         post :create, :comic => @attr\r
335       end\r
336       it 'コミックモデルに上書き補充を依頼している' do\r
337         Comic.any_instance.should_receive(:overwrite).exactly(1)\r
338         post :create, :comic => @attr\r
339       end\r
340       it 'モデルに保存依頼する' do\r
341         Comic.any_instance.should_receive(:save).exactly(1)\r
342         post :create, :comic => @attr\r
343       end\r
344     end\r
345     context 'つつがなく終わるとき' do\r
346       it "@comicに作成されたコミックを保持していて、それがDBにある" do\r
347         post :create, :comic => @attr\r
348         assigns(:comic).should be_a(Comic)\r
349         assigns(:comic).should be_persisted\r
350       end\r
351       context 'html形式' do\r
352         it 'ステータスコード302 Foundを返す' do\r
353           Comic.any_instance.stub(:save).and_return(true)\r
354           post :create, :comic => @attr\r
355           response.status.should eq 302\r
356         end\r
357         it '作成されたコミックの表示ページへ遷移する' do\r
358 #          Comic.any_instance.stub(:save).and_return(true)\r
359           post :create, :comic => @attr\r
360           response.should redirect_to(Comic.last)\r
361         end\r
362       end\r
363       context 'json形式' do\r
364         it 'ステータスコード200 OKを返す' do\r
365 #          Comic.any_instance.stub(:save).and_return(true)\r
366           post :create, :comic => @attr, :format => :json\r
367           response.should be_success \r
368         end\r
369         it '作成されたコミックをjsonデータで返す' do\r
370           post :create, :comic => @attr, :format => :json\r
371           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)\r
372         end\r
373         it 'データがアレになっている' do\r
374           post :create, :comic => @attr, :format => :json\r
375           json = JSON.parse response.body\r
376           json["title"].should match(/normal/)\r
377           json["visible"].should_not be_nil\r
378         end\r
379       end\r
380     end\r
381     context '作家権限がないとき' do\r
382       before do\r
383         sign_out @user\r
384       end\r
385       context 'html形式' do\r
386         it 'ステータスコード302 Foundを返す' do\r
387           post :create, :comic => @attr\r
388           response.status.should eq 302\r
389         end\r
390         it 'サインインページへ遷移する' do\r
391           post :create, :comic => @attr\r
392           response.body.should redirect_to '/users/sign_in'\r
393         end\r
394       end\r
395       context 'json形式' do\r
396         it 'ステータスコード401 Unauthorizedを返す' do\r
397           post :create, :comic => @attr, :format => :json\r
398           response.status.should eq 401\r
399         end\r
400         it '応答メッセージにUnauthorizedを返す' do\r
401           post :create, :comic => @attr, :format => :json\r
402           response.message.should match(/Unauthorized/)\r
403         end\r
404       end\r
405     end\r
406     context '検証、保存に失敗した' do\r
407       before do\r
408         Comic.any_instance.stub(:save).and_return(false)\r
409       end\r
410       it "未保存のコミックを保持している" do\r
411         post :create, :comic => @attr\r
412         assigns(:comic).should be_a_new(Comic)\r
413       end\r
414       context 'html形式' do\r
415         it 'ステータスコード200 OKを返す' do\r
416           post :create, :comic => @attr\r
417           response.status.should eq 200\r
418         end\r
419         it '新規ページを描画する' do\r
420           post :create, :comic => @attr\r
421           response.should render_template("new")\r
422         end\r
423       end\r
424       context 'json形式' do\r
425         it 'ステータスコード422 unprocessable_entity を返す' do\r
426           post :create, :comic => @attr, :format => :json\r
427           response.status.should eq 422\r
428         end\r
429         it '応答メッセージUnprocessable Entityを返す' do\r
430           post :create, :comic => @attr, :format => :json\r
431           response.message.should match(/Unprocessable/)\r
432         end\r
433       end\r
434     end\r
435   end\r
436 \r
437   describe '編集フォーム表示に於いて' do\r
438     before do\r
439       @comic = FactoryGirl.create :comic, :author_id => @user.author.id\r
440       sign_in @user\r
441       Comic.stub(:edit).and_return(@comic)\r
442     end\r
443     context 'つつがなく終わるとき' do\r
444       it 'ステータスコード200 OKを返す' do\r
445         get :edit, :id => @comic.id\r
446         response.should be_success \r
447       end\r
448       it 'コミックモデルに編集取得を問い合わせている' do\r
449         Comic.should_receive(:edit).exactly(1)\r
450         get :edit, :id => @comic.id\r
451       end\r
452       it '@comicにデータを用意している' do\r
453         get :edit, :id => @comic.id\r
454         assigns(:comic).should eq @comic\r
455       end\r
456       context 'html形式' do\r
457         it 'editテンプレートを描画する' do\r
458           get :edit, :id => @comic.id\r
459           response.should render_template("edit")\r
460         end\r
461       end\r
462       context 'js形式' do\r
463         it 'edit.jsテンプレートを描画する' do\r
464           get :edit, :id => @comic.id, :format => :js\r
465           response.should render_template("edit")\r
466         end\r
467       end\r
468     end\r
469     context '作家権限がないとき' do\r
470       before do\r
471         sign_out @user\r
472       end\r
473       context 'html形式' do\r
474         it 'ステータスコード302 Foundを返す' do\r
475           get :edit, :id => @comic.id\r
476           response.status.should eq 302\r
477         end\r
478         it 'サインインページへ遷移する' do\r
479           get :edit, :id => @comic.id\r
480           response.body.should redirect_to '/users/sign_in'\r
481         end\r
482       end\r
483       context 'js形式' do\r
484         it 'ステータスコード401 Unauthorizedを返す' do\r
485           get :edit, :id => @comic.id, :format => :js\r
486           response.status.should eq 401\r
487         end\r
488         it '応答メッセージにUnauthorizedを返す' do\r
489           get :edit, :id => @comic.id, :format => :js\r
490           response.message.should match(/Unauthorized/)\r
491         end\r
492       end\r
493     end\r
494   end\r
495 \r
496   describe '更新に於いて' do\r
497     before do\r
498       @comic = FactoryGirl.create :comic, :author => @author\r
499       @attr = FactoryGirl.attributes_for(:comic, :author_id => @author.id, :title => 'updated title', :visible => 0)\r
500       sign_in @user\r
501     end\r
502     context '事前チェックしておく' do\r
503       it 'コミックモデルに編集取得を問い合わせている' do\r
504         Comic.stub(:edit).with(any_args()).and_return @comic\r
505         Comic.should_receive(:edit).exactly(1)\r
506         put :update, :id => @comic.id, :comic => @attr\r
507       end\r
508       it 'コミックモデルにカラム値復元を依頼している' do\r
509         Comic.any_instance.should_receive(:attributes=).exactly(1)\r
510         put :update, :id => @comic.id, :comic => @attr\r
511       end\r
512       it 'コミックモデルに上書き補充を依頼している' do\r
513         Comic.any_instance.should_receive(:overwrite).exactly(1)\r
514         put :update, :id => @comic.id, :comic => @attr\r
515       end\r
516       it 'モデルに更新を依頼する' do\r
517         Comic.any_instance.stub(:save).with(any_args).and_return true\r
518         Comic.any_instance.should_receive(:save).exactly(1)\r
519         put :update, :id => @comic.id, :comic => @attr\r
520       end\r
521       it '@comicにアレを取得している' do\r
522         put :update, :id => @comic.id, :comic => @attr\r
523         assigns(:comic).id.should eq(@comic.id)\r
524       end\r
525     end\r
526     context 'つつがなく終わるとき' do\r
527       it '更新される' do\r
528         put :update, :id => @comic.id, :comic => @attr\r
529         Comic.find(@comic.id).visible.should eq 0\r
530       end\r
531       context 'html形式' do\r
532         it 'ステータスコード302 Foundを返す' do\r
533           Comic.any_instance.stub(:save).with(any_args()).and_return(true)\r
534           put :update, :id => @comic.id, :comic => @attr\r
535           response.status.should eq 302\r
536         end\r
537         it '更新されたコミックの表示ページへ遷移する' do\r
538           put :update, :id => @comic.id, :comic => @attr\r
539           response.should redirect_to(@comic)\r
540         end\r
541       end\r
542       context 'json形式' do\r
543         it 'ステータスコード200 OKを返す' do\r
544           Comic.any_instance.stub(:save).with(any_args()).and_return(true)\r
545           put :update, :id => @comic.id, :comic => @attr, :format => :json\r
546           response.should be_success \r
547         end\r
548         it 'ページ本体は特に返さない' do\r
549           Comic.any_instance.stub(:save).with(any_args()).and_return(true)\r
550           put :update, :id => @comic.id, :comic => @attr, :format => :json\r
551           response.body.should match /./\r
552         end\r
553       end\r
554     end\r
555     context '作家権限がないとき' do\r
556       before do\r
557         sign_out @user\r
558       end\r
559       it 'ステータスコード302 Foundを返す' do\r
560         put :update, :id => @comic.id, :comic => @attr\r
561         response.status.should eq 302\r
562       end\r
563       context 'html形式' do\r
564         it 'サインインページへ遷移する' do\r
565           put :update, :id => @comic.id, :comic => @attr\r
566           response.body.should redirect_to '/users/sign_in'\r
567         end\r
568       end\r
569       context 'json形式' do\r
570         it '応答メッセージにUnauthorizedを返す' do\r
571           put :update, :id => @comic.id, :comic => @attr, :format => :json\r
572           response.message.should match(/Unauthorized/)\r
573         end\r
574       end\r
575     end\r
576     context '検証、保存に失敗したとき' do\r
577       before do\r
578         Comic.any_instance.stub(:save).and_return(false)\r
579       end\r
580       context 'html形式' do\r
581         it 'ステータスコード200 Okを返す' do\r
582           put :update, :id => @comic.id, :comic => @attr\r
583           response.status.should eq 200\r
584         end\r
585         it '編集ページを描画する' do\r
586           put :update, :id => @comic.id, :comic => @attr\r
587           response.should render_template("edit")\r
588         end\r
589       end\r
590       context 'json形式' do\r
591         it 'ステータスコード422 unprocessable_entity を返す' do\r
592           Comic.any_instance.stub(:save).and_return(false)\r
593           put :update, :id => @comic.id, :comic => @attr, :format => :json\r
594           response.status.should eq 422\r
595         end\r
596         it '応答メッセージUnprocessable Entityを返す' do\r
597           put :update, :id => @comic.id, :comic => @attr, :format => :json\r
598           response.message.should match(/Unprocessable/)\r
599         end\r
600       end\r
601     end\r
602   end\r
603 \r
604   describe '削除に於いて' do\r
605     before do\r
606       @comic = FactoryGirl.create :comic, :author => @author\r
607       sign_in @user\r
608     end\r
609     context '事前チェックしておく' do\r
610       before do\r
611         Comic.stub(:edit).with(any_args()).and_return @comic\r
612         Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)\r
613       end\r
614       it 'コミックモデルに編集取得を問い合わせている' do\r
615         Comic.should_receive(:edit).exactly(1)\r
616         delete :destroy, :id => @comic.id\r
617       end\r
618       it 'モデルに削除を依頼する' do\r
619         Comic.any_instance.should_receive(:destroy_with_story).exactly(1)\r
620         delete :destroy, :id => @comic.id\r
621       end\r
622       it '@comicにアレを取得している' do\r
623         delete :destroy, :id => @comic.id\r
624         assigns(:comic).id.should eq(@comic.id)\r
625       end\r
626     end\r
627     context 'つつがなく終わるとき' do\r
628       it '削除される' do\r
629         lambda {\r
630           delete :destroy, :id => @comic.id\r
631         }.should change Comic, :count\r
632       end\r
633       context 'html形式' do\r
634         before do\r
635           Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)\r
636         end\r
637         it 'ステータスコード302 Foundを返す' do\r
638           delete :destroy, :id => @comic.id\r
639           response.status.should eq 302\r
640         end\r
641         it 'マイコミックの一覧ページへ遷移する' do\r
642           delete :destroy, :id => @comic.id\r
643           response.should redirect_to('/home/comic')\r
644         end\r
645       end\r
646       context 'json形式' do\r
647         before do\r
648           Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)\r
649         end\r
650         it 'ステータスコード200 OKを返す' do\r
651           delete :destroy, :id => @comic.id, :format => :json\r
652           response.should be_success \r
653         end\r
654         it 'ページ本体は特に返さない' do\r
655           delete :destroy, :id => @comic.id, :format => :json\r
656           response.body.should match /./\r
657         end\r
658       end\r
659     end\r
660     context '作家権限がないとき' do\r
661       before do\r
662         sign_out @user\r
663       end\r
664       it 'ステータスコード302 Foundを返す' do\r
665         delete :destroy, :id => @comic.id\r
666         response.status.should eq 302\r
667       end\r
668       context 'html形式' do\r
669         it 'サインインページへ遷移する' do\r
670           delete :destroy, :id => @comic.id\r
671           response.body.should redirect_to '/users/sign_in'\r
672         end\r
673       end\r
674       context 'json形式' do\r
675         it '応答メッセージにUnauthorizedを返す' do\r
676           delete :destroy, :id => @comic.id, :format => :json\r
677           response.message.should match(/Unauthorized/)\r
678         end\r
679       end\r
680     end\r
681     context '削除に失敗したとき' do\r
682       before do\r
683         Comic.any_instance.stub(:destroy_with_story).and_return(false)\r
684       end\r
685       context 'html形式' do\r
686         it 'ステータスコード302 Foundを返す' do\r
687           delete :destroy, :id => @comic.id\r
688           response.status.should eq 302\r
689         end\r
690         it 'そのコミックの詳細ページへ遷移する' do\r
691           delete :destroy, :id => @comic.id\r
692           response.should redirect_to(comic_path(@comic))\r
693         end\r
694       end\r
695       context 'json形式' do\r
696         it 'ステータスコード422 unprocessable_entity を返す' do\r
697           delete :destroy, :id => @comic.id, :format => :json\r
698           response.status.should eq 422\r
699         end\r
700         it '応答メッセージUnprocessable Entityを返す' do\r
701           delete :destroy, :id => @comic.id, :format => :json\r
702           response.message.should match(/Unprocessable/)\r
703         end\r
704       end\r
705     end\r
706   end\r
707 \r
708 end\r