OSDN Git Service

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