1 # -*- encoding: utf-8 -*-
\r
4 describe ResourcePicture do
7 @user = Factory( :user_yas)
9 @artist = Factory :artist_yas, :author_id => @author.id
\r
10 @other_user = Factory( :user_yas)
11 @other_author = @other_user.author
12 @other_artist = Factory :artist_yas, :author_id => @other_author.id
13 @sp = Factory :system_picture
14 @lg = Factory :license_group
15 @license = Factory :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
16 @original_picture = Factory :original_picture, :artist_id => @artist.id
\r
18 class Mgk ; class Image ; end ; end
19 Mgk::Image.stub(:from_blob).with(any_args).and_return([Mgk.new])
20 Mgk.any_instance.stub(:format).with(any_args).and_return('png')
21 Mgk.any_instance.stub(:format=).with(any_args)
22 Mgk.any_instance.stub(:rows).with(any_args).and_return(200)
23 Mgk.any_instance.stub(:columns).with(any_args).and_return(100)
24 Mgk.any_instance.stub(:filesize).with(any_args).and_return(20000)
25 Mgk.any_instance.stub(:to_blob).with(any_args).and_return('data')
26 #原画ファイル削除だけは必ず成功するものとしておく
27 PictureIO::LocalPicture.any_instance.stub(:delete).with(any_args).and_return(true)
28 Picture.any_instance.stub(:subdirs).with(any_args).and_return(['', 'v', 'h', 'vh'])
\r
29 Picture.any_instance.stub(:h).with(any_args).and_return('data')
30 Picture.any_instance.stub(:v).with(any_args).and_return('data')
31 Picture.any_instance.stub(:vh).with(any_args).and_return('data')
36 @p = Factory :picture, :original_picture_id => @original_picture.id, :license_id => @license.id, :artist_id => @artist.id
37 @rp = Factory.build :resource_picture, :artist_id => @artist.id, :original_picture_id => @original_picture.id, :license_id => @license.id, :picture_id => @p.id
40 it 'オーソドックスなデータなら通る' do
44 context 'extを検証するとき' do
51 @rp.should_not be_valid
55 @rp.should_not be_valid
57 it 'png,gif,jpeg以外なら失敗する' do
59 @rp.should_not be_valid
62 context 'widthを検証するとき' do
69 @rp.should_not be_valid
73 @rp.should_not be_valid
77 @rp.should_not be_valid
81 @rp.should_not be_valid
84 context 'heightを検証するとき' do
91 @rp.should_not be_valid
95 @rp.should_not be_valid
99 @rp.should_not be_valid
103 @rp.should_not be_valid
106 context 'filesizeを検証するとき' do
113 @rp.should_not be_valid
117 @rp.should_not be_valid
121 @rp.should_not be_valid
124 @rp.filesize = 2000000+1
125 @rp.should_not be_valid
128 context 'artist_idを検証するとき' do
130 @rp.artist_id = @artist.id
135 @rp.should_not be_valid
139 @rp.should_not be_valid
141 it '存在する絵師でなければ失敗する' do
143 @rp.should_not be_valid
146 context 'license_idを検証するとき' do
148 @rp.license_id = @license.id
153 @rp.should_not be_valid
157 @rp.should_not be_valid
159 it '存在する絵師でなければ失敗する' do
161 @rp.should_not be_valid
164 context 'original_picture_idを検証するとき' do
166 @rp.original_picture_id = @original_picture.id
170 @rp.original_picture_id = nil
171 @rp.should_not be_valid
174 @rp.original_picture_id = 'a'
175 @rp.should_not be_valid
177 it '存在する原画でなければ失敗する' do
178 @rp.original_picture_id = 0
179 @rp.should_not be_valid
182 context 'artist_nameを検証するとき' do
184 @rp.artist_name = 'a'
188 @rp.artist_name = nil
189 @rp.should_not be_valid
192 context 'creditを検証するとき' do
198 context 'settingsを検証するとき' do
204 context 'picture_idを検証するとき' do
206 @rp.picture_id = @p.id
211 @rp.should_not be_valid
215 @rp.should_not be_valid
217 it '存在する実素材でなければ失敗する' do
219 @rp.should_not be_valid
224 describe 'データ補充に於いて' do
230 describe '単体取得に於いて' do
232 @op = Factory :original_picture, :artist_id => @artist.id
233 @p = Factory :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
234 @rp = Factory :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
237 pic = ResourcePicture.show @rp.id
240 context '関連テーブルオプションがないとき' do
241 it 'ライセンスと絵師を含んでいる' do
242 r = ResourcePicture.show_include_opt
243 r.should eq [:license, :artist]
246 context '関連テーブルオプションで原画を含ませたとき' do
247 it 'ライセンスと絵師と原画データを含んでいる' do
248 r = ResourcePicture.show_include_opt(:include => :original_picture)
249 r.should eq [:license, :artist, :original_picture]
252 context '存在しない素材を開こうとしたとき' do
253 it '404RecordNotFound例外を返す' do
255 pic = ResourcePicture.show 0
256 }.should raise_error(ActiveRecord::RecordNotFound)
260 describe 'json単体出力オプションに於いて' do
261 it 'includeキーがライセンスと絵師を含んでいる' do
262 r = ResourcePicture.show_json_include_opt
263 r[:include].should eq [:license, :artist]
266 describe '一覧取得に於いて' do
268 @op = Factory :original_picture, :artist_id => @artist.id
269 @p = Factory :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
270 @rp = Factory :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
272 context 'page補正について' do
273 it '文字列から数値に変換される' do
274 ResourcePicture.page('8').should eq 8
277 ResourcePicture.page().should eq 1
280 ResourcePicture.page('0').should eq 1
283 context 'page_size補正について' do
284 it '文字列から数値に変換される' do
285 ResourcePicture.page_size('7').should eq 7
287 it 'nilの場合はResourcePicture.default_page_sizeになる' do
288 ResourcePicture.page_size().should eq ResourcePicture.default_page_size
290 it '0以下の場合はResourcePicture.default_page_sizeになる' do
291 ResourcePicture.page_size('0').should eq ResourcePicture.default_page_size
293 it 'ResourcePicture.max_page_sizeを超えた場合はResourcePicture.max_page_sizeになる' do
294 ResourcePicture.page_size('1000').should eq ResourcePicture.max_page_size
298 pic = ResourcePicture.list
302 nop = Factory :original_picture, :artist_id => @artist.id
303 nrp = Factory :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop.id, :picture_id => @p.id, :updated_at => Time.now + 100
304 pic = ResourcePicture.list
305 pic.should eq [nrp, @rp]
307 context 'DBに5件あって1ページの件数を2件に変えたとして' do
309 nop2 = Factory :original_picture, :artist_id => @artist.id
310 @nrp2 = Factory :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop2.id, :picture_id => @p.id, :updated_at => Time.now + 100
311 nop3 = Factory :original_picture, :artist_id => @artist.id
312 @nrp3 = Factory :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop3.id, :picture_id => @p.id, :updated_at => Time.now + 200
313 nop4 = Factory :original_picture, :artist_id => @artist.id
314 @nrp4 = Factory :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop4.id, :picture_id => @p.id, :updated_at => Time.now + 300
315 nop5 = Factory :original_picture, :artist_id => @artist.id
316 @nrp5 = Factory :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop5.id, :picture_id => @p.id, :updated_at => Time.now + 400
317 ResourcePicture.stub(:default_page_size).and_return(2)
320 pic = ResourcePicture.list
321 pic.should have(2).items
323 it 'page=1なら末尾2件を返す' do
325 pic = ResourcePicture.list({}, 1)
326 pic.should eq [@nrp5, @nrp4]
328 it 'page=2なら中間2件を返す' do
329 pic = ResourcePicture.list({}, 2)
330 pic.should eq [@nrp3, @nrp2]
332 it 'page=3なら先頭1件を返す' do
333 pic = ResourcePicture.list({}, 3)
338 describe 'json一覧出力オプションに於いて' do
339 it 'includeキーがライセンスと絵師を含んでいる' do
340 r = ResourcePicture.list_json_opt
341 r[:include].should eq [:license, :artist]
345 describe 'サイズの調整に於いて' do
349 it 'サイズに収まるときはそのまま使う' do
350 ResourcePicture.fix_size_both(64, 64, 64, 64).should eq [64, 64]
353 ResourcePicture.fix_size_both(64, 64, 32, 32).should eq [32, 32]
355 it '縦長のときは縦に合わせて縮小' do
356 ResourcePicture.fix_size_both(64, 64, 64, 128).should eq [32, 64]
358 it '横長のときは横に合わせて縮小' do
359 ResourcePicture.fix_size_both(64, 64, 128, 64).should eq [64, 32]
363 describe 'フォーマット変換対象判定に於いて' do
365 @rp = Factory.build :resource_picture,
\r
366 :artist_id => @artist.id, :license_id => @license.id
368 context '変換するケース' do
\r
369 it '画像フォーマットがpngかつライセンスの変換禁止フラグが無効のときTrue' do
\r
370 ResourcePicture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(0)
372 @rp.to_gif?.should be_true
375 context '変換しないケース' do
376 it '画像フォーマットがでない' do
\r
377 ResourcePicture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(0)
379 @rp.to_gif?.should be_false
382 ResourcePicture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(-1)
384 @rp.to_gif?.should be_false
389 describe 'Gifフォーマット変換に於いて' do
391 Magick::Image.stub(:from_blob).with(any_args).and_return([Mgk.new])
393 context 'つつがなく終わるとき' do
395 mgk = ResourcePicture.png_to_gif('mgkbin')
\r
396 mgk.is_a?(Mgk).should be_true
398 it 'Mgkオブジェクトはgif変換されている' do
\r
399 #スタブばかりで変換できないので代入されているかでチェックする
400 Mgk.any_instance.should_receive(:format=).with('gif').exactly(1)
401 ResourcePicture.png_to_gif('mgkbin')
\r
404 context 'RMagick変換が失敗したとき' do
406 Magick::Image.should_receive(:from_blob).with(any_args).and_raise('StandardError')
409 res = ResourcePicture.png_to_gif('mgkbin')
\r
410 res.should be_false
\r
415 describe '原画からのコピーデータセットに於いて' do
417 @op = Factory :original_picture, :ext => 'jpeg', :width => 264, :height => 265, :filesize => 266,
\r
418 :artist_id => @artist.id
419 @rp = Factory.build :resource_picture,
\r
420 :artist_id => @artist.id
422 it '原画オブジェクトから属性を取り出して対象素材にセットしている' do
423 res = @rp.copy_data(@op)
\r
424 @rp.ext.should eq 'jpeg'
\r
425 @rp.width.should eq 264
\r
426 @rp.height.should eq 265
\r
427 @rp.filesize.should eq 266
\r
428 @rp.artist_id.should eq @artist.id
\r
432 describe 'RMagick変換に於いて' do
434 @op = Factory :original_picture, :artist_id => @artist.id
435 @p = Factory :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
436 attr = {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => 'tester', :credit => '{}', :settings => {}.to_json.to_s}
\r
437 @rp = Factory.build :resource_picture, attr
439 context 'つつがなく終わるとき' do
440 it '画像データをオブジェクト化している' do
441 Magick::Image.stub(:from_blob).and_return(['mgkobj'])
442 @rp.data_to_mgk('mgkbin').should eq 'mgkobj'
447 Magick::Image.should_receive(:from_blob).with(any_args).and_raise('StandardError')
448 @rp.data_to_mgk('mgkbin').should be_false
450 it '全体エラーがセットされている' do
451 Magick::Image.should_receive(:from_blob).with(any_args).and_raise('StandardError')
453 @rp.data_to_mgk('mgkbin')
454 }.should change(@rp.errors[:base], :count)
458 describe '画像オブジェクトの取得に於いて' do
460 @op = Factory :original_picture, :artist_id => @artist.id
461 @p = Factory :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
462 attr = {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => 'tester', :credit => '{}', :settings => {}.to_json.to_s}
\r
463 @rp = Factory.build :resource_picture, attr
467 OriginalPicture.any_instance.stub(:restore).with(any_args).and_return('data')
\r
468 ResourcePicture.any_instance.stub(:data_to_mgk).with(any_args).and_return(Mgk.new)
470 it '原画から画像データを取得している' do
471 OriginalPicture.any_instance.should_receive(:restore).with(any_args).exactly(1)
474 it '素材に原画データのRMagick変換を依頼している' do
475 ResourcePicture.any_instance.should_receive(:data_to_mgk).with(any_args).exactly(1)
479 context 'つつがなく終わるとき' do
481 #素材に原画データのRMagick変換を依頼し、画像オブジェクトを返す。
\r
484 OriginalPicture.any_instance.stub(:restore).with(any_args).and_return('data')
\r
485 ResourcePicture.any_instance.stub(:data_to_mgk).with(any_args).and_return(@mgk)
494 describe '新規実素材の取得に於いて' do
496 @op = Factory :original_picture, :artist_id => @artist.id
497 @p = Factory :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
498 attr = {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => 'tester',
\r
499 :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
\r
500 @rp = Factory.build :resource_picture, attr
505 Picture.any_instance.stub(:copy_data).with(any_args).and_return(true)
\r
506 Picture.any_instance.stub(:store).with(any_args).and_return(true)
\r
508 it '実素材に原画からのコピーデータを依頼している' do
509 Picture.any_instance.should_receive(:copy_data).with(any_args).exactly(1)
510 res = @rp.new_picture @mgk
\r
513 Picture.any_instance.should_receive(:store).with(any_args).exactly(1)
514 res = @rp.new_picture @mgk
\r
517 context 'つつがなく終わるとき' do
518 it '実素材に原画からのコピーデータをセットしている' do
519 res = @rp.new_picture @mgk
\r
520 @rp.ext.should eq @op.ext
\r
521 @rp.width.should eq @op.width
\r
522 @rp.height.should eq @op.height
\r
523 @rp.filesize.should eq @op.filesize
\r
524 @rp.artist_id.should eq @op.artist_id
\r
525 @rp.original_picture_id.should eq @op.id
\r
528 res = @rp.new_picture @mgk
\r
529 res.is_a?(Picture).should be_true
\r
534 describe '作成・更新に於いて' do
536 @op = Factory :original_picture, :artist_id => @artist.id
537 @p = Factory :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
538 attr = {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => 'tester', :credit => '{}', :settings => {}.to_json.to_s}
\r
539 @rp = Factory.build :resource_picture, attr
543 #すべての処理が正常パターンで通過すれば、一番深い分岐まで通る。
544 #それで外部のメソッド呼び出しだけに着目してテストする。
545 @mgk = Mgk.new #一回目の本画像保存は与えたオブジェクトを使って保存する。
546 ResourcePicture.any_instance.stub(:op_mgk).with(any_args).and_return(@mgk)
\r
547 ResourcePicture.any_instance.stub(:new_picture).with(any_args).and_return(@p)
\r
548 ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(true)
\r
550 it '素材に原画からのコピーデータをセットしている' do
551 ResourcePicture.any_instance.stub(:copy_data).with(any_args).and_return(true)
\r
552 ResourcePicture.any_instance.should_receive(:copy_data).with(any_args).exactly(1)
555 it '画像オブジェクトの取得を依頼している' do
556 ResourcePicture.any_instance.should_receive(:op_mgk).with(any_args).exactly(1)
559 it '新規実素材の取得を依頼している' do
560 ResourcePicture.any_instance.should_receive(:new_picture).with(any_args).exactly(1)
564 ResourcePicture.any_instance.should_receive(:save).with(any_args).exactly(1)
567 it '画像ファイルの作成・更新機能で画像を保存している' do
\r
568 ResourcePicture.any_instance.should_receive(:store_picture_with_gif).with(@mgk).exactly(1)
572 context 'つつがなく終わるとき' do
574 #すべての処理を正常パターンで通過させ、保存機能をチェックする。
575 @mgk = Mgk.new #一回目の本画像保存は与えたオブジェクトを使って保存する。
576 ResourcePicture.any_instance.stub(:op_mgk).with(any_args).and_return(@mgk)
\r
577 ResourcePicture.any_instance.stub(:new_picture).with(any_args).and_return(@p)
\r
578 ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(true)
\r
584 it '実素材idをセットしている' do
586 @rp.picture_id.should_not be_nil
\r
588 it '実素材idから最新画像idを取得してセットしている' do
590 @rp.picture_id.should eq @p.id
\r
595 }.should change ResourcePicture, :count
\r
598 #以下から例外ケース。処理先頭から失敗させていく
599 context '画像オブジェクトの取得に失敗したとき' do
601 ResourcePicture.any_instance.stub(:op_mgk).with(any_args).and_return(false)
\r
605 res.should be_false
\r
609 @rp.should be_a_new ResourcePicture
\r
612 context '新規実素材の取得に失敗したとき' do
614 @mgk = Mgk.new #一回目の本画像保存は与えたオブジェクトを使って保存する。
615 ResourcePicture.any_instance.stub(:op_mgk).with(any_args).and_return(@mgk)
\r
616 ResourcePicture.any_instance.stub(:new_picture).with(any_args).and_return(@p)
\r
617 Picture.any_instance.stub(:valid?).with(any_args).and_return(false)
\r
621 res.should be_false
\r
625 @rp.should be_a_new ResourcePicture
\r
628 context '自身の保存に失敗したとき' do
630 @mgk = Mgk.new #一回目の本画像保存は与えたオブジェクトを使って保存する。
631 ResourcePicture.any_instance.stub(:op_mgk).with(any_args).and_return(@mgk)
\r
632 ResourcePicture.any_instance.stub(:new_picture).with(any_args).and_return(@p)
\r
633 ResourcePicture.any_instance.stub(:save).with(any_args).and_return(false)
\r
637 res.should be_false
\r
641 @rp.should be_a_new ResourcePicture
\r
643 it '処理を中断してロールバックする' do
646 }.should_not change Picture, :count
\r
651 describe '画像ファイルの作成・更新に於いて' do
\r
653 @op = Factory :original_picture, :artist_id => @artist.id
654 @p = Factory :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
655 attr = {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => 'tester', :credit => '{}', :settings => {}.to_json.to_s}
\r
656 @rp = Factory.build :resource_picture, attr
660 #すべての処理が正常パターンで通過すれば、一番深い分岐まで通る。
661 #それで外部のメソッド呼び出しだけに着目してテストする。
662 @mgk = Mgk.new #一回目の本画像保存は与えたオブジェクトを使って保存する。
663 ResourcePicture.any_instance.stub(:store_picture).with(any_args).and_return(true)
\r
664 ResourcePicture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
\r
665 class GifMgk < Mgk ; end #store_pictureは二回呼び出される。区別をつけるために
\r
666 @gifmgk = GifMgk.new #パラメータを二種類用意する。
\r
667 ResourcePicture.stub(:png_to_gif).with(any_args).and_return(@gifmgk)
669 it '画像ファイルの作成・更新機能で画像を保存している' do
\r
670 ResourcePicture.any_instance.should_receive(:store_picture).with(@mgk).exactly(1)
671 res = @rp.store_picture_with_gif @mgk
\r
673 it '自身にフォーマット変換対象かを問い合わせている' do
674 ResourcePicture.any_instance.should_receive(:to_gif?).with(any_args).exactly(1)
675 res = @rp.store_picture_with_gif @mgk
\r
677 it '自身にGifフォーマット変換を依頼している' do
678 ResourcePicture.should_receive(:png_to_gif).with(any_args).exactly(1)
679 res = @rp.store_picture_with_gif @mgk
\r
681 it '画像ファイルの作成・更新機能でgif画像を保存している' do
\r
683 ResourcePicture.any_instance.should_receive(:store_picture).with(@gifmgk).exactly(1)
684 res = @rp.store_picture_with_gif @mgk
\r
687 context 'つつがなく終わるとき' do
689 #すべての処理を正常パターンで通過させ、保存機能をチェックする。
690 @mgk = Mgk.new #一回目の本画像保存は与えたオブジェクトを使って保存する。
691 ResourcePicture.any_instance.stub(:store_picture).with(any_args).and_return(true)
\r
692 ResourcePicture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
\r
693 class GifMgk < Mgk ; end #store_pictureは二回呼び出される。区別をつけるために
\r
694 @gifmgk = GifMgk.new #パラメータを二種類用意する。
\r
695 ResourcePicture.stub(:png_to_gif).with(any_args).and_return(@gifmgk)
698 res = @rp.store_picture_with_gif @mgk
\r
702 context 'gif変換なしで、つつがなく終わるとき' do
704 #すべての処理を正常パターンで通過させ、保存機能をチェックする。
705 @mgk = Mgk.new #一回目の本画像保存は与えたオブジェクトを使って保存する。
706 ResourcePicture.any_instance.stub(:store_picture).with(any_args).and_return(true)
\r
707 ResourcePicture.any_instance.stub(:to_gif?).with(any_args).and_return(false)
\r
710 res = @rp.store_picture_with_gif @mgk
\r
713 it 'gif保存は呼ばれていない' do
\r
714 ResourcePicture.any_instance.should_receive(:store_picture).with(any_args).exactly(1)
715 res = @rp.store_picture_with_gif @mgk
\r
718 #以下から例外ケース。処理先頭から失敗させていく
719 context '画像の保存に失敗したとき' do
721 @mgk = Mgk.new #一回目の本画像保存は与えたオブジェクトを使って保存する。
722 ResourcePicture.any_instance.stub(:store_picture).with(any_args).and_return(false)
\r
725 res = @rp.store_picture_with_gif @mgk
\r
726 res.should be_false
\r
728 it 'gif変換判定は呼ばれていない' do
\r
729 ResourcePicture.any_instance.should_not_receive(:to_gif?).with(any_args)
730 res = @rp.store_picture_with_gif @mgk
\r
733 context 'gif変換に失敗したとき' do
735 @mgk = Mgk.new #一回目の本画像保存は与えたオブジェクトを使って保存する。
736 ResourcePicture.any_instance.stub(:store_picture).with(any_args).and_return(true)
\r
737 ResourcePicture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
\r
738 ResourcePicture.stub(:png_to_gif).with(any_args).and_return(false)
741 res = @rp.store_picture_with_gif @mgk
\r
742 res.should be_false
\r
744 it 'gif画像の保存は呼ばれていない' do
\r
745 #本画像の保存があるので、一度は呼ばれる
\r
746 ResourcePicture.any_instance.should_receive(:store_picture).with(any_args).exactly(1)
747 res = @rp.store_picture_with_gif @mgk
\r
750 context 'gif画像の保存に失敗したとき' do
753 ResourcePicture.any_instance.stub(:store_picture).with(@mgk).and_return(true)
\r
754 ResourcePicture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
\r
755 class GifMgk < Mgk ; end #store_pictureは二回呼び出される。区別をつけるために
\r
756 @gifmgk = GifMgk.new #パラメータを二種類用意する。
\r
757 ResourcePicture.stub(:png_to_gif).with(any_args).and_return(@gifmgk)
758 ResourcePicture.any_instance.stub(:store_picture).with(@gifmgk).and_return(false)
\r
761 res = @rp.store_picture_with_gif @mgk
\r
762 res.should be_false
\r
767 describe '画像ファイルの作成・更新に於いて' do
\r
768 #PictureIo経由で画像を保存するための機能。ファイル名に自身のidを使うので事前に自身の保存が必要。
\r
770 @op = Factory :original_picture, :artist_id => @artist.id
771 @p = Factory :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
772 attr = {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => 'tester', :credit => '{}', :settings => {}.to_json.to_s}
\r
773 @rp = Factory.build :resource_picture, attr
\r
778 #すべての処理を正常パターンで通過させ、保存機能をチェックする。
779 PictureIO.resource_picture_io.stub(:put).with(any_args).and_return(true)
780 ResourcePicture.any_instance.stub(:flag_thumbnail).with(any_args).and_return(1)
781 ResourcePicture.any_instance.stub(:thumbnail).with(any_args).and_return('tmbdata')
783 it 'サムネイル化が1回呼ばれる' do
\r
784 ResourcePicture.any_instance.should_receive(:thumbnail).with(any_args).exactly(1)
785 res = @rp.store_picture(Mgk.new)
\r
787 it '画像ファイルの保存が2回呼ばれる' do
\r
788 PictureIO.resource_picture_io.should_receive(:put).with(any_args).exactly(2)
789 res = @rp.store_picture(Mgk.new)
\r
791 it '画像ファイルのベースへのサムネイル保存が1回呼ばれる' do
\r
792 PictureIO.resource_picture_io.should_receive(:put).with('tmbdata', @rp.filename).exactly(1)
793 res = @rp.store_picture(Mgk.new)
\r
795 it '画像ファイルのfullへの保存が1回呼ばれる' do
\r
796 PictureIO.resource_picture_io.should_receive(:put).with('data', @rp.filename, 'full').exactly(1)
797 res = @rp.store_picture(Mgk.new)
\r
800 context 'つつがなく終わるとき' do
802 #すべての処理を正常パターンで通過させ、保存機能をチェックする。
\r
803 PictureIO.resource_picture_io.stub(:put).with(any_args).and_return(true)
804 ResourcePicture.any_instance.stub(:flag_thumbnail).with(any_args).and_return(1)
807 res = @rp.store_picture(Mgk.new)
\r
813 ResourcePicture.any_instance.stub(:flag_thumbnail).with(any_args).and_return(1)
814 PictureIO.resource_picture_io.stub(:put).with(any_args).and_return(false)
817 res = @rp.store_picture(Mgk.new)
\r
818 res.should be_false
\r
824 describe 'サムネイル変換に於いて' do
825 #サムネイル化した画像データを返すが、スタブをおくので、リサイズと画像データ化を試みるかをチェックする
827 ResourcePicture.stub(:resize).with(any_args).and_return(Mgk.new)
828 @op = Factory :original_picture, :artist_id => @artist.id
829 @p = Factory :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
830 attr = {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => 'tester', :credit => '{}', :settings => {}.to_json.to_s}
\r
831 @rp = Factory.build :resource_picture, attr
\r
833 it 'サムネイルサイズに縮小した画像データを返す' do
\r
834 ResourcePicture.should_receive(:resize).with(any_args).exactly(1)
835 @rp.thumbnail(Mgk.new)
\r
839 @rp.thumbnail(Mgk.new).should eq 'data'
\r