OSDN Git Service

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