OSDN Git Service

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