OSDN Git Service

t#31470:create pager
[pettanr/pettanr.git] / spec / models / ground_picture_spec.rb
1 # -*- encoding: utf-8 -*-
2 require 'spec_helper'
3 #絵地
4
5 describe GroundPicture do
6   before do
7     @admin = FactoryGirl.create :admin
8     @user = FactoryGirl.create( :user_yas)
9     @author = FactoryGirl.create :author, :user_id => @user.id
10     @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
11     @other_user = FactoryGirl.create( :user_yas)
12     @other_author = FactoryGirl.create :author, :user_id => @other_user.id
13     @other_artist = FactoryGirl.create :artist_yas, :author_id => @other_author.id
14     @sp = FactoryGirl.create :system_picture
15     @lg = FactoryGirl.create :license_group
16     @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
17     @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
18     @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
19     @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
20     @panel = FactoryGirl.create :panel, :author_id => @author.id
21   end
22   
23   describe '検証に於いて' do
24     before do
25       @gp = FactoryGirl.build :ground_picture, :panel_id => @panel.id, :picture_id => @p.id
26     end
27     
28     context 'オーソドックスなデータのとき' do
29       it '下限データが通る' do
30         @gp.repeat = 0
31         @gp.x = -99999
32         @gp.y = -99999
33         @gp.z = 1
34         @gp.should be_valid
35       end
36       it '上限データが通る' do
37         @gp.repeat = 3
38         @gp.x = 99999
39         @gp.y = 99999
40         @gp.z = 99999
41         @gp.should be_valid
42       end
43     end
44     
45     context 'panel_idを検証するとき' do
46       #ネストの保存はnilを許可しなければならないので数値チェックだけ
47       it '数値でなければ失敗する' do
48         @gp.panel_id = 'a'
49         @gp.should_not be_valid
50       end
51     end
52     context 'picture_idを検証するとき' do
53       it 'nullなら失敗する' do
54         @gp.picture_id = nil
55         @gp.should_not be_valid
56       end
57       it '数値でなければ失敗する' do
58         @gp.picture_id = 'a'
59         @gp.should_not be_valid
60       end
61       it '存在する実素材でなければ失敗する' do
62         @gp.picture_id = 0
63         @gp.should_not be_valid
64       end
65     end
66     context 'repeatを検証するとき' do
67       it 'nullなら失敗する' do
68         @gp.repeat = nil
69         @gp.should_not be_valid
70       end
71       it '数値でなければ失敗する' do
72         @gp.repeat = 'a'
73         @gp.should_not be_valid
74       end
75       it '-1なら失敗する' do
76         @gp.repeat = -1
77         @gp.should_not be_valid
78       end
79       it '4なら失敗する' do
80         @gp.repeat = 4
81         @gp.should_not be_valid
82       end
83     end
84     context 'xを検証するとき' do
85       it 'nullなら失敗する' do
86         @gp.x = nil
87         @gp.should_not be_valid
88       end
89       it '数値でなければ失敗する' do
90         @gp.x = 'a'
91         @gp.should_not be_valid
92       end
93     end
94     context 'yを検証するとき' do
95       it 'nullなら失敗する' do
96         @gp.y = nil
97         @gp.should_not be_valid
98       end
99       it '数値でなければ失敗する' do
100         @gp.y = 'a'
101         @gp.should_not be_valid
102       end
103     end
104     context 'zを検証するとき' do
105       it 'nullなら失敗する' do
106         @gp.z = nil
107         @gp.should_not be_valid
108       end
109       it '数値でなければ失敗する' do
110         @gp.z = 'a'
111         @gp.should_not be_valid
112       end
113       it '負なら失敗する' do
114         @gp.z = -1
115         @gp.should_not be_valid
116       end
117       it '負なら失敗する' do
118         @gp.z = 0
119         @gp.should_not be_valid
120       end
121     end
122   end
123   
124   describe 'デフォルト値補充に於いて' do
125     before do
126       @gp = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :picture_id => @p.id
127     end
128     it 'xに0を補充している' do
129       @gp.supply_default
130       @gp.x.should eq 0
131     end
132     it 'yに0を補充している' do
133       @gp.supply_default
134       @gp.y.should eq 0
135     end
136     it '繰り返しに0を補充している' do
137       @gp.supply_default
138       @gp.repeat.should eq 0
139     end
140   end
141   
142   describe '上書き補充に於いて' do
143     it 'defined' do
144       @gp = FactoryGirl.build :ground_picture, :panel_id => @panel.id, :picture_id => @p.id
145       @gp.overwrite
146     end
147   end
148   
149   describe '閲覧許可に於いて' do
150     before do
151       @gp = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :picture_id => @p.id
152     end
153     context 'オープンモードのとき' do
154       before do
155         MagicNumber['run_mode'] = 0
156       end
157       it '自身にゲスト用ロールチェックを問い合わせしている' do
158         GroundPicture.any_instance.stub(:guest_role_check).and_return(true)
159         GroundPicture.any_instance.should_receive(:guest_role_check).with(any_args).exactly(1)
160         r = @gp.visible?([@author])
161       end
162       it 'ゲスト用ロールチェックが失敗したとき、falseを返す' do
163         GroundPicture.any_instance.stub(:guest_role_check).and_return(false)
164         r = @gp.visible?([@author])
165         r.should be_false
166       end
167     end
168     context 'クローズドモードのとき' do
169       before do
170         MagicNumber['run_mode'] = 1
171       end
172       it '自身に読者用ロールチェックを問い合わせしている' do
173         GroundPicture.any_instance.stub(:reader_role_check).and_return(true)
174         GroundPicture.any_instance.should_receive(:reader_role_check).with(any_args).exactly(1)
175         r = @gp.visible?([@author])
176       end
177       it '読者用ロールチェックが失敗したとき、falseを返す' do
178         GroundPicture.any_instance.stub(:reader_role_check).and_return(false)
179         r = @gp.visible?([@author])
180         r.should be_false
181       end
182     end
183     context '事前チェックする' do
184       before do
185         MagicNumber['run_mode'] = 1
186         GroundPicture.any_instance.stub(:reader_role_check).and_return(true)
187       end
188       it '自身のコマに所持判定を問い合わせしている' do
189         Panel.any_instance.stub(:own?).and_return(true)
190         Panel.any_instance.should_receive(:own?).with(any_args).exactly(1)
191         r = @gp.visible?([@author])
192       end
193       it '自身のコマに閲覧許可を問い合わせしている' do
194         Panel.any_instance.stub(:own?).and_return(false)
195         Panel.any_instance.stub(:visible?).and_return(true)
196         Panel.any_instance.should_receive(:visible?).with(any_args).exactly(1)
197         r = @gp.visible?([@author])
198       end
199     end
200     context 'つつがなく終わるとき' do
201       before do
202         MagicNumber['run_mode'] = 1
203         Panel.any_instance.stub(:reader_role_check).and_return(true)
204       end
205       it '自分のコマの絵地なら許可する' do
206         Panel.any_instance.stub(:own?).and_return(true)
207         Panel.any_instance.stub(:visible?).and_return(false)
208         r = @gp.visible?([@author])
209         r.should be_true
210       end
211       it '他人の非公開コマの絵地なら許可しない' do
212         Panel.any_instance.stub(:own?).and_return(false)
213         Panel.any_instance.stub(:visible?).and_return(false)
214         r = @gp.visible?([@author])
215         r.should be_false
216       end
217       it '他人のコマの絵地でも公開なら許可する' do
218         Panel.any_instance.stub(:own?).and_return(false)
219         Panel.any_instance.stub(:visible?).and_return(true)
220         r = @gp.visible?([@author])
221         r.should be_true
222       end
223     end
224   end
225   
226   describe '一覧取得に於いて' do
227     before do
228       @gp = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :picture_id => @p.id
229     end
230     context 'page補正について' do
231       it '文字列から数値に変換される' do
232         GroundPicture.page('8').should eq 8
233       end
234       it 'nilの場合は1になる' do
235         GroundPicture.page().should eq 1
236       end
237       it '0以下の場合は1になる' do
238         GroundPicture.page('0').should eq 1
239       end
240     end
241     context 'page_size補正について' do
242       it '文字列から数値に変換される' do
243         GroundPicture.page_size('7').should eq 7
244       end
245       it 'nilの場合はGroundPicture.default_page_sizeになる' do
246         GroundPicture.page_size().should eq GroundPicture.default_page_size
247       end
248       it '0以下の場合はGroundPicture.default_page_sizeになる' do
249         GroundPicture.page_size('0').should eq GroundPicture.default_page_size
250       end
251       it 'GroundPicture.max_page_sizeを超えた場合はGroundPicture.max_page_sizeになる' do
252         GroundPicture.page_size('1000').should eq GroundPicture.max_page_size
253       end
254     end
255     context 'つつがなく終わるとき' do
256       it '一覧取得オプションを利用している' do
257         GroundPicture.stub(:list_opt).with(any_args).and_return({:include => :panel})
258         GroundPicture.should_receive(:list_opt).with(any_args).exactly(1)
259         r = GroundPicture.list
260       end
261     end
262     it 'リストを返す' do
263       pl = GroundPicture.list
264       pl.should eq [@gp]
265     end
266     it '時系列で並んでいる' do
267       #公開コマなら(他人のコマであっても)含んでいる
268       opl = FactoryGirl.create :panel, :author_id => @other_author.id, :publish => 1
269       npl = FactoryGirl.create :ground_picture, :panel_id => opl.id, :picture_id => @p.id, :updated_at => Time.now + 100
270       pl = GroundPicture.list
271       pl.should eq [npl, @gp]
272     end
273     it '非公開のコマの絵地は含まない' do
274       hpl = FactoryGirl.create :panel, :author_id => @author.id, :publish => 0
275       npl = FactoryGirl.create :ground_picture, :panel_id => hpl.id, :picture_id => @p.id, :updated_at => Time.now + 100
276       pl = GroundPicture.list
277       pl.should eq [@gp]
278     end
279     context 'DBに5件あって1ページの件数を2件に変えたとして' do
280       before do
281         @gp2 = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :z => 1, :picture_id => @p.id, :updated_at => Time.now + 100
282         @gp3 = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :z => 2, :picture_id => @p.id, :updated_at => Time.now + 200
283         @gp4 = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :z => 3, :picture_id => @p.id, :updated_at => Time.now + 300
284         @gp5 = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :z => 4, :picture_id => @p.id, :updated_at => Time.now + 400
285         GroundPicture.stub(:default_page_size).and_return(2)
286       end
287       it '通常は2件を返す' do
288         pl = GroundPicture.list
289         pl.should have(2).items 
290       end
291       it 'page=1なら末尾2件を返す' do
292         #時系列で並んでいる
293         pl = GroundPicture.list(1)
294         pl.should eq [@gp5, @gp4]
295       end
296       it 'page=2なら中間2件を返す' do
297         pl = GroundPicture.list(2)
298         pl.should eq [@gp3, @gp2]
299       end
300       it 'page=3なら先頭1件を返す' do
301         pl = GroundPicture.list(3)
302         pl.should eq [@gp]
303       end
304     end
305   end
306   
307   describe '自分のコマで使った絵地一覧取得に於いて' do
308     before do
309       @gp = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :picture_id => @p.id
310     end
311     context 'つつがなく終わるとき' do
312       it '一覧取得オプションを利用している' do
313         GroundPicture.stub(:list_opt).with(any_args).and_return({:include => :panel})
314         GroundPicture.should_receive(:list_opt).with(any_args).exactly(1)
315         r = GroundPicture.mylist @author
316       end
317     end
318     it 'リストを返す' do
319       pl = GroundPicture.mylist @author
320       pl.should eq [@gp]
321     end
322     it '時系列で並んでいる' do
323       npl = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :picture_id => @p.id, :z => 2, :updated_at => Time.now + 100
324       pl = GroundPicture.mylist @author
325       pl.should eq [npl, @gp]
326     end
327     it '他人のコマの絵地は公開でも含まない' do
328       hpl = FactoryGirl.create :panel, :author_id => @other_author.id, :publish => 1
329       npl = FactoryGirl.create :ground_picture, :panel_id => hpl.id, :picture_id => @p.id
330       pl = GroundPicture.mylist @author
331       pl.should eq [@gp]
332     end
333     it '自分のコマの絵地は非公開でも含んでいる' do
334       hpl = FactoryGirl.create :panel, :author_id => @author.id, :publish => 0
335       npl = FactoryGirl.create :ground_picture, :panel_id => hpl.id, :picture_id => @p.id, :z => 2, :updated_at => Time.now + 100
336       pl = GroundPicture.mylist @author
337       pl.should eq [npl, @gp]
338     end
339     context 'DBに5件あって1ページの件数を2件に変えたとして' do
340       before do
341         @gp2 = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :z => 1, :picture_id => @p.id, :updated_at => Time.now + 100
342         @gp3 = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :z => 2, :picture_id => @p.id, :updated_at => Time.now + 200
343         @gp4 = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :z => 3, :picture_id => @p.id, :updated_at => Time.now + 300
344         @gp5 = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :z => 4, :picture_id => @p.id, :updated_at => Time.now + 400
345       end
346       it '通常は2件を返す' do
347         c = GroundPicture.mylist @author, 1, 2
348         c.should have(2).items 
349       end
350       it 'page=1なら末尾2件を返す' do
351         #時系列で並んでいる
352         c = GroundPicture.mylist(@author, 1, 2)
353         c.should eq [@gp5, @gp4]
354       end
355       it 'page=2なら中間2件を返す' do
356         c = GroundPicture.mylist(@author, 2, 2)
357         c.should eq [@gp3, @gp2]
358       end
359       it 'page=3なら先頭1件を返す' do
360         c = GroundPicture.mylist(@author, 3, 2)
361         c.should eq [@gp]
362       end
363     end
364   end
365   
366   describe '他作家の絵地一覧取得に於いて' do
367     before do
368       @gp = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :picture_id => @p.id
369       @other_panel = FactoryGirl.create :panel, :author_id => @other_author.id, :publish => 1
370       @other_gp = FactoryGirl.create :ground_picture, :panel_id => @other_panel.id, :picture_id => @p.id
371     end
372     it 'リストを返す' do
373       r = GroundPicture.himlist @other_author
374       r.should eq [@other_gp]
375     end
376     it '時系列で並んでいる' do
377       new_panel = FactoryGirl.create :panel, :author_id => @other_author.id, :updated_at => Time.now + 100
378       new_gp = FactoryGirl.create :ground_picture, :panel_id => new_panel.id, :picture_id => @p.id, :updated_at => Time.now + 100
379       r = GroundPicture.himlist @other_author
380       r.should eq [new_gp, @other_gp]
381     end
382     it '公開コマに限る' do
383       hidden_panel = FactoryGirl.create :panel, :author_id => @other_author.id, :publish => 0
384       hidden_gp = FactoryGirl.create :ground_picture, :panel_id => hidden_panel.id, :picture_id => @p.id, :updated_at => Time.now + 100
385       r = GroundPicture.himlist @other_author
386       r.should eq [@other_gp]
387     end
388     context 'DBに5件あって1ページの件数を2件に変えたとして' do
389       before do
390         @other_gp2 = FactoryGirl.create :ground_picture, :panel_id => @other_panel.id, :picture_id => @p.id, :updated_at => Time.now + 100
391         @other_gp3 = FactoryGirl.create :ground_picture, :panel_id => @other_panel.id, :picture_id => @p.id, :updated_at => Time.now + 200
392         @other_gp4 = FactoryGirl.create :ground_picture, :panel_id => @other_panel.id, :picture_id => @p.id, :updated_at => Time.now + 300
393         @other_gp5 = FactoryGirl.create :ground_picture, :panel_id => @other_panel.id, :picture_id => @p.id, :updated_at => Time.now + 400
394       end
395       it '通常は2件を返す' do
396         pl = GroundPicture.himlist @other_author, 1, 2
397         pl.should have(2).items 
398       end
399       it 'page=1なら末尾2件を返す' do
400         #時系列で並んでいる
401         pl = GroundPicture.himlist @other_author, 1, 2
402         pl.should eq [@other_gp5, @other_gp4]
403       end
404       it 'page=2なら中間2件を返す' do
405         pl = GroundPicture.himlist @other_author, 2, 2
406         pl.should eq [@other_gp3, @other_gp2]
407       end
408       it 'page=3なら先頭1件を返す' do
409         pl = GroundPicture.himlist @other_author, 3, 2
410         pl.should eq [@other_gp]
411       end
412     end
413   end
414   
415   describe '絵地一覧ページ制御に於いて' do
416     before do
417       GroundPicture.stub(:count).with(any_args).and_return(100)
418     end
419     it 'ページ制御を返す' do
420       r = GroundPicture.list_paginate 
421       r.is_a?(Kaminari::PaginatableArray).should be_true
422     end
423     it '絵地一覧の取得条件を利用している' do
424       GroundPicture.stub(:list_where).with(any_args).and_return('')
425       GroundPicture.should_receive(:list_where).with(any_args).exactly(1)
426       r = GroundPicture.list_paginate 
427     end
428     it 'ページ件数10のとき、3ページ目のオフセットは20から始まる' do
429       r = GroundPicture.list_paginate 3, 10
430       r.limit_value.should eq 10
431       r.offset_value.should eq 20
432     end
433   end
434   
435   describe '自分の絵地一覧ページ制御に於いて' do
436     before do
437       GroundPicture.stub(:count).with(any_args).and_return(100)
438     end
439     it 'ページ制御を返す' do
440       r = GroundPicture.mylist_paginate @author
441       r.is_a?(Kaminari::PaginatableArray).should be_true
442     end
443     it '自分の絵地一覧の取得条件を利用している' do
444       GroundPicture.stub(:mylist_where).with(any_args).and_return('')
445       GroundPicture.should_receive(:mylist_where).with(any_args).exactly(1)
446       r = GroundPicture.mylist_paginate @author
447     end
448     it 'ページ件数10のとき、3ページ目のオフセットは20から始まる' do
449       r = GroundPicture.mylist_paginate @author, 3, 10
450       r.limit_value.should eq 10
451       r.offset_value.should eq 20
452     end
453   end
454   
455   describe '他作家の絵地一覧ページ制御に於いて' do
456     before do
457       GroundPicture.stub(:count).with(any_args).and_return(100)
458     end
459     it 'ページ制御を返す' do
460       r = GroundPicture.himlist_paginate @other_author
461       r.is_a?(Kaminari::PaginatableArray).should be_true
462     end
463     it '他作家の絵地一覧の取得条件を利用している' do
464       GroundPicture.stub(:himlist_where).with(any_args).and_return('')
465       GroundPicture.should_receive(:himlist_where).with(any_args).exactly(1)
466       r = GroundPicture.himlist_paginate @other_author
467     end
468     it 'ページ件数10のとき、3ページ目のオフセットは20から始まる' do
469       r = GroundPicture.himlist_paginate @other_author, 3, 10
470       r.limit_value.should eq 10
471       r.offset_value.should eq 20
472     end
473   end
474   
475   describe '一覧取得オプションに於いて' do
476     it '2つの項目を含んでいる' do
477       r = GroundPicture.list_opt
478       r.should have(2).items
479     end
480     it 'コマを含んでいる' do
481       r = GroundPicture.list_opt
482       r.has_key?(:panel).should be_true
483     end
484       it 'コマは作家を含んでいる' do
485         r = GroundPicture.list_opt
486         r[:panel].has_key?(:author).should be_true
487       end
488     it '実素材を含んでいる' do
489       r = GroundPicture.list_opt
490       r.has_key?(:picture).should be_true
491     end
492       it '実素材は絵師を含んでいる' do
493         r = GroundPicture.list_opt
494         r[:picture].has_key?(:artist).should be_true
495       end
496       it '実素材はライセンスを含んでいる' do
497         r = GroundPicture.list_opt
498         r[:picture].has_key?(:license).should be_true
499       end
500   end
501   describe 'json一覧出力オプションに於いて' do
502     before do
503       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
504       @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
505       @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
506       @sbt = FactoryGirl.create :speech_balloon_template
507       @comic = FactoryGirl.create :comic, :author_id => @author.id, :visible => 1
508       @panel = FactoryGirl.create :panel, :author_id => @author.id, :publish => 1
509       @story = FactoryGirl.create :story, :author_id => @author.id, :comic_id => @comic.id, :panel_id => @panel.id
510       @gp = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :picture_id => @p.id
511     end
512     it 'コマを含んでいる' do
513       r = GroundPicture.list.to_json GroundPicture.list_json_opt
514       j = JSON.parse r
515       i = j.first
516       i.has_key?('panel').should be_true
517     end
518       it 'コマは作家を含んでいる' do
519         r = GroundPicture.list.to_json GroundPicture.list_json_opt
520         j = JSON.parse r
521         i = j.first
522         s = i['panel']
523         s.has_key?('author').should be_true
524       end
525     it '実素材を含んでいる' do
526       r = GroundPicture.list.to_json GroundPicture.list_json_opt
527       j = JSON.parse r
528       i = j.first
529       i.has_key?('picture').should be_true
530     end
531       it '実素材は絵師を含んでいる' do
532         r = GroundPicture.list.to_json GroundPicture.list_json_opt
533         j = JSON.parse r
534         i = j.first
535         s = i['picture']
536         s.has_key?('artist').should be_true
537       end
538       it '実素材はライセンスを含んでいる' do
539         r = GroundPicture.list.to_json GroundPicture.list_json_opt
540         j = JSON.parse r
541         i = j.first
542         s = i['picture']
543         s.has_key?('license').should be_true
544       end
545   end
546   
547   describe '単体取得に於いて' do
548     before do
549       @gp = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :picture_id => @p.id
550     end
551     context 'つつがなく終わるとき' do
552       it '単体取得オプションを利用している' do
553         GroundPicture.stub(:show_opt).with(any_args).and_return({:include => :panel})
554         GroundPicture.should_receive(:show_opt).with(any_args).exactly(1)
555         r = GroundPicture.show @gp.id, @author
556       end
557       it '閲覧許可を問い合わせている' do
558         GroundPicture.any_instance.stub(:visible?).with(any_args).and_return(true)
559         GroundPicture.any_instance.should_receive(:visible?).with(any_args).exactly(1)
560         r = GroundPicture.show @gp.id, @author
561       end
562     end
563     it '指定の絵地を返す' do
564       GroundPicture.any_instance.stub(:visible?).and_return(true)
565       pl = GroundPicture.show @gp.id, @author
566       pl.should eq @gp
567     end
568     context '閲覧許可が出なかったとき' do
569       it '403Forbidden例外を返す' do
570         GroundPicture.any_instance.stub(:visible?).and_return(false)
571         lambda{
572           GroundPicture.show @gp.id, @author
573         }.should raise_error(ActiveRecord::Forbidden)
574       end
575     end
576     context '存在しない絵地を開こうとしたとき' do
577       it '404RecordNotFound例外を返す' do
578         lambda{
579           GroundPicture.show 110, @author
580         }.should raise_error(ActiveRecord::RecordNotFound)
581       end
582     end
583   end
584   describe '単体取得オプションに於いて' do
585     it 'includeキーを含んでいる' do
586       r = GroundPicture.show_opt
587       r.has_key?(:include).should be_true
588     end
589     it '2つの項目を含んでいる' do
590       r = GroundPicture.show_opt[:include]
591       r.should have(2).items
592     end
593     it 'コマを含んでいる' do
594       r = GroundPicture.show_opt[:include]
595       r.has_key?(:panel).should be_true
596     end
597       it 'コマは作家を含んでいる' do
598         r = GroundPicture.show_opt[:include]
599         r[:panel].has_key?(:author).should be_true
600       end
601     it '実素材を含んでいる' do
602       r = GroundPicture.show_opt[:include]
603       r.has_key?(:picture).should be_true
604     end
605       it '実素材は絵師を含んでいる' do
606         r = GroundPicture.show_opt[:include]
607         r[:picture].has_key?(:artist).should be_true
608       end
609       it '実素材はライセンスを含んでいる' do
610         r = GroundPicture.show_opt[:include]
611         r[:picture].has_key?(:license).should be_true
612       end
613   end
614   describe 'json単体出力オプションに於いて' do
615     before do
616       @gp = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :picture_id => @p.id
617     end
618     it 'コマを含んでいる' do
619       r = GroundPicture.show(@gp.id, @author).to_json GroundPicture.show_json_opt
620       j = JSON.parse r
621       i = j
622       i.has_key?('panel').should be_true
623     end
624       it 'コマは作家を含んでいる' do
625         r = GroundPicture.show(@gp.id, @author).to_json GroundPicture.show_json_opt
626         j = JSON.parse r
627         i = j
628         s = i['panel']
629         s.has_key?('author').should be_true
630       end
631     it '実素材を含んでいる' do
632       r = GroundPicture.show(@gp.id, @author).to_json GroundPicture.show_json_opt
633       j = JSON.parse r
634       i = j
635       i.has_key?('picture').should be_true
636     end
637       it '実素材は絵師を含んでいる' do
638         r = GroundPicture.show(@gp.id, @author).to_json GroundPicture.show_json_opt
639         j = JSON.parse r
640         i = j['picture']
641         i.has_key?('artist').should be_true
642       end
643       it '実素材はライセンスを含んでいる' do
644         r = GroundPicture.show(@gp.id, @author).to_json GroundPicture.show_json_opt
645         j = JSON.parse r
646         i = j['picture']
647         i.has_key?('license').should be_true
648       end
649   end
650   
651 end