OSDN Git Service

fix: any
[pettanr/pettanr.git] / spec / controllers / sheet_panels_controller_spec.rb
1 # -*- encoding: utf-8 -*-
2 require 'spec_helper'
3 #紙コマ
4 describe SheetPanelsController do
5   before do
6     @admin = FactoryGirl.create :admin
7     @sp = FactoryGirl.create :system_picture
8     @lg = FactoryGirl.create :license_group
9     @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
10     @user = FactoryGirl.create :user_yas
11     @author = FactoryGirl.create :author, :user_id => @user.id
12     @sheet = FactoryGirl.create :sheet, :author_id => @user.author.id
13     @panel = FactoryGirl.create :panel, :author_id => @author.id
14   end
15   
16 if MagicNumber['run_mode'] == 1
17   describe '一覧表示に於いて' do
18     before do
19       sign_in @user
20       @sheet_panel = FactoryGirl.create :sheet_panel, :t => 0, :sheet_id => @sheet.id, :panel_id => @panel.id, :author_id => @author.id
21       SheetPanel.stub(:list).and_return([@sheet_panel, @sheet_panel, @sheet_panel])
22     end
23     context 'パラメータpageについて' do
24       it '@pageに値が入る' do
25         get :index, :page => 5
26         assigns(:page).should eq 5
27       end
28       it '省略されると@pageに1値が入る' do
29         get :index
30         assigns(:page).should eq 1
31       end
32       it '与えられたpage_sizeがセットされている' do
33         get :index, :page_size => 15
34         assigns(:page_size).should eq 15
35       end
36       it '省略されると@page_sizeにデフォルト値が入る' do
37         get :index
38         assigns(:page_size).should eq SheetPanel.default_page_size
39       end
40       it '最大を超えると@page_sizeにデフォルト最大値が入る' do
41         get :index, :page_size => 1500
42         assigns(:page_size).should eq SheetPanel.max_page_size
43       end
44       it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
45         get :index, :page_size => 0
46         assigns(:page_size).should eq SheetPanel.default_page_size
47       end
48     end
49     context 'つつがなく終わるとき' do
50       it 'ステータスコード200 OKを返す' do
51         get :index
52         response.should be_success 
53       end
54       it '紙コマモデルに一覧を問い合わせている' do
55         SheetPanel.should_receive(:list).exactly(1)
56         get :index
57       end
58       it '@sheet_panelsにリストを取得している' do
59         get :index
60         assigns(:sheet_panels).should have_at_least(3).items
61       end
62       context 'html形式' do
63         it '@paginateにページ制御を取得している' do
64           get :index
65           assigns(:paginate).is_a?(Kaminari::PaginatableArray).should be_true
66         end
67         it 'indexテンプレートを描画する' do
68           get :index
69           response.should render_template("index")
70         end
71       end
72       context 'json形式' do
73         it 'jsonデータを返す' do
74           get :index, :format => :json
75           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
76         end
77         it '紙コマモデルにjson一覧出力オプションを問い合わせている' do
78           SheetPanel.should_receive(:list_json_opt).exactly(1)
79           get :index, :format => :json
80         end
81         it 'データがリスト構造になっている' do
82           get :index, :format => :json
83           json = JSON.parse response.body
84           json.should have_at_least(3).items
85         end
86         it 'リストの先頭くらいは紙コマっぽいものであって欲しい' do
87           get :index, :format => :json
88           json = JSON.parse response.body
89           json.first.has_key?("panel_id").should be_true
90           json.first.has_key?("sheet_id").should be_true
91           json.first.has_key?("t").should be_true
92         end
93       end
94     end
95     context 'ユーザ権限がないとき' do
96       before do
97         sign_out @user
98       end
99       context 'html形式' do
100         it 'ステータスコード302 Foundを返す' do
101           get :index
102           response.status.should eq 302
103         end
104         it 'サインインページへ遷移する' do
105           get :index
106           response.should redirect_to '/users/sign_in'
107         end
108       end
109       context 'json形式' do
110         it 'ステータスコード401 Unauthorizedを返す' do
111           get :index, :format => :json
112           response.status.should eq 401
113         end
114         it '応答メッセージにUnauthorizedを返す' do
115           get :index, :format => :json
116           response.message.should match(/Unauthorized/)
117         end
118       end
119     end
120     context 'ユーザ権限はないが管理者権限があるとき' do
121       before do
122         sign_out @user
123         sign_in @admin
124       end
125       it 'ステータスコード200 OKを返す' do
126         get :index
127         response.should be_success 
128       end
129     end
130     context 'ユーザだが作家登録していないとき' do
131       before do
132         @author.destroy
133       end
134       it 'ステータスコード200 OKを返す' do
135         get :index
136         response.should be_success 
137       end
138     end
139   end
140   
141   describe '単体表示に於いて' do
142     before do
143       sign_in @user
144       @sheet_panel = FactoryGirl.create :sheet_panel, :t => 0, :sheet_id => @sheet.id, :panel_id => @panel.id, :author_id => @author.id
145       Sheet.stub(:show).with(@sheet.id.to_s, [@user, nil]).and_return(@sheet)
146       Sheet.stub(:show).with(@sheet.id.to_s, [nil, @admin]).and_return(@sheet)
147       SheetPanel.stub(:show).with(@sheet_panel.id.to_s, [@user, nil]).and_return(@sheet_panel)
148       SheetPanel.stub(:show).with(@sheet_panel.id.to_s, [nil, @admin]).and_return(@sheet_panel)
149     end
150     context 'つつがなく終わるとき' do
151       it '紙コマモデルに単体取得を問い合わせている' do
152         SheetPanel.should_receive(:show).with(@sheet_panel.id.to_s, [@user, nil]).exactly(1)
153         get :show, :id => @sheet_panel.id
154       end
155       it '@sheet_panelにアレを取得している' do
156         get :show, :id => @sheet_panel.id
157         assigns(:sheet_panel).should eq @sheet_panel
158       end
159       context 'html形式' do
160         it 'ステータスコード200 OKを返す' do
161           get :show, :id => @sheet_panel.id
162           response.should be_success
163         end
164         it 'showテンプレートを描画する' do
165           get :show, :id => @sheet_panel.id
166           response.should render_template("show")
167         end
168       end
169       context 'json形式' do
170         it 'ステータスコード200 OKを返す' do
171           get :show, :id => @sheet_panel.id, :format => :json
172           response.should be_success
173         end
174         it 'jsonデータを返す' do
175           get :show, :id => @sheet_panel.id, :format => :json
176           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
177         end
178         it '紙コマモデルに紙コマjson出力を問い合わせている' do
179           SheetPanel.any_instance.should_receive(:sheet_panel_as_json).exactly(1)
180           get :show, :id => @sheet_panel.id, :format => :json
181         end
182         it 'データがアレになっている' do
183           get :show, :id => @sheet_panel.id, :format => :json
184           json = JSON.parse response.body
185           json.has_key?("panel_id").should be_true
186           json.has_key?("sheet_id").should be_true
187           json.has_key?("author_id").should be_true
188         end
189       end
190     end
191     context 'ユーザ権限がないとき' do
192       before do
193         sign_out @user
194       end
195       context 'html形式' do
196         it 'ステータスコード302 Foundを返す' do
197           get :show, :id => @sheet_panel.id
198           response.status.should eq 302
199         end
200         it 'サインインページへ遷移する' do
201           get :show, :id => @sheet_panel.id
202           response.body.should redirect_to '/users/sign_in'
203         end
204       end
205       context 'json形式' do
206         it 'ステータスコード401 Unauthorizedを返す' do
207           get :show, :id => @sheet_panel.id, :format => :json
208           response.status.should eq 401
209         end
210         it '応答メッセージにUnauthorizedを返す' do
211           get :show, :id => @sheet_panel.id, :format => :json
212           response.message.should match(/Unauthorized/)
213         end
214       end
215     end
216     context 'ユーザ権限はないが管理者権限があるとき' do
217       before do
218         sign_out @user
219         sign_in @admin
220       end
221       it 'ステータスコード200 OKを返す' do
222           get :show, :id => @sheet_panel.id
223         response.should be_success 
224       end
225     end
226     context 'ユーザだが作家登録していないとき' do
227       before do
228         @author.destroy
229       end
230       it 'ステータスコード200 OKを返す' do
231           get :show, :id => @sheet_panel.id
232         response.should be_success 
233       end
234     end
235   end
236   
237   describe '新規作成フォーム表示に於いて' do
238     before do
239       sign_in @user
240     end
241     context 'つつがなく終わるとき' do
242       it '@sheet_panelに新規データを用意している' do
243         get :new
244         assigns(:sheet_panel).should be_a_new(SheetPanel)
245       end
246       it 'モデルにデフォルト値補充を依頼している' do
247         SheetPanel.any_instance.should_receive(:supply_default).exactly(1)
248         get :new
249       end
250       context 'html形式' do
251         it 'ステータスコード200 OKを返す' do
252           get :new
253           response.should be_success 
254         end
255         it 'newテンプレートを描画する' do
256           get :new
257           response.should render_template("new")
258         end
259       end
260       context 'js形式' do
261         it 'ステータスコード200 OKを返す' do
262           get :new, :format => :js
263           response.should be_success 
264         end
265         it 'new.jsテンプレートを描画する' do
266           get :new, :format => :js
267           response.should render_template("new")
268         end
269       end
270       context 'json形式' do
271         it 'ステータスコード200 OKを返す' do
272           get :new, :format => :json
273           response.should be_success 
274         end
275         it 'jsonデータを返す' do
276           get :new, :format => :json
277           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
278         end
279         it '紙コマモデルの紙コマのjson出力を問い合わせている' do
280           SheetPanel.any_instance.should_receive(:sheet_panel_as_json).exactly(1)
281           get :new, :format => :json
282         end
283         it 'データがアレになっている' do
284           get :new, :format => :json
285           json = JSON.parse response.body
286           json.has_key?("panel_id").should be_true
287           json.has_key?("sheet_id").should be_true
288           json.has_key?("author_id").should be_true
289         end
290       end
291     end
292     context 'ユーザ権限がないとき' do
293       before do
294         sign_out @user
295       end
296       context 'html形式' do
297         it 'ステータスコード302 Foundを返す' do
298           get :new
299           response.status.should eq 302
300         end
301         it 'サインインページへ遷移する' do
302           get :new
303           response.body.should redirect_to '/users/sign_in'
304         end
305       end
306       context 'json形式' do
307         it 'ステータスコード401 Unauthorizedを返す' do
308           get :new, :format => :json
309           response.status.should eq 401
310         end
311         it '応答メッセージにUnauthorizedを返す' do
312           get :new, :format => :json
313           response.message.should match(/Unauthorized/)
314         end
315       end
316     end
317     context 'ユーザ権限はないが管理者権限があるとき' do
318       before do
319         sign_out @user
320         sign_in @admin
321       end
322       context 'html形式' do
323         it 'ステータスコード302 Foundを返す' do
324           get :new
325           response.status.should eq 302
326         end
327         it 'サインインページへ遷移する' do
328           get :new
329           response.body.should redirect_to '/users/sign_in'
330         end
331       end
332     end
333     context 'ユーザだが作家登録していないとき' do
334       before do
335         @author.destroy
336       end
337       context 'html形式' do
338         it 'ステータスコード302 Foundを返す' do
339           get :new
340           response.status.should eq 302
341         end
342         it '作家登録ページへ遷移する' do
343           get :new
344           response.body.should redirect_to new_author_path
345         end
346       end
347     end
348   end
349   
350   describe '新規作成に於いて' do
351     before do
352       @attr = FactoryGirl.attributes_for(:sheet_panel, :t => nil, :sheet_id => @sheet.id, :panel_id => @panel.id, :author_id => @author.id)
353       sign_in @user
354     end
355     context 'つつがなく終わるとき' do
356       it 'デフォルト値補充を依頼する' do
357         SheetPanel.any_instance.should_receive(:supply_default).exactly(1)
358         post :create, :sheet_panel => @attr
359       end
360       it 'POSTデータから、カラム値を復元している' do
361         SheetPanel.any_instance.stub(:store).and_return(true)
362         post :create, :sheet_panel => @attr
363         assigns(:sheet_panel).sheet_id.should eq @sheet.id
364         assigns(:sheet_panel).panel_id.should eq @panel.id
365       end
366       it '上書き補充を依頼する' do
367         SheetPanel.any_instance.should_receive(:overwrite).exactly(1)
368         post :create, :sheet_panel => @attr
369       end
370       it '用紙モデルに編集取得を依頼している' do
371         Sheet.stub(:edit).and_return(@sheet)
372         Sheet.should_receive(:edit).with(@sheet.id, @author).exactly(1)
373         post :create, :sheet_panel => @attr
374       end
375       it 'コマモデルに単体取得を依頼している' do
376         Panel.should_receive(:show).with(@panel.id, @author).exactly(1)
377         post :create, :sheet_panel => @attr
378       end
379       it 'モデルに保存依頼する' do
380         SheetPanel.any_instance.should_receive(:store).exactly(1)
381         post :create, :sheet_panel => @attr
382       end
383       it "@sheet_panelに作成された紙コマを保持していて、それがDBにある" do
384         post :create, :sheet_panel => @attr
385         assigns(:sheet_panel).should be_a(SheetPanel)
386         assigns(:sheet_panel).should be_persisted
387       end
388       context 'html形式' do
389         it 'ステータスコード302 Foundを返す' do
390           SheetPanel.any_instance.stub(:store).and_return(true)
391           post :create, :sheet_panel => @attr
392           response.status.should eq 302
393         end
394         it '用紙の紙コマ表示へ遷移する' do
395 #          SheetPanel.any_instance.stub(:store).and_return(true)
396           post :create, :sheet_panel => @attr
397           response.should redirect_to(play_sheet_path(@attr[:sheet_id]))
398         end
399       end
400       context 'json形式' do
401         it 'ステータスコード200 OKを返す' do
402 #          SheetPanel.any_instance.stub(:store).and_return(true)
403           post :create, :sheet_panel => @attr, :format => :json
404           response.should be_success 
405         end
406         it '作成された紙コマをjsonデータで返す' do
407           post :create, :sheet_panel => @attr, :format => :json
408           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
409         end
410         it '紙コマモデルの紙コマのjson出力を問い合わせている' do
411           SheetPanel.any_instance.should_receive(:sheet_panel_as_json).exactly(1)
412           post :create, :sheet_panel => @attr, :format => :json
413         end
414         it 'データがアレになっている' do
415           post :create, :sheet_panel => @attr, :format => :json
416           json = JSON.parse response.body
417           json["t"].should eq 0
418         end
419       end
420     end
421     context 'ユーザ権限がないとき' do
422       before do
423         sign_out @user
424       end
425       context 'html形式' do
426         it 'ステータスコード302 Foundを返す' do
427           post :create, :sheet_panel => @attr
428           response.status.should eq 302
429         end
430         it 'サインインページへ遷移する' do
431           post :create, :sheet_panel => @attr
432           response.body.should redirect_to '/users/sign_in'
433         end
434       end
435       context 'json形式' do
436         it 'ステータスコード401 Unauthorizedを返す' do
437           post :create, :sheet_panel => @attr, :format => :json
438           response.status.should eq 401
439         end
440         it '応答メッセージにUnauthorizedを返す' do
441           post :create, :sheet_panel => @attr, :format => :json
442           response.message.should match(/Unauthorized/)
443         end
444       end
445     end
446     context 'ユーザ権限はないが管理者権限があるとき' do
447       before do
448         sign_out @user
449         sign_in @admin
450       end
451       context 'html形式' do
452         it 'ステータスコード302 Foundを返す' do
453           post :create, :sheet_panel => @attr
454           response.status.should eq 302
455         end
456         it 'サインインページへ遷移する' do
457           post :create, :sheet_panel => @attr
458           response.body.should redirect_to '/users/sign_in'
459         end
460       end
461     end
462     context 'ユーザだが作家登録していないとき' do
463       before do
464         @author.destroy
465       end
466       context 'html形式' do
467         it 'ステータスコード302 Foundを返す' do
468           post :create, :sheet_panel => @attr
469           response.status.should eq 302
470         end
471         it '作家登録ページへ遷移する' do
472           post :create, :sheet_panel => @attr
473           response.body.should redirect_to new_author_path
474         end
475       end
476     end
477     context '検証、保存に失敗した' do
478       before do
479         SheetPanel.any_instance.stub(:store).and_return(false)
480       end
481       it "未保存の紙コマを保持している" do
482         post :create, :sheet_panel => @attr
483         assigns(:sheet_panel).should be_a_new(SheetPanel)
484       end
485       context 'html形式' do
486         it 'ステータスコード200 OKを返す' do
487           post :create, :sheet_panel => @attr
488           response.status.should eq 200
489         end
490         it '新規ページを描画する' do
491           post :create, :sheet_panel => @attr
492           response.should render_template("new")
493         end
494       end
495       context 'json形式' do
496         it 'ステータスコード422 unprocessable_entity を返す' do
497           post :create, :sheet_panel => @attr, :format => :json
498           response.status.should eq 422
499         end
500         it '応答メッセージUnprocessable Entityを返す' do
501           post :create, :sheet_panel => @attr, :format => :json
502           response.message.should match(/Unprocessable/)
503         end
504       end
505     end
506   end
507
508   describe '編集フォーム表示に於いて' do
509     before do
510       @sheet_panel = FactoryGirl.create :sheet_panel, :sheet_id => @sheet.id, :panel_id => @panel.id, :author_id => @author.id
511       sign_in @user
512       SheetPanel.stub(:show).and_return(@sheet_panel)
513     end
514     context 'つつがなく終わるとき' do
515       it '紙コマモデルに編集取得を問い合わせている' do
516         SheetPanel.should_receive(:edit).exactly(1)
517         get :edit, :id => @sheet_panel.id
518       end
519       it '@sheet_panelにデータを用意している' do
520         get :edit, :id => @sheet_panel.id
521         assigns(:sheet_panel).should eq @sheet_panel
522       end
523       context 'html形式' do
524         it 'ステータスコード200 OKを返す' do
525           get :edit, :id => @sheet_panel.id
526           response.should be_success 
527         end
528         it 'editテンプレートを描画する' do
529           get :edit, :id => @sheet_panel.id
530           response.should render_template("edit")
531         end
532       end
533       context 'js形式' do
534         it 'ステータスコード200 OKを返す' do
535           get :edit, :id => @sheet_panel.id, :format => :js
536           response.should be_success 
537         end
538         it 'edit.jsテンプレートを描画する' do
539           get :edit, :id => @sheet_panel.id, :format => :js
540           response.should render_template("edit")
541         end
542       end
543     end
544     context 'ユーザ権限がないとき' do
545       before do
546         sign_out @user
547       end
548       context 'html形式' do
549         it 'ステータスコード302 Foundを返す' do
550           get :edit, :id => @sheet_panel.id
551           response.status.should eq 302
552         end
553         it 'サインインページへ遷移する' do
554           get :edit, :id => @sheet_panel.id
555           response.body.should redirect_to '/users/sign_in'
556         end
557       end
558       context 'js形式' do
559         it 'ステータスコード401 Unauthorizedを返す' do
560           get :edit, :id => @sheet_panel.id, :format => :js
561           response.status.should eq 401
562         end
563         it '応答メッセージにUnauthorizedを返す' do
564           get :edit, :id => @sheet_panel.id, :format => :js
565           response.message.should match(/Unauthorized/)
566         end
567       end
568     end
569     context 'ユーザ権限はないが管理者権限があるとき' do
570       before do
571         sign_out @user
572         sign_in @admin
573       end
574       context 'html形式' do
575         it 'ステータスコード302 Foundを返す' do
576           get :edit, :id => @sheet_panel.id
577           response.status.should eq 302
578         end
579         it 'サインインページへ遷移する' do
580           get :edit, :id => @sheet_panel.id
581           response.body.should redirect_to '/users/sign_in'
582         end
583       end
584     end
585     context 'ユーザだが作家登録していないとき' do
586       before do
587         @author.destroy
588       end
589       context 'html形式' do
590         it 'ステータスコード302 Foundを返す' do
591           get :edit, :id => @sheet_panel.id
592           response.status.should eq 302
593         end
594         it '作家登録ページへ遷移する' do
595           get :edit, :id => @sheet_panel.id
596           response.body.should redirect_to new_author_path
597         end
598       end
599     end
600   end
601
602   describe '更新に於いて' do
603     before do
604       @sheet_panel = FactoryGirl.create :sheet_panel, :sheet_id => @sheet.id, :panel_id => @panel.id, :author_id => @user.author.id
605       @attr = FactoryGirl.attributes_for(:sheet_panel, :x => 5566, :author_id => @author.id)
606       sign_in @user
607     end
608     context 'つつがなく終わるとき' do
609       it 'モデルに編集取得依頼する' do
610         SheetPanel.stub(:edit).with(any_args).and_return(@sheet_panel)
611         SheetPanel.should_receive(:edit).exactly(1)
612         put :update, :id => @sheet_panel.id, :sheet_panel => @attr
613       end
614       it 'POSTデータから、カラム値を復元している' do
615         SheetPanel.any_instance.stub(:store).and_return(true)
616         SheetPanel.any_instance.should_receive(:attributes=).exactly(1)
617         put :update, :id => @sheet_panel.id, :sheet_panel => @attr
618       end
619       it '上書き補充を依頼する' do
620         SheetPanel.any_instance.should_receive(:overwrite).exactly(1)
621         put :update, :id => @sheet_panel.id, :sheet_panel => @attr
622       end
623       it 'モデルに保存依頼する' do
624         SheetPanel.any_instance.should_receive(:store).exactly(1)
625         put :update, :id => @sheet_panel.id, :sheet_panel => @attr
626       end
627       it "@sheet_panelに更新された紙コマを保持していて、それがDBにある" do
628         put :update, :id => @sheet_panel.id, :sheet_panel => @attr
629         assigns(:sheet_panel).should be_a(SheetPanel)
630         assigns(:sheet_panel).should be_persisted
631         assigns(:sheet_panel).x.should eq 5566
632       end
633       context 'html形式' do
634         it 'ステータスコード302 Foundを返す' do
635           SheetPanel.any_instance.stub(:store).and_return(true)
636           put :update, :id => @sheet_panel.id, :sheet_panel => @attr
637           response.status.should eq 302
638         end
639         it '紙コマ表示へ遷移する' do
640 #          SheetPanel.any_instance.stub(:store).and_return(true)
641           put :update, :id => @sheet_panel.id, :sheet_panel => @attr
642           response.should redirect_to(play_sheet_path(@attr[:sheet_id]))
643         end
644       end
645       context 'json形式' do
646         it 'ステータスコード200 OKを返す' do
647 #          SheetPanel.any_instance.stub(:store).and_return(true)
648           put :update, :id => @sheet_panel.id, :sheet_panel => @attr, :format => :json
649           response.should be_success 
650         end
651       end
652     end
653     context 'ユーザ権限がないとき' do
654       before do
655         sign_out @user
656       end
657       context 'html形式' do
658         it 'ステータスコード302 Foundを返す' do
659           put :update, :id => @sheet_panel.id, :sheet_panel => @attr
660           response.status.should eq 302
661         end
662         it 'サインインページへ遷移する' do
663           put :update, :id => @sheet_panel.id, :sheet_panel => @attr
664           response.body.should redirect_to '/users/sign_in'
665         end
666       end
667       context 'json形式' do
668         it 'ステータスコード401 Unauthorizedを返す' do
669           put :update, :id => @sheet_panel.id, :sheet_panel => @attr, :format => :json
670           response.status.should eq 401
671         end
672         it '応答メッセージにUnauthorizedを返す' do
673           put :update, :id => @sheet_panel.id, :sheet_panel => @attr, :format => :json
674           response.message.should match(/Unauthorized/)
675         end
676       end
677     end
678     context 'ユーザ権限はないが管理者権限があるとき' do
679       before do
680         sign_out @user
681         sign_in @admin
682       end
683       context 'html形式' do
684         it 'ステータスコード302 Foundを返す' do
685           put :update, :id => @sheet_panel.id, :sheet_panel => @attr
686           response.status.should eq 302
687         end
688         it 'サインインページへ遷移する' do
689           put :update, :id => @sheet_panel.id, :sheet_panel => @attr
690           response.body.should redirect_to '/users/sign_in'
691         end
692       end
693     end
694     context 'ユーザだが作家登録していないとき' do
695       before do
696         @author.destroy
697       end
698       context 'html形式' do
699         it 'ステータスコード302 Foundを返す' do
700           put :update, :id => @sheet_panel.id, :sheet_panel => @attr
701           response.status.should eq 302
702         end
703         it '作家登録ページへ遷移する' do
704           put :update, :id => @sheet_panel.id, :sheet_panel => @attr
705           response.body.should redirect_to new_author_path
706         end
707       end
708     end
709     context '検証、保存に失敗した' do
710       before do
711         SheetPanel.any_instance.stub(:store).and_return(false)
712       end
713       it "指定の紙コマを保持している" do
714         put :update, :id => @sheet_panel.id, :sheet_panel => @attr
715         assigns(:sheet_panel).should eq @sheet_panel
716       end
717       context 'html形式' do
718         it 'ステータスコード200 OKを返す' do
719           put :update, :id => @sheet_panel.id, :sheet_panel => @attr
720           response.status.should eq 200
721         end
722         it '編集ページを描画する' do
723           put :update, :id => @sheet_panel.id, :sheet_panel => @attr
724           response.should render_template("edit")
725         end
726       end
727       context 'json形式' do
728         it 'ステータスコード422 unprocessable_entity を返す' do
729           put :update, :id => @sheet_panel.id, :sheet_panel => @attr, :format => :json
730           response.status.should eq 422
731         end
732         it '応答メッセージUnprocessable Entityを返す' do
733           put :update, :id => @sheet_panel.id, :sheet_panel => @attr, :format => :json
734           response.message.should match(/Unprocessable/)
735         end
736       end
737     end
738   end
739
740   describe '削除に於いて' do
741     before do
742       @sheet_panel = FactoryGirl.create :sheet_panel, :author_id => @author.id
743       sign_in @user
744       SheetPanel.stub(:edit).and_return(@sheet_panel)
745     end
746     context '事前チェックしておく' do
747       before do
748         SheetPanel.stub(:edit).with(any_args()).and_return @sheet_panel
749         SheetPanel.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(true)
750       end
751       it '紙コマモデルに編集取得を問い合わせている' do
752         SheetPanel.should_receive(:edit).exactly(1)
753         delete :destroy, :id => @sheet_panel.id
754       end
755       it 'モデルに削除を依頼する' do
756         SheetPanel.any_instance.should_receive(:destroy_and_shorten).exactly(1)
757         delete :destroy, :id => @sheet_panel.id
758       end
759       it '@sheet_panelにアレを取得している' do
760         delete :destroy, :id => @sheet_panel.id
761         assigns(:sheet_panel).id.should eq(@sheet_panel.id)
762       end
763     end
764     context 'つつがなく終わるとき' do
765       before do
766         SheetPanel.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(true)
767       end
768       context 'html形式' do
769         it 'ステータスコード302 Foundを返す' do
770           delete :destroy, :id => @sheet_panel.id
771           response.status.should eq 302
772         end
773         it '閲覧ページへ遷移する' do
774           delete :destroy, :id => @sheet_panel.id
775           response.should redirect_to(play_sheet_path(@sheet_panel.sheet_id))
776         end
777       end
778       context 'json形式' do
779         it 'ステータスコード200 OKを返す' do
780           delete :destroy, :id => @sheet_panel.id, :format => :json
781           response.should be_success
782         end
783       end
784     end
785     context 'ユーザ権限がないとき' do
786       before do
787         sign_out @user
788       end
789       context 'html形式' do
790         it 'ステータスコード302 Foundを返す' do
791           delete :destroy, :id => @sheet_panel.id
792           response.status.should eq 302
793         end
794         it 'サインインページへ遷移する' do
795           delete :destroy, :id => @sheet_panel.id
796           response.body.should redirect_to '/users/sign_in'
797         end
798       end
799       context 'json形式' do
800         it 'ステータスコード401 Unauthorizedを返す' do
801           delete :destroy, :id => @sheet_panel.id, :format => :json
802           response.status.should eq 401
803         end
804         it '応答メッセージにUnauthorizedを返す' do
805           delete :destroy, :id => @sheet_panel.id, :format => :json
806           response.message.should match(/Unauthorized/)
807         end
808       end
809     end
810     context 'ユーザ権限はないが管理者権限があるとき' do
811       before do
812         sign_out @user
813         sign_in @admin
814       end
815       context 'html形式' do
816         it 'ステータスコード302 Foundを返す' do
817           delete :destroy, :id => @sheet_panel.id
818           response.status.should eq 302
819         end
820         it 'サインインページへ遷移する' do
821           delete :destroy, :id => @sheet_panel.id
822           response.body.should redirect_to '/users/sign_in'
823         end
824       end
825     end
826     context 'ユーザだが作家登録していないとき' do
827       before do
828         @author.destroy
829       end
830       context 'html形式' do
831         it 'ステータスコード302 Foundを返す' do
832           delete :destroy, :id => @sheet_panel.id
833           response.status.should eq 302
834         end
835         it '作家登録ページへ遷移する' do
836           delete :destroy, :id => @sheet_panel.id
837           response.body.should redirect_to new_author_path
838         end
839       end
840     end
841     context '削除に失敗したとき' do
842       before do
843         SheetPanel.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(false)
844       end
845       context 'html形式' do
846         it 'ステータスコード302 Foundを返す' do
847           delete :destroy, :id => @sheet_panel.id
848           response.status.should eq 302
849         end
850         it 'その用紙の詳細ページへ遷移する' do
851           delete :destroy, :id => @sheet_panel.id
852           response.should redirect_to(sheet_panel_path(@sheet_panel))
853         end
854       end
855       context 'json形式' do
856         it 'ステータスコード422 unprocessable_entity を返す' do
857           delete :destroy, :id => @sheet_panel.id, :format => :json
858           response.status.should eq 422
859         end
860         it '応答メッセージUnprocessable Entityを返す' do
861           delete :destroy, :id => @sheet_panel.id, :format => :json
862           response.message.should match(/Unprocessable/)
863         end
864       end
865     end
866 =begin
867     context '対象紙コマがないとき' do
868     end
869     context '他人の紙コマだったとき' do
870     end
871 =end
872   end
873   
874 else
875   describe '一覧表示に於いて' do
876     before do
877       sign_in @user
878       @sheet_panel = FactoryGirl.create :sheet_panel, :t => 0, :sheet_id => @sheet.id, :panel_id => @panel.id, :author_id => @author.id
879       SheetPanel.stub(:list).and_return([@sheet_panel, @sheet_panel, @sheet_panel])
880     end
881     context 'つつがなく終わるとき' do
882       it 'ステータスコード200 OKを返す' do
883         get :index
884         response.should be_success 
885       end
886       context 'html形式' do
887         it 'indexテンプレートを描画する' do
888           get :index
889           response.should render_template("index")
890         end
891       end
892       context 'json形式' do
893         it 'jsonデータを返す' do
894           get :index, :format => :json
895           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
896         end
897       end
898     end
899     context 'ユーザ権限がないとき' do
900       before do
901         sign_out @user
902       end
903       it 'ステータスコード200 OKを返す' do
904         get :index
905         response.should be_success 
906       end
907       context 'html形式' do
908         it 'indexテンプレートを描画する' do
909           get :index
910           response.should render_template("index")
911         end
912       end
913       context 'json形式' do
914         it 'jsonデータを返す' do
915           get :index, :format => :json
916           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
917         end
918       end
919     end
920   end
921   
922   describe '単体表示に於いて' do
923     before do
924       sign_in @user
925       @sheet_panel = FactoryGirl.create :sheet_panel, :t => 0, :sheet_id => @sheet.id, :panel_id => @panel.id, :author_id => @author.id
926       Sheet.stub(:show).with(@sheet.id.to_s, [nil, nil]).and_return(@sheet)
927       Sheet.stub(:show).with(@sheet.id.to_s, [@user, nil]).and_return(@sheet)
928       Sheet.stub(:show).with(@sheet.id.to_s, [nil, @admin]).and_return(@sheet)
929       SheetPanel.stub(:show).with(@sheet_panel.id.to_s, [nil, nil]).and_return(@sheet_panel)
930       SheetPanel.stub(:show).with(@sheet_panel.id.to_s, [@user, nil]).and_return(@sheet_panel)
931       SheetPanel.stub(:show).with(@sheet_panel.id.to_s, [nil, @admin]).and_return(@sheet_panel)
932     end
933     context 'つつがなく終わるとき' do
934       context 'html形式' do
935         it 'ステータスコード200 OKを返す' do
936           get :show, :id => @sheet_panel.id
937           response.should be_success
938         end
939         it 'showテンプレートを描画する' do
940           get :show, :id => @sheet_panel.id
941           response.should render_template("show")
942         end
943       end
944       context 'json形式' do
945         it 'ステータスコード200 OKを返す' do
946           get :show, :id => @sheet_panel.id, :format => :json
947           response.should be_success
948         end
949         it 'jsonデータを返す' do
950           get :show, :id => @sheet_panel.id, :format => :json
951           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
952         end
953       end
954     end
955     context 'ユーザ権限がないとき' do
956       before do
957         sign_out @user
958       end
959       context 'html形式' do
960         it 'ステータスコード200 OKを返す' do
961           get :show, :id => @sheet_panel.id
962           response.should be_success
963         end
964         it 'showテンプレートを描画する' do
965           get :show, :id => @sheet_panel.id
966           response.should render_template("show")
967         end
968       end
969       context 'json形式' do
970         it 'ステータスコード200 OKを返す' do
971           get :show, :id => @sheet_panel.id, :format => :json
972           response.should be_success
973         end
974         it 'jsonデータを返す' do
975           get :show, :id => @sheet_panel.id, :format => :json
976           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
977         end
978       end
979     end
980   end
981   
982   describe '閲覧に於いて' do
983     before do
984       @sheet_panel = FactoryGirl.create :sheet_panel, :t => 0, :sheet_id => @sheet.id, :panel_id => @panel.id, :author_id => @author.id
985       Sheet.stub(:show).with(@sheet.id.to_s, [nil, nil]).and_return(@sheet)
986       Sheet.stub(:show).with(@sheet.id.to_s, [@user, nil]).and_return(@sheet)
987       Sheet.stub(:show).with(@sheet.id.to_s, [nil, @admin]).and_return(@sheet)
988       SheetPanel.stub(:count).and_return(10)
989       SheetPanel.stub(:play_list).with(any_args).and_return([@sheet_panel, @sheet_panel, @sheet_panel])
990       sign_in @user
991     end
992     context 'つつがなく終わるとき' do
993       context 'html形式' do
994         it 'ステータスコード200 OKを返す' do
995           get :sheet, :id => @sheet.id
996           response.should be_success 
997         end
998         it 'sheetテンプレートを描画する' do
999           get :sheet, :id => @sheet.id
1000           response.should render_template("sheet")
1001         end
1002       end
1003       context 'json形式' do
1004         it 'ステータスコード200 OKを返す' do
1005           get :sheet, :id => @sheet.id, :format => :json
1006           response.should be_success 
1007         end
1008         it 'jsonデータを返す' do
1009           get :sheet, :id => @sheet.id, :format => :json
1010           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1011         end
1012       end
1013     end
1014     context 'ユーザ権限がないとき' do
1015       before do
1016         sign_out @user
1017       end
1018       context 'html形式' do
1019         it 'ステータスコード200 OKを返す' do
1020           get :sheet, :id => @sheet.id
1021           response.should be_success 
1022         end
1023         it 'sheetテンプレートを描画する' do
1024           get :sheet, :id => @sheet.id
1025           response.should render_template("sheet")
1026         end
1027       end
1028       context 'json形式' do
1029         it 'ステータスコード200 OKを返す' do
1030           get :sheet, :id => @sheet.id, :format => :json
1031           response.should be_success 
1032         end
1033         it 'jsonデータを返す' do
1034           get :sheet, :id => @sheet.id, :format => :json
1035           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1036         end
1037       end
1038     end
1039   end
1040
1041   describe '新規作成フォーム表示に於いて' do
1042     before do
1043       sign_in @user
1044     end
1045     context 'つつがなく終わるとき' do
1046       context 'html形式' do
1047         it 'ステータスコード200 OKを返す' do
1048           get :new
1049           response.should be_success 
1050         end
1051         it 'newテンプレートを描画する' do
1052           get :new
1053           response.should render_template("new")
1054         end
1055       end
1056       context 'js形式' do
1057         it 'ステータスコード200 OKを返す' do
1058           get :new, :format => :js
1059           response.should be_success 
1060         end
1061         it 'new.jsテンプレートを描画する' do
1062           get :new, :format => :js
1063           response.should render_template("new")
1064         end
1065       end
1066       context 'json形式' do
1067         it 'ステータスコード200 OKを返す' do
1068           get :new, :format => :json
1069           response.should be_success 
1070         end
1071         it 'jsonデータを返す' do
1072           get :new, :format => :json
1073           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1074         end
1075       end
1076     end
1077     context 'ユーザ権限がないとき' do
1078       before do
1079         sign_out @user
1080       end
1081       context 'html形式' do
1082         it 'ステータスコード302 Foundを返す' do
1083           get :new
1084           response.status.should eq 302
1085         end
1086         it 'サインインページへ遷移する' do
1087           get :new
1088           response.body.should redirect_to '/users/sign_in'
1089         end
1090       end
1091       context 'json形式' do
1092         it 'ステータスコード401 Unauthorizedを返す' do
1093           get :new, :format => :json
1094           response.status.should eq 401
1095         end
1096         it '応答メッセージにUnauthorizedを返す' do
1097           get :new, :format => :json
1098           response.message.should match(/Unauthorized/)
1099         end
1100       end
1101     end
1102   end
1103   
1104   describe '新規作成に於いて' do
1105     before do
1106       @attr = FactoryGirl.attributes_for(:sheet_panel, :t => nil, :sheet_id => @sheet.id, :panel_id => @panel.id, :author_id => @author.id)
1107       sign_in @user
1108     end
1109     context 'つつがなく終わるとき' do
1110       context 'html形式' do
1111         it 'ステータスコード302 Foundを返す' do
1112           SheetPanel.any_instance.stub(:store).and_return(true)
1113           post :create, :sheet_panel => @attr
1114           response.status.should eq 302
1115         end
1116         it '用紙の紙コマ表示へ遷移する' do
1117 #          SheetPanel.any_instance.stub(:store).and_return(true)
1118           post :create, :sheet_panel => @attr
1119           response.should redirect_to(:action => :sheet, :id => @attr[:sheet_id])
1120         end
1121       end
1122       context 'json形式' do
1123         it 'ステータスコード200 OKを返す' do
1124 #          SheetPanel.any_instance.stub(:store).and_return(true)
1125           post :create, :sheet_panel => @attr, :format => :json
1126           response.should be_success 
1127         end
1128         it '作成されたコマをjsonデータで返す' do
1129           post :create, :sheet_panel => @attr, :format => :json
1130           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1131         end
1132       end
1133     end
1134     context 'ユーザ権限がないとき' do
1135       before do
1136         sign_out @user
1137       end
1138       context 'html形式' do
1139         it 'ステータスコード302 Foundを返す' do
1140           post :create, :sheet_panel => @attr
1141           response.status.should eq 302
1142         end
1143         it 'サインインページへ遷移する' do
1144           post :create, :sheet_panel => @attr
1145           response.body.should redirect_to '/users/sign_in'
1146         end
1147       end
1148       context 'json形式' do
1149         it 'ステータスコード401 Unauthorizedを返す' do
1150           post :create, :sheet_panel => @attr, :format => :json
1151           response.status.should eq 401
1152         end
1153         it '応答メッセージにUnauthorizedを返す' do
1154           post :create, :sheet_panel => @attr, :format => :json
1155           response.message.should match(/Unauthorized/)
1156         end
1157       end
1158     end
1159   end
1160
1161   describe '編集フォーム表示に於いて' do
1162     before do
1163       @sheet_panel = FactoryGirl.create :sheet_panel, :author_id => @author.id
1164       sign_in @user
1165       SheetPanel.stub(:show).and_return(@sheet_panel)
1166     end
1167     context 'つつがなく終わるとき' do
1168       context 'html形式' do
1169         it 'ステータスコード200 OKを返す' do
1170           get :edit, :id => @sheet_panel.id
1171           response.should be_success 
1172         end
1173         it 'editテンプレートを描画する' do
1174           get :edit, :id => @sheet_panel.id
1175           response.should render_template("edit")
1176         end
1177       end
1178       context 'js形式' do
1179         it 'ステータスコード200 OKを返す' do
1180           get :edit, :id => @sheet_panel.id, :format => :js
1181           response.should be_success 
1182         end
1183         it 'edit.jsテンプレートを描画する' do
1184           get :edit, :id => @sheet_panel.id, :format => :js
1185           response.should render_template("edit")
1186         end
1187       end
1188     end
1189     context 'ユーザ権限がないとき' do
1190       before do
1191         sign_out @user
1192       end
1193       context 'html形式' do
1194         it 'ステータスコード302 Foundを返す' do
1195           get :edit, :id => @sheet_panel.id
1196           response.status.should eq 302
1197         end
1198         it 'サインインページへ遷移する' do
1199           get :edit, :id => @sheet_panel.id
1200           response.body.should redirect_to '/users/sign_in'
1201         end
1202       end
1203       context 'js形式' do
1204         it 'ステータスコード401 Unauthorizedを返す' do
1205           get :edit, :id => @sheet_panel.id, :format => :js
1206           response.status.should eq 401
1207         end
1208         it '応答メッセージにUnauthorizedを返す' do
1209           get :edit, :id => @sheet_panel.id, :format => :js
1210           response.message.should match(/Unauthorized/)
1211         end
1212       end
1213     end
1214   end
1215
1216   describe '更新に於いて' do
1217     before do
1218       @sheet_panel = FactoryGirl.create :sheet_panel, :author_id => @user.author.id
1219       @attr = FactoryGirl.attributes_for(:sheet_panel, :author_id => @author.id)
1220       sign_in @user
1221     end
1222     context 'つつがなく終わるとき' do
1223       context 'html形式' do
1224         it 'ステータスコード302 Foundを返す' do
1225           SheetPanel.any_instance.stub(:store).and_return(true)
1226           put :update, :id => @sheet_panel.id, :sheet_panel => @attr
1227           response.status.should eq 302
1228         end
1229         it '紙コマ表示へ遷移する' do
1230 #          SheetPanel.any_instance.stub(:store).and_return(true)
1231           put :update, :id => @sheet_panel.id, :sheet_panel => @attr
1232           response.should redirect_to(:action => :sheet, :id => @attr[:sheet_id])
1233         end
1234       end
1235       context 'json形式' do
1236         it 'ステータスコード200 OKを返す' do
1237 #          SheetPanel.any_instance.stub(:store).and_return(true)
1238           put :update, :id => @sheet_panel.id, :sheet_panel => @attr, :format => :json
1239           response.should be_success 
1240         end
1241       end
1242     end
1243     context 'ユーザ権限がないとき' do
1244       before do
1245         sign_out @user
1246       end
1247       context 'html形式' do
1248         it 'ステータスコード302 Foundを返す' do
1249           put :update, :id => @sheet_panel.id, :sheet_panel => @attr
1250           response.status.should eq 302
1251         end
1252         it 'サインインページへ遷移する' do
1253           put :update, :id => @sheet_panel.id, :sheet_panel => @attr
1254           response.body.should redirect_to '/users/sign_in'
1255         end
1256       end
1257       context 'json形式' do
1258         it 'ステータスコード401 Unauthorizedを返す' do
1259           put :update, :id => @sheet_panel.id, :sheet_panel => @attr, :format => :json
1260           response.status.should eq 401
1261         end
1262         it '応答メッセージにUnauthorizedを返す' do
1263           put :update, :id => @sheet_panel.id, :sheet_panel => @attr, :format => :json
1264           response.message.should match(/Unauthorized/)
1265         end
1266       end
1267     end
1268   end
1269
1270   describe '削除に於いて' do
1271     before do
1272       @sheet_panel = FactoryGirl.create :sheet_panel, :author_id => @author.id
1273       sign_in @user
1274       SheetPanel.stub(:edit).and_return(@sheet_panel)
1275     end
1276     context 'つつがなく終わるとき' do
1277       before do
1278         SheetPanel.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(true)
1279       end
1280       context 'html形式' do
1281         it 'ステータスコード302 Foundを返す' do
1282           delete :destroy, :id => @sheet_panel.id
1283           response.status.should eq 302
1284         end
1285         it '閲覧ページへ遷移する' do
1286           delete :destroy, :id => @sheet_panel.id
1287           response.should redirect_to(:controller => 'sheet_panels', :action => :sheet, :id => @sheet_panel.sheet_id)
1288         end
1289       end
1290       context 'json形式' do
1291         it 'ステータスコード200 OKを返す' do
1292           delete :destroy, :id => @sheet_panel.id, :format => :json
1293           response.should be_success
1294         end
1295       end
1296     end
1297     context 'ユーザ権限がないとき' do
1298       before do
1299         sign_out @user
1300       end
1301       context 'html形式' do
1302         it 'ステータスコード302 Foundを返す' do
1303           delete :destroy, :id => @sheet_panel.id
1304           response.status.should eq 302
1305         end
1306         it 'サインインページへ遷移する' do
1307           delete :destroy, :id => @sheet_panel.id
1308           response.body.should redirect_to '/users/sign_in'
1309         end
1310       end
1311       context 'json形式' do
1312         it 'ステータスコード401 Unauthorizedを返す' do
1313           delete :destroy, :id => @sheet_panel.id, :format => :json
1314           response.status.should eq 401
1315         end
1316         it '応答メッセージにUnauthorizedを返す' do
1317           delete :destroy, :id => @sheet_panel.id, :format => :json
1318           response.message.should match(/Unauthorized/)
1319         end
1320       end
1321     end
1322   end
1323   
1324 end
1325 end