OSDN Git Service

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