OSDN Git Service

76f8392ae3bc6b61f3a5509c7b16a6ab432b37d1
[pettanr/pettanr.git] / spec / models / picture_spec.rb
1 # -*- encoding: utf-8 -*-
2 #実素材
3 require 'spec_helper'
4
5 describe Picture do
6   before do
7     FactoryGirl.create :admin
8     @user = FactoryGirl.create( :user_yas)
9     @author = @user.author
10     @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
11     @other_user = FactoryGirl.create( :user_yas)
12     @other_author = @other_user.author
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   end
19   
20   describe '検証に於いて' do
21     before do
22     end
23     
24     it 'オーソドックスなデータなら通る' do
25       @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
26       @p.should be_valid
27     end
28     
29     context 'original_picture_idを検証するとき' do
30       before do
31         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
32       end
33       it 'テストデータの確認' do
34         @p.original_picture_id = @op.id
35         @p.should be_valid
36       end
37       it 'nullなら失敗する' do
38         @p.original_picture_id = nil
39         @p.should_not be_valid
40       end
41       it '数値でなければ失敗する' do
42         @p.original_picture_id = 'a'
43         @p.should_not be_valid
44       end
45       it '存在する原画でなければ失敗する' do
46         @p.original_picture_id = 0
47         @p.should_not be_valid
48       end
49     end
50     context 'revisionを検証するとき' do
51       before do
52         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
53       end
54       it 'テストデータの確認' do
55         @p.revision = 1
56         @p.should be_valid
57       end
58       it 'nullなら失敗する' do
59         @p.revision = nil
60         @p.should_not be_valid
61       end
62       it '数値でなければ失敗する' do
63         @p.revision = 'a'
64         @p.should_not be_valid
65       end
66     end
67     context 'extを検証するとき' do
68       before do
69         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
70       end
71       it 'テストデータの確認' do
72         @p.ext = 'jpeg'
73         @p.should be_valid
74       end
75       it 'nullなら失敗する' do
76         @p.ext = ''
77         @p.should_not be_valid
78       end
79       it '5文字以上なら失敗する' do
80         @p.ext = 'a'*5
81         @p.should_not be_valid
82       end
83       it 'png,gif,jpeg以外なら失敗する' do
84         @p.ext = 'bmp'
85         @p.should_not be_valid
86       end
87     end
88     context 'widthを検証するとき' do
89       before do
90         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
91       end
92       it 'テストデータの確認' do
93         @p.width = 1
94         @p.should be_valid
95       end
96       it 'nullなら失敗する' do
97         @p.width = nil
98         @p.should_not be_valid
99       end
100       it '数値でなければ失敗する' do
101         @p.width = 'a'
102         @p.should_not be_valid
103       end
104       it '0なら失敗する' do
105         @p.width = '0'
106         @p.should_not be_valid
107       end
108       it '負でも失敗する' do
109         @p.width = -1
110         @p.should_not be_valid
111       end
112     end
113     context 'heightを検証するとき' do
114       before do
115         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
116       end
117       it 'テストデータの確認' do
118         @p.height = 1
119         @p.should be_valid
120       end
121       it 'nullなら失敗する' do
122         @p.height = nil
123         @p.should_not be_valid
124       end
125       it '数値でなければ失敗する' do
126         @p.height = 'a'
127         @p.should_not be_valid
128       end
129       it '0なら失敗する' do
130         @p.height = '0'
131         @p.should_not be_valid
132       end
133       it '負でも失敗する' do
134         @p.height = -1
135         @p.should_not be_valid
136       end
137     end
138     context 'filesizeを検証するとき' do
139       before do
140         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
141       end
142       it 'テストデータの確認' do
143         @p.filesize = 1
144         @p.should be_valid
145       end
146       it 'nullなら失敗する' do
147         @p.filesize = nil
148         @p.should_not be_valid
149       end
150       it '数値でなければ失敗する' do
151         @p.filesize = 'a'
152         @p.should_not be_valid
153       end
154       it '負なら失敗する' do
155         @p.filesize = '-1'
156         @p.should_not be_valid
157       end
158       it '2MB以上なら失敗する' do
159         @p.filesize = 2000000+1
160         @p.should_not be_valid
161       end
162     end
163     context 'artist_idを検証するとき' do
164       before do
165         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
166       end
167       it 'テストデータの確認' do
168         @p.artist_id = @artist.id
169         @p.should be_valid
170       end
171       it 'nullなら失敗する' do
172         @p.artist_id = nil
173         @p.should_not be_valid
174       end
175       it '数値でなければ失敗する' do
176         @p.artist_id = 'a'
177         @p.should_not be_valid
178       end
179       it '存在する絵師でなければ失敗する' do
180         @p.artist_id = 0
181         @p.should_not be_valid
182       end
183     end
184     context 'license_idを検証するとき' do
185       before do
186         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
187       end
188       it 'テストデータの確認' do
189         @p.license_id = @license.id
190         @p.should be_valid
191       end
192       it 'nullなら失敗する' do
193         @p.license_id = nil
194         @p.should_not be_valid
195       end
196       it '数値でなければ失敗する' do
197         @p.license_id = 'a'
198         @p.should_not be_valid
199       end
200       it '存在するライセンスグループでなければ失敗する' do
201         @p.license_id = 0
202         @p.should_not be_valid
203       end
204     end
205     context 'artist_nameを検証するとき' do
206       before do
207         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
208       end
209       it 'テストデータの確認' do
210         @p.artist_name = 'a'
211         @p.should be_valid
212       end
213       it 'nullなら失敗する' do
214         @p.artist_name = nil
215         @p.should_not be_valid
216       end
217     end
218     context 'classnameを検証するとき' do
219       before do
220         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
221       end
222       it 'テストデータの確認' do
223         @p.classname = 'a'*50
224         @p.should be_valid
225       end
226       it 'nullなら失敗する' do
227         @p.classname = ''
228         @p.should_not be_valid
229       end
230       it '51文字以上なら失敗する' do
231         @p.classname = 'a'*51
232         @p.should_not be_valid
233       end
234     end
235     context 'creditを検証するとき' do
236       before do
237         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
238       end
239       it 'テストデータの確認' do
240         @p.credit = 'a'
241         @p.should be_valid
242       end
243     end
244     context 'settingsを検証するとき' do
245       before do
246         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
247       end
248       it 'テストデータの確認' do
249         @p.settings = 'a'
250         @p.should be_valid
251       end
252     end
253   end
254   describe '補充に於いて' do
255   end
256   describe '最新Revision取得に於いて' do
257     context '初めての原画を公開したとき' do
258       before do
259         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
260       end
261       it 'Revisionは1となる' do
262         @p.new_revision.should eq 1
263       end
264     end
265     context 'HEADが1のとき' do
266       before do
267         FactoryGirl.create :picture, :revision => 1, :original_picture_id => @op.id, :license_id => @license.id
268         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
269       end
270       it 'Revisionは2となる' do
271         @p.new_revision.should eq 2
272       end
273     end
274     context 'HEADが5のとき' do
275       before do
276         FactoryGirl.create :picture, :revision => 1, :original_picture_id => @op.id, :license_id => @license.id
277         FactoryGirl.create :picture, :revision => 5, :original_picture_id => @op.id, :license_id => @license.id
278         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
279       end
280       it 'Revisionは6となる' do
281         @p.new_revision.should eq 6
282       end
283     end
284   end
285   describe '素材からのコピーデータセットに於いて' do
286     before do
287       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
288       attr = {:ext => 'jpeg', :width => 264, :height => 265, :filesize => 266, 
289         :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, 
290         :artist_name => 'tester', :classname => 'Tester', :credit => {:title => 'cap'}.to_json.to_s, :settings => {:set => 1}.to_json.to_s}
291       @rp = FactoryGirl.build :resource_picture, attr
292       @p = FactoryGirl.build :picture
293     end
294     it '素材オブジェクトから属性を取り出して対象実素材にセットしている' do
295       res = @p.copy_data(@rp)
296       @p.ext.should eq 'jpeg'
297       @p.width.should eq 264
298       @p.height.should eq 265
299       @p.filesize.should eq 266
300       @p.artist_id.should eq @artist.id
301       @p.license_id.should eq @license.id
302       @p.original_picture_id.should eq @op.id
303       @p.artist_name.should eq 'tester'
304       @p.classname.should eq 'Tester'
305       @p.credit.should match /title/
306       @p.settings.should match /set/
307     end
308   end
309   
310   describe '作成に於いて' do
311     before do
312       #RMagickのスタブをおいておく
313       class Mgk ; class Image ; end ; end
314       @filesize = 76543
315       Mgk::Image.stub(:from_blob).with(any_args).and_return([Mgk.new])
316       Mgk.any_instance.stub(:format).with(any_args).and_return('png')
317       Mgk.any_instance.stub(:rows).with(any_args).and_return(200)
318       Mgk.any_instance.stub(:columns).with(any_args).and_return(100)
319       Mgk.any_instance.stub(:filesize).with(any_args).and_return(@filesize)
320       Mgk.any_instance.stub(:to_blob).with(any_args).and_return('data')
321       #原画ファイル削除だけは必ず成功するものとしておく
322       PictureIO::LocalPicture.any_instance.stub(:delete).with(any_args).and_return(true)
323     end
324     context '事前チェック' do
325       before do
326         #すべての処理が正常パターンで通過すれば、一番深い分岐まで通る。
327         #それで外部のメソッド呼び出しだけに着目してテストする。
328         Picture.any_instance.stub(:save).with(any_args).and_return(true)
329         Picture.any_instance.stub(:store_picture).with(any_args).and_return(true)
330         Picture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
331         class GifMgk < Mgk ; end  #store_pictureは二回呼び出される。区別をつけるために
332         @gifmgk = GifMgk.new      #パラメータを二種類用意する。
333         Picture.stub(:png_to_gif).with(any_args).and_return(@gifmgk)
334         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
335       end
336       it '最新Revisionを取得している' do
337         Picture.any_instance.should_receive(:new_revision).with(any_args).exactly(1)
338         res = @p.store(Mgk.new)
339       end
340       it '自身を保存している' do
341         Picture.any_instance.should_receive(:save).with(any_args).exactly(1)
342         res = @p.store(Mgk.new)
343       end
344       it '画像ファイルの作成機能で画像を保存している' do
345         mgk = Mgk.new   #一回目の本画像保存は与えたオブジェクトを使って保存する。
346         Picture.any_instance.should_receive(:store_picture).with(mgk).exactly(1)
347         res = @p.store(mgk)
348       end
349       it '自身にgifフォーマット変換対象かを問い合わせている' do
350         Picture.any_instance.should_receive(:to_gif?).with(any_args).exactly(1)
351         res = @p.store(Mgk.new)
352       end
353       it '自身にGifフォーマット変換を依頼している' do
354         Picture.should_receive(:png_to_gif).with(any_args).exactly(1)
355         res = @p.store(Mgk.new)
356       end
357       it '画像ファイルの作成機能でgif画像を保存している' do
358         #二回目の保存はgif変換の結果を渡す。
359         Picture.any_instance.should_receive(:store_picture).with(@gifmgk).exactly(1)
360         res = @p.store(Mgk.new)
361       end
362     end
363     context 'つつがなく終わるとき' do
364       before do
365         #すべての処理を正常パターンで通過させ、保存機能をチェックする。
366 #        Picture.any_instance.stub(:save).with(any_args).and_return(true)
367         Picture.any_instance.stub(:store_picture).with(any_args).and_return(true)
368         Picture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
369         class GifMgk < Mgk ; end  #store_pictureは二回呼び出される。区別をつけるために
370         @gifmgk = GifMgk.new      #パラメータを二種類用意する。
371         Picture.stub(:png_to_gif).with(any_args).and_return(@gifmgk)
372         @p = FactoryGirl.build :picture, :revision => nil, :original_picture_id => @op.id, :license_id => @license.id
373       end
374       it 'Trueを返す' do
375         res = @p.store(Mgk.new)
376         res.should be_true
377       end
378       it 'Revisionに最新Revisionセット' do
379         res = @p.store(Mgk.new)
380         @p.revision.should eq 1
381       end
382       it '自身が保存されている' do
383         lambda {
384           res = @p.store(Mgk.new)
385         }.should change Picture, :count
386       end
387     end
388     context 'gif変換なしで、つつがなく終わるとき' do
389       before do
390         #すべての処理を正常パターンで通過させ、保存機能をチェックする。
391         Picture.any_instance.stub(:save).with(any_args).and_return(true)
392         Picture.any_instance.stub(:store_picture).with(any_args).and_return(true)
393         Picture.any_instance.stub(:to_gif?).with(any_args).and_return(false)
394         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
395       end
396       it 'Trueを返す' do
397         res = @p.store(Mgk.new)
398         res.should be_true
399       end
400       it 'gif保存は呼ばれていない' do
401         #二回目の画像作成が呼び出されないで1回こっきりならgif保存は呼ばれていないんだろう。
402         Picture.any_instance.should_receive(:store_picture).with(any_args).exactly(1)
403         res = @p.store(Mgk.new)
404       end
405     end
406     #以下から例外ケース。処理先頭から失敗させていく
407     context '自身の保存に失敗したとき' do
408       before do
409         Picture.any_instance.stub(:save).with(any_args).and_return(false)
410         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
411       end
412       it 'Falseを返す' do
413         res = @p.store(Mgk.new)
414         res.should be_false
415       end
416       it '更新されていない' do
417         @p.store(Mgk.new)
418         @p.should be_a_new Picture
419       end
420     end
421     context '画像の保存に失敗したとき' do
422       before do
423         Picture.any_instance.stub(:save).with(any_args).and_return(true)
424         Picture.any_instance.stub(:store_picture).with(any_args).and_return(false)
425         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
426       end
427       it 'Falseを返す' do
428         res = @p.store(Mgk.new)
429         res.should be_false
430       end
431       it 'gif変換判定は呼ばれていない' do
432         Picture.any_instance.should_not_receive(:to_gif?).with(any_args)
433         res = @p.store(Mgk.new)
434       end
435     end
436     context 'gif変換に失敗したとき' do
437       before do
438         Picture.any_instance.stub(:save).with(any_args).and_return(true)
439         Picture.any_instance.stub(:store_picture).with(any_args).and_return(true)
440         Picture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
441         Picture.stub(:png_to_gif).with(any_args).and_return(false)
442         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
443       end
444       it 'Falseを返す' do
445         res = @p.store(Mgk.new)
446         res.should be_false
447       end
448       it 'gif画像の保存は呼ばれていない' do
449         #本画像の保存があるので、一度は呼ばれる
450         Picture.any_instance.should_receive(:store_picture).with(any_args).exactly(1)
451         res = @p.store(Mgk.new)
452       end
453     end
454     context 'gif画像の保存に失敗したとき' do
455       before do
456         @mgk = Mgk.new
457         Picture.any_instance.stub(:save).with(any_args).and_return(true)
458         Picture.any_instance.stub(:store_picture).with(@mgk).and_return(true)
459         Picture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
460         class GifMgk < Mgk ; end  #store_pictureは二回呼び出される。区別をつけるために
461         @gifmgk = GifMgk.new      #パラメータを二種類用意する。
462         Picture.stub(:png_to_gif).with(any_args).and_return(@gifmgk)
463         Picture.any_instance.stub(:store_picture).with(@gifmgk).and_return(false)
464         @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
465       end
466       it 'Falseを返す' do
467         res = @p.store(@mgk)
468         res.should be_false
469       end
470     end
471   end
472   
473   describe '反転画像の保存先に於いて' do
474     before do
475       @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
476     end
477     context '禁止のとき' do
478       it 'ベースディレクトリだけを返す' do
479         Picture.any_instance.should_receive(:flag_reverse).with(any_args).and_return(-1)
480         r = @p.subdirs
481         r.should have(1).item 
482       end
483       it 'ベースディレクトリだけを返す' do
484         Picture.any_instance.should_receive(:flag_reverse).with(any_args).and_return(-1)
485         r = @p.subdirs
486         r.first.should eq ''
487       end
488     end
489     context '許可のとき' do
490       it 'ベースディレクトリと反転3種を返す' do
491         Picture.any_instance.should_receive(:flag_reverse).with(any_args).and_return(1)
492         r = @p.subdirs
493         r.should have(4).item 
494       end
495       it 'ベースディレクトリと反転3種を返す' do
496         Picture.any_instance.should_receive(:flag_reverse).with(any_args).and_return(1)
497         r = @p.subdirs
498         r.last.should eq 'vh'
499       end
500     end
501   end
502   
503   describe '画像ファイルの作成に於いて' do
504     #PictureIo経由で画像を保存するための機能。ファイル名に自身のidを使うので事前に自身の保存が必要。
505     before do
506       #RMagickのスタブをおいておく
507       class Mgk ; class Image ; end ; end
508       @filesize = 76543
509       Mgk::Image.stub(:from_blob).with(any_args).and_return([Mgk.new])
510       Mgk.any_instance.stub(:format).with(any_args).and_return('png')
511       Mgk.any_instance.stub(:rows).with(any_args).and_return(200)
512       Mgk.any_instance.stub(:columns).with(any_args).and_return(100)
513       Mgk.any_instance.stub(:filesize).with(any_args).and_return(@filesize)
514       Mgk.any_instance.stub(:to_blob).with(any_args).and_return('data')
515       #原画ファイル削除だけは必ず成功するものとしておく
516       PictureIO::LocalPicture.any_instance.stub(:delete).with(any_args).and_return(true)
517       
518       Picture.any_instance.stub(:subdirs).with(any_args).and_return(['', 'v', 'h', 'vh'])
519       Picture.any_instance.stub(:h).with(any_args).and_return('data')
520       Picture.any_instance.stub(:v).with(any_args).and_return('data')
521       Picture.any_instance.stub(:vh).with(any_args).and_return('data')
522       @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id
523     end
524     context '事前チェック' do
525       before do
526         #すべての処理を正常パターンで通過させ、保存機能をチェックする。
527         PictureIO.picture_io.stub(:put).with(any_args).and_return(true)
528       end
529       it '画像ファイルの保存が4回呼ばれる' do
530         PictureIO.picture_io.should_receive(:put).with(any_args).exactly(4)
531         res = @p.store_picture(Mgk.new)
532       end
533       it '画像ファイルのベースへの保存が1回呼ばれる' do
534         PictureIO.picture_io.should_receive(:put).with('data', @p.filename, '').exactly(1)
535         res = @p.store_picture(Mgk.new)
536       end
537       it '画像ファイルの垂直反転への保存が1回呼ばれる' do
538         PictureIO.picture_io.should_receive(:put).with('data', @p.filename, 'v').exactly(1)
539         res = @p.store_picture(Mgk.new)
540       end
541       it '画像ファイルの水平反転への保存が1回呼ばれる' do
542         PictureIO.picture_io.should_receive(:put).with('data', @p.filename, 'h').exactly(1)
543         res = @p.store_picture(Mgk.new)
544       end
545       it '画像ファイルの垂直水平反転への保存が1回呼ばれる' do
546         PictureIO.picture_io.should_receive(:put).with('data', @p.filename, 'vh').exactly(1)
547         res = @p.store_picture(Mgk.new)
548       end
549       it '垂直反転が1回呼ばれる' do
550         Picture.any_instance.should_receive(:v).with(any_args).exactly(1)
551         res = @p.store_picture(Mgk.new)
552       end
553       it '水平反転が1回呼ばれる' do
554         Picture.any_instance.should_receive(:h).with(any_args).exactly(1)
555         res = @p.store_picture(Mgk.new)
556       end
557       it '垂直水平反転が1回呼ばれる' do
558         Picture.any_instance.should_receive(:vh).with(any_args).exactly(1)
559         res = @p.store_picture(Mgk.new)
560       end
561     end
562     context 'つつがなく終わるとき' do
563       before do
564         #すべての処理を正常パターンで通過させ、保存機能をチェックする。
565         PictureIO.picture_io.stub(:put).with(any_args).and_return(true)
566       end
567       it 'Trueを返す' do
568         res = @p.store_picture(Mgk.new)
569         res.should be_true
570       end
571     end
572     context '例外ケース' do
573       before do
574         PictureIO.picture_io.stub(:put).with(any_args).and_return(false)
575       end
576       it 'Falseを返す' do
577         res = @p.store_picture(Mgk.new)
578         res.should be_false
579       end
580     end
581     
582   end
583   
584   describe 'フラグ展開に於いて' do
585     before do
586       @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id,
587         :settings => "{\"open\": 1, \"commercial\": 2, \"official\": 3, \"attribution\": 4, \"derive\": 5, \"thumbnail\": 6, \"gif_convert\": 7, \"reverse\": 8, \"resize\": 9, \"sync_vh\": 10, \"overlap\": 11}"
588     end
589     context 'json展開チェック' do
590       it '展開してなければ展開して@flagsに保管する' do
591         @p.flags.should_not be_nil
592       end
593       it '展開できなければ{}' do
594         @p.settings += '}'
595         @p.flags.is_a?(Hash).should be_true
596         @p.flags.empty?.should be_true
597       end
598     end
599     context 'openについて' do
600       it '@flag_openに保管する' do
601         @p.flag_open.should_not be_nil
602       end
603       it '本当にフラグHashからじゃなく、変数から取得してる?' do
604         @p.flag_open
605         @p.flags = nil
606         @p.flag_open.should_not be_nil
607       end
608       it '1を返す' do
609         @p.flag_open.should eq 1
610       end
611     end
612     context 'commercialについて' do
613       it '@flag_commercialに保管する' do
614         @p.flag_commercial.should_not be_nil
615       end
616       it '本当にフラグHashからじゃなく、変数から取得してる?' do
617         @p.flag_commercial
618         @p.flags = nil
619         @p.flag_commercial.should_not be_nil
620       end
621       it '2を返す' do
622         @p.flag_commercial.should eq 2
623       end
624     end
625     context 'officialについて' do
626       it '@flag_officialに保管する' do
627         @p.flag_official.should_not be_nil
628       end
629       it '本当にフラグHashからじゃなく、変数から取得してる?' do
630         @p.flag_official
631         @p.flags = nil
632         @p.flag_official.should_not be_nil
633       end
634       it 'を返す' do
635         @p.flag_official.should eq 3
636       end
637     end
638     context 'attributionについて' do
639       it '@flag_attributionに保管する' do
640         @p.flag_attribution.should_not be_nil
641       end
642       it '本当にフラグHashからじゃなく、変数から取得してる?' do
643         @p.flag_attribution
644         @p.flags = nil
645         @p.flag_attribution.should_not be_nil
646       end
647       it '4を返す' do
648         @p.flag_attribution.should eq 4
649       end
650     end
651     context 'deriveについて' do
652       it '@flag_deriveに保管する' do
653         @p.flag_derive.should_not be_nil
654       end
655       it '本当にフラグHashからじゃなく、変数から取得してる?' do
656         @p.flag_derive
657         @p.flags = nil
658         @p.flag_derive.should_not be_nil
659       end
660       it '5を返す' do
661         @p.flag_derive.should eq 5
662       end
663     end
664     context 'thumbnailについて' do
665       it '@flag_thumbnailに保管する' do
666         @p.flag_thumbnail.should_not be_nil
667       end
668       it '本当にフラグHashからじゃなく、変数から取得してる?' do
669         @p.flag_thumbnail
670         @p.flags = nil
671         @p.flag_thumbnail.should_not be_nil
672       end
673       it '6を返す' do
674         @p.flag_thumbnail.should eq 6
675       end
676     end
677     context 'gif_convertについて' do
678       it '@flag_gif_convertに保管する' do
679         @p.flag_gif_convert.should_not be_nil
680       end
681       it '本当にフラグHashからじゃなく、変数から取得してる?' do
682         @p.flag_gif_convert
683         @p.flags = nil
684         @p.flag_gif_convert.should_not be_nil
685       end
686       it '7を返す' do
687         @p.flag_gif_convert.should eq 7
688       end
689     end
690     context 'reverseについて' do
691       it '@flag_reverseに保管する' do
692         @p.flag_reverse.should_not be_nil
693       end
694       it '本当にフラグHashからじゃなく、変数から取得してる?' do
695         @p.flag_reverse
696         @p.flags = nil
697         @p.flag_reverse.should_not be_nil
698       end
699       it '8を返す' do
700         @p.flag_reverse.should eq 8
701       end
702     end
703     context 'resizeについて' do
704       it '@flag_resizeに保管する' do
705         @p.flag_resize.should_not be_nil
706       end
707       it '本当にフラグHashからじゃなく、変数から取得してる?' do
708         @p.flag_resize
709         @p.flags = nil
710         @p.flag_resize.should_not be_nil
711       end
712       it '9を返す' do
713         @p.flag_resize.should eq 9
714       end
715     end
716     context 'sync_vhについて' do
717       it '@flag_sync_vhに保管する' do
718         @p.flag_sync_vh.should_not be_nil
719       end
720       it '本当にフラグHashからじゃなく、変数から取得してる?' do
721         @p.flag_sync_vh
722         @p.flags = nil
723         @p.flag_sync_vh.should_not be_nil
724       end
725       it '10を返す' do
726         @p.flag_sync_vh.should eq 10
727       end
728     end
729     context 'overlapについて' do
730       it '@flag_overlapに保管する' do
731         @p.flag_overlap.should_not be_nil
732       end
733       it '本当にフラグHashからじゃなく、変数から取得してる?' do
734         @p.flag_overlap
735         @p.flags = nil
736         @p.flag_overlap.should_not be_nil
737       end
738       it '11を返す' do
739         @p.flag_overlap.should eq 11
740       end
741     end
742   end
743
744   describe 'クレジットデータに於いて' do
745     before do
746       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
747       @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :credit => '{"system_picture_id": 2}'
748     end
749     it 'system_picture_idが入っている' do
750       res = @p.credit_data
751       res["system_picture_id"].should eq 2
752     end
753   end
754   
755 end