OSDN Git Service

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