1 # -*- encoding: utf-8 -*-
\r
3 require 'spec_helper'
\r
5 describe ResourcePicture do
\r
7 FactoryGirl.create :admin
\r
8 @user = FactoryGirl.create( :user_yas)
\r
9 @author = @user.author
\r
10 @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
\r
11 @other_user = FactoryGirl.create( :user_yas)
\r
12 @other_author = @other_user.author
\r
13 @other_artist = FactoryGirl.create :artist_yas, :author_id => @other_author.id
\r
14 @sp = FactoryGirl.create :system_picture
\r
15 @lg = FactoryGirl.create :license_group
\r
16 @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
\r
17 @original_picture = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
19 #原画ファイル削除だけは必ず成功するものとしておく
\r
20 PictureIO::LocalPicture.any_instance.stub(:delete).with(any_args).and_return(true)
\r
21 Picture.any_instance.stub(:subdirs).with(any_args).and_return(['', 'v', 'h', 'vh'])
\r
22 Picture.any_instance.stub(:h).with(any_args).and_return('data')
\r
23 Picture.any_instance.stub(:v).with(any_args).and_return('data')
\r
24 Picture.any_instance.stub(:vh).with(any_args).and_return('data')
\r
27 describe '検証に於いて' do
\r
29 @p = FactoryGirl.create :picture, :original_picture_id => @original_picture.id, :license_id => @license.id, :artist_id => @artist.id
\r
30 @rp = FactoryGirl.build :resource_picture, :artist_id => @artist.id, :original_picture_id => @original_picture.id, :license_id => @license.id, :picture_id => @p.id
\r
33 context 'オーソドックスなデータのとき' do
35 @rp.ext = 'png' #リストにない拡張子は通らないし
47 @rp.filesize = 2000000
49 @rp.classname = 'a'*50
54 context 'extを検証するとき' do
\r
57 @rp.should_not be_valid
\r
61 @rp.should_not be_valid
\r
63 it 'png,gif,jpeg以外なら失敗する' do
\r
65 @rp.should_not be_valid
\r
68 context 'widthを検証するとき' do
\r
71 @rp.should_not be_valid
\r
75 @rp.should_not be_valid
\r
79 @rp.should_not be_valid
\r
83 @rp.should_not be_valid
\r
86 context 'heightを検証するとき' do
\r
89 @rp.should_not be_valid
\r
93 @rp.should_not be_valid
\r
97 @rp.should_not be_valid
\r
101 @rp.should_not be_valid
\r
104 context 'filesizeを検証するとき' do
\r
107 @rp.should_not be_valid
\r
109 it '数値でなければ失敗する' do
\r
111 @rp.should_not be_valid
\r
114 @rp.filesize = '-1'
\r
115 @rp.should_not be_valid
\r
117 it '2MB以上なら失敗する' do
\r
118 @rp.filesize = 2000000+1
\r
119 @rp.should_not be_valid
\r
122 context 'artist_idを検証するとき' do
\r
124 @rp.artist_id = nil
\r
125 @rp.should_not be_valid
\r
127 it '数値でなければ失敗する' do
\r
128 @rp.artist_id = 'a'
\r
129 @rp.should_not be_valid
\r
131 it '存在する絵師でなければ失敗する' do
\r
133 @rp.should_not be_valid
\r
136 context 'md5を検証するとき' do
\r
139 @rp.should_not be_valid
\r
143 @rp.should_not be_valid
145 it '32文字以上なら失敗する' do
\r
147 @rp.should_not be_valid
\r
150 context 'license_idを検証するとき' do
\r
152 @rp.license_id = nil
\r
153 @rp.should_not be_valid
\r
155 it '数値でなければ失敗する' do
\r
156 @rp.license_id = 'a'
\r
157 @rp.should_not be_valid
\r
159 it '存在する絵師でなければ失敗する' do
\r
161 @rp.should_not be_valid
\r
164 context 'original_picture_idを検証するとき' do
\r
166 @rp.original_picture_id = nil
\r
167 @rp.should_not be_valid
\r
169 it '数値でなければ失敗する' do
\r
170 @rp.original_picture_id = 'a'
\r
171 @rp.should_not be_valid
\r
173 it '存在する原画でなければ失敗する' do
\r
174 @rp.original_picture_id = 0
\r
175 @rp.should_not be_valid
\r
178 context 'artist_nameを検証するとき' do
\r
180 @rp.artist_name = nil
\r
181 @rp.should_not be_valid
\r
184 context 'classnameを検証するとき' do
\r
187 @rp.should_not be_valid
\r
189 it '51文字以上なら失敗する' do
\r
190 @rp.classname = 'a'*51
\r
191 @rp.should_not be_valid
\r
194 context 'creditを検証するとき' do
\r
196 context 'settingsを検証するとき' do
\r
198 context 'picture_idを検証するとき' do
\r
200 @rp.picture_id = nil
\r
201 @rp.should_not be_valid
\r
203 it '数値でなければ失敗する' do
\r
204 @rp.picture_id = 'a'
\r
205 @rp.should_not be_valid
\r
207 it '存在する実素材でなければ失敗する' do
\r
209 @rp.should_not be_valid
\r
214 describe 'デフォルト値補充に於いて' do
216 @p = FactoryGirl.create :picture, :original_picture_id => @original_picture.id, :license_id => @license.id, :artist_id => @artist.id
\r
217 @rp = FactoryGirl.build :resource_picture, :artist_id => @artist.id, :original_picture_id => @original_picture.id, :license_id => @license.id, :picture_id => @p.id
\r
222 describe '上書き補充に於いて' do
224 @original_picture.attributes = {:ext => 'gif', :width => 267, :height => 268, :filesize => 269,
225 :artist_id => @artist.id }
226 @rp = FactoryGirl.build :resource_picture, :original_picture_id => @original_picture.id
228 it 'width, height, ext, filesize, md5, original_picture_id, artist_idが設定されている' do
229 @rp.overwrite @original_picture
230 @rp.width.should eq 267
231 @rp.height.should eq 268
232 @rp.ext.should eq 'gif'
233 @rp.filesize.should eq 269
234 @rp.md5.should eq @rp.md5
235 @rp.original_picture_id.should eq @original_picture.id
236 @rp.artist_id.should eq @artist.id
240 describe '所持判定に於いて' do
242 @p = FactoryGirl.create :picture, :original_picture_id => @original_picture.id, :license_id => @license.id, :artist_id => @artist.id
\r
243 @rp = FactoryGirl.build :resource_picture, :artist_id => @artist.id, :original_picture_id => @original_picture.id, :license_id => @license.id, :picture_id => @p.id
\r
245 it '素材を更新することはないので、Falseを返す' do
246 @rp.own?(@author).should == false
250 describe '閲覧許可に於いて' do
252 @p = FactoryGirl.create :picture, :original_picture_id => @original_picture.id, :license_id => @license.id, :artist_id => @artist.id
\r
253 @rp = FactoryGirl.build :resource_picture, :artist_id => @artist.id, :original_picture_id => @original_picture.id, :license_id => @license.id, :picture_id => @p.id
\r
256 r = @rp.visible?(@author)
261 describe 'ファイル名に於いて' do
263 @p = FactoryGirl.create :picture, :original_picture_id => @original_picture.id, :license_id => @license.id, :artist_id => @artist.id
\r
264 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @original_picture.id, :license_id => @license.id, :picture_id => @p.id
\r
266 it 'id+拡張子のフォーマットで返す' do
268 r.should eq "#{@rp.id}.png"
272 describe 'MimeTypeに於いて' do
274 @p = FactoryGirl.create :picture, :original_picture_id => @original_picture.id, :license_id => @license.id, :artist_id => @artist.id
\r
275 @rp = FactoryGirl.build :resource_picture, :artist_id => @artist.id, :original_picture_id => @original_picture.id, :license_id => @license.id, :picture_id => @p.id
\r
277 it 'image/拡張子のフォーマットで返す' do
279 r.should eq "image/png"
283 describe 'ファイルのurlに於いて' do
285 @p = FactoryGirl.create :picture, :original_picture_id => @original_picture.id, :license_id => @license.id, :artist_id => @artist.id
\r
286 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @original_picture.id, :license_id => @license.id, :picture_id => @p.id
\r
287 ResourcePicture.any_instance.stub(:filename).and_return('3.gif')
289 it 'ファイル名取得を依頼している' do
290 ResourcePicture.any_instance.should_receive(:filename).exactly(1)
293 it '/resource_pictures/3.gifのフォーマットで返す' do
295 r.should eq "/resource_pictures/3.gif"
299 describe '一覧取得に於いて' do
\r
301 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
302 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
303 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
\r
305 context 'page補正について' do
\r
306 it '文字列から数値に変換される' do
\r
307 ResourcePicture.page('8').should eq 8
\r
309 it 'nilの場合は1になる' do
\r
310 ResourcePicture.page().should eq 1
\r
312 it '0以下の場合は1になる' do
\r
313 ResourcePicture.page('0').should eq 1
\r
316 context 'page_size補正について' do
\r
317 it '文字列から数値に変換される' do
\r
318 ResourcePicture.page_size('7').should eq 7
\r
320 it 'nilの場合はResourcePicture.default_page_sizeになる' do
\r
321 ResourcePicture.page_size().should eq ResourcePicture.default_page_size
\r
323 it '0以下の場合はResourcePicture.default_page_sizeになる' do
\r
324 ResourcePicture.page_size('0').should eq ResourcePicture.default_page_size
\r
326 it 'ResourcePicture.max_page_sizeを超えた場合はResourcePicture.max_page_sizeになる' do
\r
327 ResourcePicture.page_size('1000').should eq ResourcePicture.max_page_size
\r
331 r = ResourcePicture.list
\r
335 nop = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
336 nrp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop.id, :picture_id => @p.id, :updated_at => Time.now + 100
\r
337 r = ResourcePicture.list
\r
338 r.should eq [nrp, @rp]
\r
340 context 'DBに5件あって1ページの件数を2件に変えたとして' do
\r
342 nop2 = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
343 @nrp2 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop2.id, :picture_id => @p.id, :updated_at => Time.now + 100
\r
344 nop3 = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
345 @nrp3 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop3.id, :picture_id => @p.id, :updated_at => Time.now + 200
\r
346 nop4 = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
347 @nrp4 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop4.id, :picture_id => @p.id, :updated_at => Time.now + 300
\r
348 nop5 = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
349 @nrp5 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop5.id, :picture_id => @p.id, :updated_at => Time.now + 400
\r
350 ResourcePicture.stub(:default_page_size).and_return(2)
\r
353 r = ResourcePicture.list
\r
354 r.should have(2).items
\r
356 it 'page=1なら末尾2件を返す' do
\r
358 r = ResourcePicture.list(1)
\r
359 r.should eq [@nrp5, @nrp4]
\r
361 it 'page=2なら中間2件を返す' do
\r
362 r = ResourcePicture.list(2)
\r
363 r.should eq [@nrp3, @nrp2]
\r
365 it 'page=3なら先頭1件を返す' do
\r
366 r = ResourcePicture.list(3)
\r
370 context 'DBに5件あって1ページの件数を2件に変えたとして' do
372 nop2 = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
373 @nrp2 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop2.id, :picture_id => @p.id, :updated_at => Time.now + 100
\r
374 nop3 = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
375 @nrp3 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop3.id, :picture_id => @p.id, :updated_at => Time.now + 200
\r
376 nop4 = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
377 @nrp4 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop4.id, :picture_id => @p.id, :updated_at => Time.now + 300
\r
378 nop5 = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
379 @nrp5 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop5.id, :picture_id => @p.id, :updated_at => Time.now + 400
\r
380 ResourcePicture.stub(:default_page_size).and_return(2)
\r
382 it '件数0は全件(5件)を返す' do
383 r = ResourcePicture.list 5, 0
384 r.should have(5).items
388 describe '一覧出力オプションに於いて' do
\r
389 it 'includeキーを含んでいる' do
390 r = ResourcePicture.list_opt
391 r.has_key?(:include).should be_true
394 r = ResourcePicture.list_opt[:include]
395 r.should have(3).items
398 r = ResourcePicture.list_opt[:include]
399 r.has_key?(:license).should be_true
402 r = ResourcePicture.list_opt[:include]
403 r.has_key?(:artist).should be_true
406 r = ResourcePicture.list_opt[:include]
407 r.has_key?(:picture).should be_true
410 describe 'json一覧出力オプションに於いて' do
\r
411 it 'includeキーを含んでいる' do
412 r = ResourcePicture.list_json_opt
413 r.has_key?(:include).should be_true
416 r = ResourcePicture.list_json_opt[:include]
417 r.should have(3).items
420 r = ResourcePicture.list_json_opt[:include]
421 r.has_key?(:license).should be_true
424 r = ResourcePicture.list_json_opt[:include]
425 r.has_key?(:artist).should be_true
428 r = ResourcePicture.list_json_opt[:include]
429 r.has_key?(:picture).should be_true
433 describe '単体取得に於いて' do
\r
435 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
436 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
437 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
\r
439 context 'つつがなく終わるとき' do
440 it '単体取得オプションを利用している' do
441 ResourcePicture.stub(:show_opt).with(any_args).and_return({})
442 ResourcePicture.should_receive(:show_opt).with(any_args).exactly(1)
443 r = ResourcePicture.show @rp.id, @author
445 it '閲覧許可を問い合わせている' do
446 ResourcePicture.any_instance.stub(:visible?).with(any_args).and_return(true)
447 ResourcePicture.any_instance.should_receive(:visible?).with(any_args).exactly(1)
448 r = ResourcePicture.show @rp.id, @author
452 r = ResourcePicture.show @rp.id, @author
\r
455 context '他人の素材を開こうとしたとき' do
456 it '403Forbidden例外を返す' do
457 ResourcePicture.any_instance.stub(:visible?).and_return(false)
459 r = ResourcePicture.show @rp.id, @other_author
460 }.should raise_error(ActiveRecord::Forbidden)
463 context '存在しない素材を開こうとしたとき' do
\r
464 it '404RecordNotFound例外を返す' do
\r
466 r = ResourcePicture.show 0, @author
\r
467 }.should raise_error(ActiveRecord::RecordNotFound)
\r
471 describe '単体出力オプションに於いて' do
\r
472 it 'includeキーを含んでいる' do
473 r = ResourcePicture.show_opt
474 r.has_key?(:include).should be_true
477 r = ResourcePicture.show_opt[:include]
478 r.should have(3).items
481 r = ResourcePicture.show_opt[:include]
482 r.has_key?(:license).should be_true
485 r = ResourcePicture.show_opt[:include]
486 r.has_key?(:artist).should be_true
489 r = ResourcePicture.show_opt[:include]
490 r.has_key?(:picture).should be_true
493 describe 'json単体出力オプションに於いて' do
\r
494 it 'includeキーを含んでいる' do
495 r = ResourcePicture.show_json_opt
496 r.has_key?(:include).should be_true
499 r = ResourcePicture.show_json_opt[:include]
500 r.should have(3).items
503 r = ResourcePicture.show_json_opt[:include]
504 r.has_key?(:license).should be_true
507 r = ResourcePicture.show_json_opt[:include]
508 r.has_key?(:artist).should be_true
511 r = ResourcePicture.show_json_opt[:include]
512 r.has_key?(:picture).should be_true
516 describe 'フォーマット変換対象判定に於いて' do
\r
518 @rp = FactoryGirl.build :resource_picture,
\r
519 :artist_id => @artist.id, :license_id => @license.id
\r
521 context '変換するケース' do
\r
522 it '画像フォーマットがpngかつライセンスの変換禁止フラグが無効のときTrue' do
\r
523 ResourcePicture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(0)
\r
525 @rp.to_gif?.should be_true
\r
528 context '変換しないケース' do
\r
529 it '画像フォーマットがでない' do
\r
530 ResourcePicture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(0)
\r
532 @rp.to_gif?.should be_false
\r
535 ResourcePicture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(-1)
\r
537 @rp.to_gif?.should be_false
\r
542 describe '新規実素材の取得に於いて' do
\r
544 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
545 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
546 attr = {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => 'tester',
\r
547 :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
\r
548 @rp = FactoryGirl.build :resource_picture, attr
\r
549 @imager = ImagerTest.load "abc\ndef\nghi"
551 context '事前チェック' do
\r
553 Picture.any_instance.stub(:store).with(any_args).and_return(true)
\r
555 it '実素材モデルにデフォルト値補充を依頼している' do
\r
556 Picture.any_instance.should_receive(:supply_default).with(any_args).exactly(1)
\r
557 r = @rp.new_picture @imager
\r
559 it '実素材モデルに上書き補充を依頼している' do
\r
560 Picture.any_instance.should_receive(:overwrite).with(any_args).exactly(1)
\r
561 r = @rp.new_picture @imager
\r
564 Picture.any_instance.should_receive(:store).with(any_args).exactly(1)
\r
565 r = @rp.new_picture @imager
\r
568 context 'つつがなく終わるとき' do
\r
569 it '保存された実素材を返す' do
\r
570 r = @rp.new_picture @imager
\r
571 r.is_a?(Picture).should be_true
\r
574 #以下から例外ケース。処理先頭から失敗させていく
\r
575 context '実素材の保存に失敗したとき' do
\r
577 Picture.any_instance.stub(:store).with(any_args).and_return(false)
\r
580 r = @rp.new_picture @imager
\r
583 it '自身の全体エラーメッセージにその旨をセットしている' do
\r
584 r = @rp.new_picture @imager
\r
585 @rp.errors[:base].should_not be_empty
\r
590 describe '作成・更新に於いて' do
\r
592 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
593 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
594 attr = {:original_picture_id => @op.id, :picture_id => nil, :license_id => @license.id, :artist_name => 'tester', :classname => 'StandardLicense', :credit => '{}', :settings => {}.to_json.to_s}
\r
595 @rp = FactoryGirl.build :resource_picture, attr
\r
596 @imager = ImagerTest.load "abc\ndef\nghi"
598 context '事前チェック' do
\r
600 #すべての処理が正常パターンで通過すれば、一番深い分岐まで通る。
\r
601 #それで外部のメソッド呼び出しだけに着目してテストする。
\r
602 ResourcePicture.any_instance.stub(:new_picture).with(any_args).and_return(@p)
\r
603 ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(true)
\r
605 it '新規実素材の取得を依頼している' do
\r
606 ResourcePicture.any_instance.should_receive(:new_picture).with(any_args).exactly(1)
\r
607 r = @rp.store @imager
\r
610 ResourcePicture.any_instance.should_receive(:save).with(any_args).exactly(1)
\r
611 r = @rp.store @imager
\r
613 it 'gif付き画像ファイルの作成・更新機能で画像を保存している' do
\r
614 ResourcePicture.any_instance.should_receive(:store_picture_with_gif).with(@imager).exactly(1)
\r
615 r = @rp.store @imager
\r
618 context 'つつがなく終わるとき' do
\r
620 #すべての処理を正常パターンで通過させ、保存機能をチェックする。
\r
621 ResourcePicture.any_instance.stub(:new_picture).with(any_args).and_return(@p)
\r
622 ResourcePicture.any_instance.stub(:store_picture_with_gif).with(@imager).and_return(true)
\r
625 r = @rp.store @imager
\r
628 it '実素材idから最新画像idを取得してセットしている' do
\r
629 r = @rp.store @imager
\r
630 @rp.picture_id.should eq @p.id
\r
634 r = @rp.store @imager
\r
635 }.should change ResourcePicture, :count
\r
638 #以下から例外ケース。処理先頭から失敗させていく
\r
639 context '画像オブジェクトの取得に失敗したとき' do
\r
644 r = @rp.store @imager
\r
648 r = @rp.store @imager
\r
649 @rp.should be_a_new ResourcePicture
\r
651 it '処理を中断してロールバックする' do
\r
653 r = @rp.store @imager
\r
654 }.should_not change Picture, :count
\r
657 context '新規実素材の取得に失敗したとき' do
\r
659 ResourcePicture.any_instance.stub(:new_picture).with(any_args).and_return(false)
\r
662 r = @rp.store @imager
\r
666 r = @rp.store @imager
\r
667 @rp.should be_a_new ResourcePicture
\r
669 it '処理を中断してロールバックする' do
\r
671 r = @rp.store @imager
\r
672 }.should_not change Picture, :count
\r
675 context '自身の保存に失敗したとき' do
\r
677 ResourcePicture.any_instance.stub(:new_picture).with(any_args).and_return(@p)
\r
678 ResourcePicture.any_instance.stub(:save).with(any_args).and_return(false)
\r
681 r = @rp.store @imager
\r
685 r = @rp.store @imager
\r
686 @rp.should be_a_new ResourcePicture
\r
688 it '処理を中断してロールバックする' do
\r
690 r = @rp.store @imager
\r
691 }.should_not change Picture, :count
\r
694 context 'gif付き画像ファイルの作成・更新機能に失敗したとき' do
\r
696 ResourcePicture.any_instance.stub(:new_picture).with(any_args).and_return(@p)
\r
697 ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(false)
\r
700 r = @rp.store @imager
\r
704 r = @rp.store @imager
\r
705 @rp.should be_a_new ResourcePicture
\r
707 it '処理を中断してロールバックする' do
\r
709 r = @rp.store @imager
\r
710 }.should_not change Picture, :count
\r
715 describe 'gif付き画像ファイルの作成・更新に於いて' do
\r
717 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
718 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
719 attr = {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => 'tester', :credit => '{}', :settings => {}.to_json.to_s}
\r
720 @rp = FactoryGirl.build :resource_picture, attr
\r
721 @imager = ImagerTest.load "abc\ndef\nghi"
723 context '事前チェック' do
\r
725 #すべての処理が正常パターンで通過すれば、一番深い分岐まで通る。
\r
726 #それで外部のメソッド呼び出しだけに着目してテストする。
\r
727 ResourcePicture.any_instance.stub(:store_picture).with(any_args).and_return(true)
\r
728 ResourcePicture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
\r
729 ResourcePicture.any_instance.stub(:filename).with(any_args).and_return('1.png')
\r
730 ResourcePicture.any_instance.stub(:gifname).with(any_args).and_return('1.gif')
\r
732 it '画像ファイルの作成・更新機能で画像を保存している' do
\r
733 #二回目の保存はgif変換の結果を渡す。
\r
734 ResourcePicture.any_instance.should_receive(:store_picture).with(any_args).exactly(2)
\r
735 r = @rp.store_picture_with_gif @imager
\r
737 it '自身にフォーマット変換対象かを問い合わせている' do
\r
738 ResourcePicture.any_instance.should_receive(:to_gif?).with(any_args).exactly(1)
\r
739 r = @rp.store_picture_with_gif @imager
\r
741 it '画像ライブラリにGifフォーマット変換を依頼している' do
\r
742 ImagerTest.any_instance.should_receive(:to_gif).with(any_args).exactly(1)
\r
743 r = @rp.store_picture_with_gif @imager
\r
746 context 'つつがなく終わるとき' do
\r
748 #すべての処理を正常パターンで通過させ、保存機能をチェックする。
\r
749 ResourcePicture.any_instance.stub(:store_picture).with(any_args).and_return(true)
\r
750 ResourcePicture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
\r
751 ResourcePicture.any_instance.stub(:filename).with(any_args).and_return('1.png')
\r
752 ResourcePicture.any_instance.stub(:gifname).with(any_args).and_return('1.gif')
\r
755 r = @rp.store_picture_with_gif @imager
\r
759 context 'gif変換なしで、つつがなく終わるとき' do
\r
761 #すべての処理を正常パターンで通過させ、保存機能をチェックする。
\r
762 ResourcePicture.any_instance.stub(:store_picture).with(any_args).and_return(true)
\r
763 ResourcePicture.any_instance.stub(:to_gif?).with(any_args).and_return(false)
\r
764 ResourcePicture.any_instance.stub(:filename).with(any_args).and_return('1.png')
\r
765 ResourcePicture.any_instance.stub(:gifname).with(any_args).and_return('1.gif')
\r
768 r = @rp.store_picture_with_gif @imager
\r
771 it 'gif保存は呼ばれていない' do
\r
772 ResourcePicture.any_instance.should_receive(:store_picture).with(any_args).exactly(1)
\r
773 r = @rp.store_picture_with_gif @imager
\r
776 #以下から例外ケース。処理先頭から失敗させていく
\r
777 context '画像の保存に失敗したとき' do
\r
779 ResourcePicture.any_instance.stub(:store_picture).with(any_args).and_return(false)
\r
782 r = @rp.store_picture_with_gif @imager
\r
785 it 'gif変換判定は呼ばれていない' do
\r
786 ResourcePicture.any_instance.should_not_receive(:to_gif?).with(any_args)
\r
787 r = @rp.store_picture_with_gif @imager
\r
790 context 'gif変換に失敗したとき' do
\r
792 ResourcePicture.any_instance.stub(:store_picture).with(any_args).and_return(true)
\r
793 ResourcePicture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
\r
794 ImagerTest.any_instance.stub(:to_gif).with(any_args).and_return(false)
\r
797 r = @rp.store_picture_with_gif @imager
\r
800 it 'gif画像の保存は呼ばれていない' do
\r
801 #本画像の保存があるので、一度は呼ばれる
\r
802 ResourcePicture.any_instance.should_receive(:store_picture).with(any_args).exactly(1)
\r
803 r = @rp.store_picture_with_gif @imager
\r
806 context 'gif画像の保存に失敗したとき' do
\r
808 ResourcePicture.any_instance.stub(:store_picture).with(@imager, '1.png').and_return(true)
\r
809 ResourcePicture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
\r
810 @gifimager = @imager.to_gif
\r
811 ImagerTest.any_instance.stub(:to_gif).with(any_args).and_return(@gifimager)
\r
812 ResourcePicture.any_instance.stub(:store_picture).with(@gifimager, '1.gif').and_return(false)
\r
813 ResourcePicture.any_instance.stub(:filename).with(any_args).and_return('1.png')
\r
814 ResourcePicture.any_instance.stub(:gifname).with(any_args).and_return('1.gif')
\r
817 r = @rp.store_picture_with_gif @imager
\r
823 describe '画像ファイルの作成・更新に於いて' do
\r
824 #PictureIo経由で画像を保存するための機能。ファイル名に自身のidを使うので事前に自身の保存が必要。
\r
826 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
827 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
828 attr = {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => 'tester', :credit => '{}', :settings => {}.to_json.to_s}
\r
829 @rp = FactoryGirl.build :resource_picture, attr
\r
831 @imager = ImagerTest.load "abc\ndef\nghi"
833 context '事前チェック' do
\r
835 #すべての処理を正常パターンで通過させ、保存機能をチェックする。
\r
836 PictureIO.resource_picture_io.stub(:put).with(any_args).and_return(true)
\r
837 ResourcePicture.any_instance.stub(:flag_thumbnail).with(any_args).and_return(1)
\r
839 it 'サムネイル化が1回呼ばれる' do
\r
840 ImagerTest.any_instance.should_receive(:to_thumbnail).with(any_args).exactly(1)
\r
841 r = @rp.store_picture(@imager, '1.png')
\r
843 it '画像ファイルの保存が2回呼ばれる' do
\r
844 PictureIO.resource_picture_io.should_receive(:put).with(any_args).exactly(2)
\r
845 r = @rp.store_picture(@imager, '1.gif')
\r
847 it '画像ファイルのベースへのサムネイル保存が1回呼ばれる' do
\r
848 PictureIO.resource_picture_io.should_receive(:put).with(@imager.to_thumbnail.binary, '1.gif').exactly(1)
\r
849 r = @rp.store_picture(@imager, '1.gif')
\r
851 it '画像ファイルのfullへの保存が1回呼ばれる' do
\r
852 PictureIO.resource_picture_io.should_receive(:put).with(@imager.binary, '1.gif', 'full').exactly(1)
\r
853 r = @rp.store_picture(@imager, '1.gif')
\r
856 context 'つつがなく終わるとき' do
\r
858 #すべての処理を正常パターンで通過させ、保存機能をチェックする。
\r
859 PictureIO.resource_picture_io.stub(:put).with(any_args).and_return(true)
\r
860 ResourcePicture.any_instance.stub(:flag_thumbnail).with(any_args).and_return(1)
\r
863 r = @rp.store_picture(@imager, '1.gif')
\r
867 #以下から例外ケース。処理先頭から失敗させていく
\r
868 context 'サムネイル化に失敗したとき' do
\r
870 ResourcePicture.any_instance.stub(:flag_thumbnail).with(any_args).and_return(1)
\r
871 ImagerTest.any_instance.stub(:to_thumbnail).with(any_args).and_return(false)
\r
874 r = @rp.store_picture(@imager, '1.gif')
\r
877 it '画像ファイルの保存は呼ばれていない' do
\r
878 PictureIO.resource_picture_io.should_not_receive(:put).with(any_args)
\r
879 r = @rp.store_picture(@imager, '1.gif')
\r
882 context 'サムネイル画像の保存に失敗したとき' do
\r
884 ResourcePicture.any_instance.stub(:flag_thumbnail).with(any_args).and_return(1)
\r
885 @tmbimager = @imager.to_thumbnail
\r
886 ImagerTest.any_instance.stub(:to_thumbnail).with(any_args).and_return(@tmbimager)
\r
887 PictureIO.resource_picture_io.stub(:put).with(@tmbimager.binary, '1.gif').and_return(false)
\r
890 r = @rp.store_picture(@imager, '1.gif')
\r
893 it '画像ファイルの保存は呼ばれていない' do
\r
894 PictureIO.resource_picture_io.should_receive(:put).with(any_args).exactly(1)
\r
895 r = @rp.store_picture(@imager, '1.gif')
\r
898 context '画像の保存に失敗したとき' do
\r
900 ResourcePicture.any_instance.stub(:flag_thumbnail).with(any_args).and_return(1)
\r
901 @tmbimager = @imager.to_thumbnail
\r
902 ImagerTest.any_instance.stub(:to_thumbnail).with(any_args).and_return(@tmbimager)
\r
903 PictureIO.resource_picture_io.stub(:put).with(@tmbimager.binary, '1.gif').and_return(true)
\r
904 PictureIO.resource_picture_io.stub(:put).with(@imager.binary, '1.gif', 'full').and_return(false)
\r
907 r = @rp.store_picture(@imager, '1.gif')
\r
914 describe 'クレジットデータに於いて' do
\r
916 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
917 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
918 attr = {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => 'tester', :credit => '{"system_picture_id": 2}', :settings => {}.to_json.to_s}
\r
919 @rp = FactoryGirl.build :resource_picture, attr
\r
921 it 'system_picture_idが入っている' do
\r
922 res = @rp.credit_data
\r
923 res["system_picture_id"].should eq 2
\r