1 # -*- encoding: utf-8 -*-
\r
3 require 'spec_helper'
\r
5 describe ResourcePicture do
\r
7 SpeechBalloonTemplate.delete_all
\r
8 @admin = FactoryGirl.create :admin
\r
9 @user = FactoryGirl.create( :user_yas)
\r
10 @author = FactoryGirl.create :author, :user_id => @user.id
\r
11 @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
\r
12 @other_user = FactoryGirl.create( :user_yas)
\r
13 @other_author = FactoryGirl.create :author, :user_id => @other_user.id
\r
14 @other_artist = FactoryGirl.create :artist_yas, :author_id => @other_author.id
\r
15 @sp = FactoryGirl.create :system_picture
\r
16 @lg = FactoryGirl.create :license_group
\r
17 @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
\r
18 @original_picture = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
20 #原画ファイル削除だけは必ず成功するものとしておく
\r
21 PictureIO::LocalPicture.any_instance.stub(:delete).with(any_args).and_return(true)
\r
22 Picture.any_instance.stub(:subdirs).with(any_args).and_return(['', 'v', 'h', 'vh'])
\r
23 Picture.any_instance.stub(:h).with(any_args).and_return('data')
\r
24 Picture.any_instance.stub(:v).with(any_args).and_return('data')
\r
25 Picture.any_instance.stub(:vh).with(any_args).and_return('data')
\r
28 describe '検証に於いて' do
\r
30 @p = FactoryGirl.create :picture, :original_picture_id => @original_picture.id, :license_id => @license.id, :artist_id => @artist.id
\r
31 @rp = FactoryGirl.build :resource_picture, :artist_id => @artist.id, :original_picture_id => @original_picture.id, :license_id => @license.id, :picture_id => @p.id
\r
34 context 'オーソドックスなデータのとき' do
\r
36 @rp.ext = 'png' #リストにない拡張子は通らないし
\r
41 @rp.classname = 'a'*1
\r
48 @rp.filesize = 2000000
\r
50 @rp.classname = 'a'*50
\r
55 context 'extを検証するとき' do
\r
58 @rp.should_not be_valid
\r
62 @rp.should_not be_valid
\r
64 it 'png,gif,jpeg以外なら失敗する' do
\r
66 @rp.should_not be_valid
\r
69 context 'widthを検証するとき' do
\r
72 @rp.should_not be_valid
\r
76 @rp.should_not be_valid
\r
80 @rp.should_not be_valid
\r
84 @rp.should_not be_valid
\r
87 context 'heightを検証するとき' do
\r
90 @rp.should_not be_valid
\r
94 @rp.should_not be_valid
\r
98 @rp.should_not be_valid
\r
102 @rp.should_not be_valid
\r
105 context 'filesizeを検証するとき' do
\r
108 @rp.should_not be_valid
\r
110 it '数値でなければ失敗する' do
\r
112 @rp.should_not be_valid
\r
115 @rp.filesize = '-1'
\r
116 @rp.should_not be_valid
\r
118 it '2MB以上なら失敗する' do
\r
119 @rp.filesize = 2000000+1
\r
120 @rp.should_not be_valid
\r
123 context 'artist_idを検証するとき' do
\r
125 @rp.artist_id = nil
\r
126 @rp.should_not be_valid
\r
128 it '数値でなければ失敗する' do
\r
129 @rp.artist_id = 'a'
\r
130 @rp.should_not be_valid
\r
132 it '存在する絵師でなければ失敗する' do
\r
134 @rp.should_not be_valid
\r
137 context 'md5を検証するとき' do
\r
140 @rp.should_not be_valid
\r
144 @rp.should_not be_valid
\r
146 it '32文字以上なら失敗する' do
\r
148 @rp.should_not be_valid
\r
151 context 'license_idを検証するとき' do
\r
153 @rp.license_id = nil
\r
154 @rp.should_not be_valid
\r
156 it '数値でなければ失敗する' do
\r
157 @rp.license_id = 'a'
\r
158 @rp.should_not be_valid
\r
160 it '存在する絵師でなければ失敗する' do
\r
162 @rp.should_not be_valid
\r
165 context 'original_picture_idを検証するとき' do
\r
167 @rp.original_picture_id = nil
\r
168 @rp.should_not be_valid
\r
170 it '数値でなければ失敗する' do
\r
171 @rp.original_picture_id = 'a'
\r
172 @rp.should_not be_valid
\r
174 it '存在する原画でなければ失敗する' do
\r
175 @rp.original_picture_id = 0
\r
176 @rp.should_not be_valid
\r
179 context 'artist_nameを検証するとき' do
\r
181 @rp.artist_name = nil
\r
182 @rp.should_not be_valid
\r
185 context 'classnameを検証するとき' do
\r
188 @rp.should_not be_valid
\r
190 it '51文字以上なら失敗する' do
\r
191 @rp.classname = 'a'*51
\r
192 @rp.should_not be_valid
\r
195 context 'creditを検証するとき' do
\r
197 context 'settingsを検証するとき' do
\r
199 context 'picture_idを検証するとき' do
\r
201 @rp.picture_id = nil
\r
202 @rp.should_not be_valid
\r
204 it '数値でなければ失敗する' do
\r
205 @rp.picture_id = 'a'
\r
206 @rp.should_not be_valid
\r
208 it '存在する実素材でなければ失敗する' do
\r
210 @rp.should_not be_valid
\r
215 describe '文字コード検証に於いて' do
\r
217 @p = FactoryGirl.create :picture, :original_picture_id => @original_picture.id, :license_id => @license.id, :artist_id => @artist.id
\r
218 @rp = FactoryGirl.build :resource_picture, :artist_id => @artist.id, :original_picture_id => @original_picture.id, :license_id => @license.id, :picture_id => @p.id
\r
221 context 'artist_nameを検証するとき' do
\r
222 it 'Shift JISなら失敗する' do
\r
223 @rp.artist_name = "\x83G\x83r\x83]\x83D"
\r
226 }.should raise_error(Pettanr::BadRequest)
\r
230 context 'classnameを検証するとき' do
\r
231 it 'Shift JISなら失敗する' do
\r
232 @rp.classname = "\x83G\x83r\x83]\x83D"
\r
235 }.should raise_error(Pettanr::BadRequest)
\r
239 context 'creditを検証するとき' do
\r
240 it 'Shift JISなら失敗する' do
\r
241 @rp.credit = "\x83G\x83r\x83]\x83D"
\r
244 }.should raise_error(Pettanr::BadRequest)
\r
248 context 'settingsを検証するとき' do
\r
249 it 'Shift JISなら失敗する' do
\r
250 @rp.settings = "\x83G\x83r\x83]\x83D"
\r
253 }.should raise_error(Pettanr::BadRequest)
\r
259 describe 'デフォルト値補充に於いて' do
\r
261 @p = FactoryGirl.create :picture, :original_picture_id => @original_picture.id, :license_id => @license.id, :artist_id => @artist.id
\r
262 @rp = FactoryGirl.build :resource_picture, :artist_id => @artist.id, :original_picture_id => @original_picture.id, :license_id => @license.id, :picture_id => @p.id
\r
267 describe '上書き補充に於いて' do
\r
269 @original_picture.attributes = {:ext => 'gif', :width => 267, :height => 268, :filesize => 269,
\r
270 :artist_id => @artist.id }
\r
271 @rp = FactoryGirl.build :resource_picture, :original_picture_id => @original_picture.id
\r
273 it 'width, height, ext, filesize, md5, original_picture_id, artist_idが設定されている' do
\r
274 @rp.overwrite @original_picture
\r
275 @rp.width.should eq 267
\r
276 @rp.height.should eq 268
\r
277 @rp.ext.should eq 'gif'
\r
278 @rp.filesize.should eq 269
\r
279 @rp.md5.should eq @rp.md5
\r
280 @rp.original_picture_id.should eq @original_picture.id
\r
281 @rp.artist_id.should eq @artist.id
\r
285 describe '所持判定に於いて' do
\r
287 @p = FactoryGirl.create :picture, :original_picture_id => @original_picture.id, :license_id => @license.id, :artist_id => @artist.id
\r
288 @rp = FactoryGirl.build :resource_picture, :artist_id => @artist.id, :original_picture_id => @original_picture.id, :license_id => @license.id, :picture_id => @p.id
\r
290 context '事前チェックする' do
\r
291 it '自身にロールリストからの絵師取得を依頼している' do
\r
292 ResourcePicture.should_receive(:get_artist_from_roles).with(any_args).exactly(1)
\r
293 r = @rp.own?([@author])
\r
296 context 'ロール内絵師が取得できるとき' do
\r
299 it 'ロール内絵師のidが自身の絵師idと一致するなら許可する' do
\r
300 ResourcePicture.stub(:get_artist_from_roles).with(any_args).and_return(@artist)
\r
301 r = @rp.own?([@author])
\r
304 it 'ロール内絵師のidが自身の絵師idと一致しないならno' do
\r
305 ResourcePicture.stub(:get_artist_from_roles).with(any_args).and_return(@other_artist)
\r
306 @rp.own?(@other_artist).should be_false
\r
309 context 'ロール内絵師が取得できないとき' do
\r
311 ResourcePicture.stub(:get_artist_from_roles).with(any_args).and_return(nil)
\r
314 r = @rp.own?([@author])
\r
320 describe '閲覧許可に於いて' do
\r
322 @p = FactoryGirl.create :picture, :original_picture_id => @original_picture.id, :license_id => @license.id, :artist_id => @artist.id
\r
323 @rp = FactoryGirl.build :resource_picture, :artist_id => @artist.id, :original_picture_id => @original_picture.id, :license_id => @license.id, :picture_id => @p.id
\r
325 context 'オープンモードのとき' do
\r
327 MagicNumber['run_mode'] = 0
\r
329 it '自身にゲスト用ロールチェックを問い合わせしている' do
\r
330 ResourcePicture.any_instance.stub(:guest_role_check).and_return(true)
\r
331 ResourcePicture.any_instance.should_receive(:guest_role_check).with(any_args).exactly(1)
\r
332 r = @rp.visible?([@author])
\r
334 it 'ゲスト用ロールチェックが失敗したとき、falseを返す' do
\r
335 ResourcePicture.any_instance.stub(:guest_role_check).and_return(false)
\r
336 r = @rp.visible?([@author])
\r
340 context 'クローズドモードのとき' do
\r
342 MagicNumber['run_mode'] = 1
\r
344 it '自身に素材読者用ロールチェックを問い合わせしている' do
\r
345 ResourcePicture.any_instance.stub(:resource_reader_role_check).and_return(true)
\r
346 ResourcePicture.any_instance.should_receive(:resource_reader_role_check).with(any_args).exactly(1)
\r
347 r = @rp.visible?([@author])
\r
349 it '素材読者用ロールチェックが失敗したとき、falseを返す' do
\r
350 ResourcePicture.any_instance.stub(:resource_reader_role_check).and_return(false)
\r
351 r = @rp.visible?([@author])
\r
355 context 'つつがなく終わるとき' do
\r
357 MagicNumber['run_mode'] = 1
\r
358 ResourcePicture.any_instance.stub(:resource_reader_role_check).and_return(true)
\r
361 r = @rp.visible?([@author])
\r
367 describe 'ファイル名に於いて' do
\r
369 @p = FactoryGirl.create :picture, :original_picture_id => @original_picture.id, :license_id => @license.id, :artist_id => @artist.id
\r
370 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @original_picture.id, :license_id => @license.id, :picture_id => @p.id
\r
372 it 'id+拡張子のフォーマットで返す' do
\r
374 r.should eq "#{@rp.id}.png"
\r
378 describe 'MimeTypeに於いて' do
\r
380 @p = FactoryGirl.create :picture, :original_picture_id => @original_picture.id, :license_id => @license.id, :artist_id => @artist.id
\r
381 @rp = FactoryGirl.build :resource_picture, :artist_id => @artist.id, :original_picture_id => @original_picture.id, :license_id => @license.id, :picture_id => @p.id
\r
383 it 'image/拡張子のフォーマットで返す' do
\r
385 r.should eq "image/png"
\r
389 describe 'ファイルのurlに於いて' do
\r
391 @p = FactoryGirl.create :picture, :original_picture_id => @original_picture.id, :license_id => @license.id, :artist_id => @artist.id
\r
392 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @original_picture.id, :license_id => @license.id, :picture_id => @p.id
\r
393 ResourcePicture.any_instance.stub(:filename).and_return('3.gif')
\r
395 it 'ファイル名取得を依頼している' do
\r
396 ResourcePicture.any_instance.should_receive(:filename).exactly(1)
\r
399 it '/resource_pictures/3.gifのフォーマットで返す' do
\r
401 r.should eq "/resource_pictures/3.gif"
\r
405 describe '一覧取得に於いて' do
\r
407 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
408 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
409 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
\r
411 context 'page補正について' do
\r
412 it '文字列から数値に変換される' do
\r
413 ResourcePicture.page('8').should eq 8
\r
415 it 'nilの場合は1になる' do
\r
416 ResourcePicture.page().should eq 1
\r
418 it '0以下の場合は1になる' do
\r
419 ResourcePicture.page('0').should eq 1
\r
422 context 'page_size補正について' do
\r
423 it '文字列から数値に変換される' do
\r
424 ResourcePicture.page_size('7').should eq 7
\r
426 it 'nilの場合はResourcePicture.default_page_sizeになる' do
\r
427 ResourcePicture.page_size().should eq ResourcePicture.default_page_size
\r
429 it '0以下の場合はResourcePicture.default_page_sizeになる' do
\r
430 ResourcePicture.page_size('0').should eq ResourcePicture.default_page_size
\r
432 it 'ResourcePicture.max_page_sizeを超えた場合はResourcePicture.max_page_sizeになる' do
\r
433 ResourcePicture.page_size('1000').should eq ResourcePicture.max_page_size
\r
437 r = ResourcePicture.list
\r
441 nop = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
442 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
443 r = ResourcePicture.list
\r
444 r.should eq [nrp, @rp]
\r
446 context 'DBに5件あって1ページの件数を2件に変えたとして' do
\r
448 nop2 = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
449 @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
450 nop3 = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
451 @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
452 nop4 = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
453 @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
454 nop5 = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
455 @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
456 ResourcePicture.stub(:default_page_size).and_return(2)
\r
459 r = ResourcePicture.list
\r
460 r.should have(2).items
\r
462 it 'page=1なら末尾2件を返す' do
\r
464 r = ResourcePicture.list(1)
\r
465 r.should eq [@nrp5, @nrp4]
\r
467 it 'page=2なら中間2件を返す' do
\r
468 r = ResourcePicture.list(2)
\r
469 r.should eq [@nrp3, @nrp2]
\r
471 it 'page=3なら先頭1件を返す' do
\r
472 r = ResourcePicture.list(3)
\r
478 describe '自分の素材一覧取得に於いて' do
\r
480 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
481 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
482 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
\r
484 context 'つつがなく終わるとき' do
\r
485 it '一覧取得オプションを利用している' do
\r
486 ResourcePicture.stub(:list_opt).with(any_args).and_return({})
\r
487 ResourcePicture.should_receive(:list_opt).with(any_args).exactly(1)
\r
488 r = ResourcePicture.mylist @artist
\r
492 c = ResourcePicture.mylist @artist
\r
496 nop = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
497 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
498 cl = ResourcePicture.mylist @artist
\r
499 cl.should eq [nrp, @rp]
\r
502 nop = FactoryGirl.create :original_picture, :artist_id => @other_artist.id
\r
503 nrp = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :license_id => @license.id, :original_picture_id => nop.id, :picture_id => @p.id, :updated_at => Time.now + 100
\r
504 cl = ResourcePicture.mylist @artist
\r
507 context 'DBに5件あって1ページの件数を2件に変えたとして' do
\r
509 @op2 = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
510 @rp2 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op2.id, :picture_id => @p.id, :updated_at => Time.now + 100
\r
511 @op3 = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
512 @rp3 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op3.id, :picture_id => @p.id, :updated_at => Time.now + 200
\r
513 @op4 = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
514 @rp4 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op4.id, :picture_id => @p.id, :updated_at => Time.now + 300
\r
515 @op5 = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
516 @rp5 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op5.id, :picture_id => @p.id, :updated_at => Time.now + 400
\r
519 c = ResourcePicture.mylist @artist, 1, 2
\r
520 c.should have(2).items
\r
522 it 'page=1なら末尾2件を返す' do
\r
524 c = ResourcePicture.mylist(@artist, 1, 2)
\r
525 c.should eq [@rp5, @rp4]
\r
527 it 'page=2なら中間2件を返す' do
\r
528 c = ResourcePicture.mylist(@artist, 2, 2)
\r
529 c.should eq [@rp3, @rp2]
\r
531 it 'page=3なら先頭1件を返す' do
\r
532 c = ResourcePicture.mylist(@artist, 3, 2)
\r
538 describe '他作家の素材一覧取得に於いて' do
\r
540 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
541 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
542 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
\r
543 @other_op = FactoryGirl.create :original_picture, :artist_id => @other_artist.id
\r
544 @other_p = FactoryGirl.create :picture, :original_picture_id => @other_op.id, :license_id => @license.id, :artist_id => @other_artist.id
\r
545 @other_rp = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :license_id => @license.id, :original_picture_id => @other_op.id, :picture_id => @other_p.id
\r
547 context 'つつがなく終わるとき' do
\r
548 it '一覧取得オプションを利用している' do
\r
549 ResourcePicture.stub(:list_opt).with(any_args).and_return({})
\r
550 ResourcePicture.should_receive(:list_opt).with(any_args).exactly(1)
\r
551 r = ResourcePicture.himlist @other_artist
\r
554 it '指定した作家のリストを返す' do
\r
555 r = ResourcePicture.himlist @other_artist
\r
556 r.should eq [@other_rp]
\r
559 nop = FactoryGirl.create :original_picture, :artist_id => @other_artist.id
\r
560 nrp = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :license_id => @license.id, :original_picture_id => nop.id, :picture_id => @other_p.id, :updated_at => Time.now + 100
\r
561 r = ResourcePicture.himlist @other_artist
\r
562 r.should eq [nrp, @other_rp]
\r
564 context 'DBに5件あって1ページの件数を2件に変えたとして' do
\r
566 @op2 = FactoryGirl.create :original_picture, :artist_id => @other_artist.id
\r
567 @rp2 = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :license_id => @license.id, :original_picture_id => @op2.id, :picture_id => @p.id, :updated_at => Time.now + 100
\r
568 @op3 = FactoryGirl.create :original_picture, :artist_id => @other_artist.id
\r
569 @rp3 = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :license_id => @license.id, :original_picture_id => @op3.id, :picture_id => @p.id, :updated_at => Time.now + 200
\r
570 @op4 = FactoryGirl.create :original_picture, :artist_id => @other_artist.id
\r
571 @rp4 = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :license_id => @license.id, :original_picture_id => @op4.id, :picture_id => @p.id, :updated_at => Time.now + 300
\r
572 @op5 = FactoryGirl.create :original_picture, :artist_id => @other_artist.id
\r
573 @rp5 = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :license_id => @license.id, :original_picture_id => @op5.id, :picture_id => @p.id, :updated_at => Time.now + 400
\r
576 r = ResourcePicture.himlist @other_artist, 1, 2
\r
577 r.should have(2).items
\r
579 it 'page=1なら末尾2件を返す' do
\r
581 r = ResourcePicture.himlist(@other_artist, 1, 2)
\r
582 r.should eq [@rp5, @rp4]
\r
584 it 'page=2なら中間2件を返す' do
\r
585 r = ResourcePicture.himlist(@other_artist, 2, 2)
\r
586 r.should eq [@rp3, @rp2]
\r
588 it 'page=3なら先頭1件を返す' do
\r
589 r = ResourcePicture.himlist(@other_artist, 3, 2)
\r
590 r.should eq [@other_rp]
\r
595 describe '一覧ページ制御に於いて' do
\r
597 ResourcePicture.stub(:count).with(any_args).and_return(100)
\r
600 r = ResourcePicture.list_paginate
\r
601 r.is_a?(Kaminari::PaginatableArray).should be_true
\r
603 it 'ページ件数10のとき、3ページ目のオフセットは20から始まる' do
\r
604 r = ResourcePicture.list_paginate 3, 10
\r
605 r.limit_value.should eq 10
\r
606 r.offset_value.should eq 20
\r
610 describe '自分の素材一覧ページ制御に於いて' do
\r
612 ResourcePicture.stub(:count).with(any_args).and_return(100)
\r
615 r = ResourcePicture.mylist_paginate @artist
\r
616 r.is_a?(Kaminari::PaginatableArray).should be_true
\r
618 it '自分の素材一覧の取得条件を利用している' do
\r
619 ResourcePicture.stub(:mylist_where).with(any_args).and_return('')
\r
620 ResourcePicture.should_receive(:mylist_where).with(any_args).exactly(1)
\r
621 r = ResourcePicture.mylist_paginate @artist
\r
623 it 'ページ件数10のとき、3ページ目のオフセットは20から始まる' do
\r
624 r = ResourcePicture.mylist_paginate @artist, 3, 10
\r
625 r.limit_value.should eq 10
\r
626 r.offset_value.should eq 20
\r
630 describe '他作家の素材一覧ページ制御に於いて' do
\r
632 ResourcePicture.stub(:count).with(any_args).and_return(100)
\r
635 r = ResourcePicture.himlist_paginate @other_artist
\r
636 r.is_a?(Kaminari::PaginatableArray).should be_true
\r
638 it '他作家の素材一覧の取得条件を利用している' do
\r
639 ResourcePicture.stub(:himlist_where).with(any_args).and_return('')
\r
640 ResourcePicture.should_receive(:himlist_where).with(any_args).exactly(1)
\r
641 r = ResourcePicture.himlist_paginate @other_artist
\r
643 it 'ページ件数10のとき、3ページ目のオフセットは20から始まる' do
\r
644 r = ResourcePicture.himlist_paginate @other_artist, 3, 10
\r
645 r.limit_value.should eq 10
\r
646 r.offset_value.should eq 20
\r
650 describe '一覧取得オプションに於いて' do
\r
651 it '3つの項目を含んでいる' do
\r
652 r = ResourcePicture.list_opt
\r
653 r.should have(3).items
\r
655 it 'ライセンスを含んでいる' do
\r
656 r = ResourcePicture.list_opt
\r
657 r.has_key?(:license).should be_true
\r
660 r = ResourcePicture.list_opt
\r
661 r.has_key?(:artist).should be_true
\r
664 r = ResourcePicture.list_opt
\r
665 r.has_key?(:picture).should be_true
\r
668 describe 'json一覧出力オプションに於いて' do
\r
670 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
671 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
672 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
\r
673 @sbt = FactoryGirl.create :speech_balloon_template
\r
674 @scroll = FactoryGirl.create :scroll, :author_id => @author.id, :visible => 1
\r
675 @panel = FactoryGirl.create :panel, :author_id => @author.id, :publish => 1
\r
676 @scroll_panel = FactoryGirl.create :scroll_panel, :author_id => @author.id, :scroll_id => @scroll.id, :panel_id => @panel.id
\r
678 it 'ライセンスを含んでいる' do
\r
679 r = ResourcePicture.list.to_json ResourcePicture.list_json_opt
\r
682 i.has_key?('license').should be_true
\r
685 r = ResourcePicture.list.to_json ResourcePicture.list_json_opt
\r
688 i.has_key?('artist').should be_true
\r
691 r = ResourcePicture.list.to_json ResourcePicture.list_json_opt
\r
694 i.has_key?('picture').should be_true
\r
698 describe '単体取得に於いて' do
\r
700 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
701 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
702 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
\r
704 context 'つつがなく終わるとき' do
\r
705 it '単体取得オプションを利用している' do
\r
706 ResourcePicture.stub(:show_opt).with(any_args).and_return({})
\r
707 ResourcePicture.should_receive(:show_opt).with(any_args).exactly(1)
\r
708 r = ResourcePicture.show @rp.id, @author
\r
710 it '閲覧許可を問い合わせている' do
\r
711 ResourcePicture.any_instance.stub(:visible?).with(any_args).and_return(true)
\r
712 ResourcePicture.any_instance.should_receive(:visible?).with(any_args).exactly(1)
\r
713 r = ResourcePicture.show @rp.id, @author
\r
717 r = ResourcePicture.show @rp.id, @author
\r
720 context '他人の素材を開こうとしたとき' do
\r
721 it '403Forbidden例外を返す' do
\r
722 ResourcePicture.any_instance.stub(:visible?).and_return(false)
\r
724 r = ResourcePicture.show @rp.id, @other_author
\r
725 }.should raise_error(ActiveRecord::Forbidden)
\r
728 context '存在しない素材を開こうとしたとき' do
\r
729 it '404RecordNotFound例外を返す' do
\r
731 r = ResourcePicture.show 0, @author
\r
732 }.should raise_error(ActiveRecord::RecordNotFound)
\r
736 describe '単体取得オプションに於いて' do
\r
737 it 'includeキーを含んでいる' do
\r
738 r = ResourcePicture.show_opt
\r
739 r.has_key?(:include).should be_true
\r
741 it '3つの項目を含んでいる' do
\r
742 r = ResourcePicture.show_opt[:include]
\r
743 r.should have(3).items
\r
745 it 'ライセンスを含んでいる' do
\r
746 r = ResourcePicture.show_opt[:include]
\r
747 r.has_key?(:license).should be_true
\r
750 r = ResourcePicture.show_opt[:include]
\r
751 r.has_key?(:artist).should be_true
\r
754 r = ResourcePicture.show_opt[:include]
\r
755 r.has_key?(:picture).should be_true
\r
758 describe 'json単体出力オプションに於いて' do
\r
760 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
761 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
762 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
\r
763 @sbt = FactoryGirl.create :speech_balloon_template
\r
764 @scroll = FactoryGirl.create :scroll, :author_id => @author.id, :visible => 1
\r
765 @panel = FactoryGirl.create :panel, :author_id => @author.id, :publish => 1
\r
766 @scroll_panel = FactoryGirl.create :scroll_panel, :author_id => @author.id, :scroll_id => @scroll.id, :panel_id => @panel.id
\r
768 it 'ライセンスを含んでいる' do
\r
769 r = ResourcePicture.show(@rp.id, @author).to_json ResourcePicture.show_json_opt
\r
772 i.has_key?('license').should be_true
\r
775 r = ResourcePicture.show(@rp.id, @author).to_json ResourcePicture.show_json_opt
\r
778 i.has_key?('artist').should be_true
\r
781 r = ResourcePicture.show(@rp.id, @author).to_json ResourcePicture.show_json_opt
\r
784 i.has_key?('picture').should be_true
\r
788 describe 'フォーマット変換対象判定に於いて' do
\r
790 @rp = FactoryGirl.build :resource_picture,
\r
791 :artist_id => @artist.id, :license_id => @license.id
\r
793 context '変換するケース' do
\r
794 it '画像フォーマットがpngかつライセンスの変換禁止フラグが無効のときTrue' do
\r
795 ResourcePicture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(0)
\r
797 @rp.to_gif?.should be_true
\r
800 context '変換しないケース' do
\r
801 it '画像フォーマットがでない' do
\r
802 ResourcePicture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(0)
\r
804 @rp.to_gif?.should be_false
\r
807 ResourcePicture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(-1)
\r
809 @rp.to_gif?.should be_false
\r
814 describe '新規実素材の取得に於いて' do
\r
816 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
817 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
818 attr = {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => 'tester',
\r
819 :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
\r
820 @rp = FactoryGirl.build :resource_picture, attr
\r
821 @imager = ImagerTest.load "abc\ndef\nghi"
\r
823 context '事前チェック' do
\r
825 Picture.any_instance.stub(:store).with(any_args).and_return(true)
\r
827 it '実素材モデルにデフォルト値補充を依頼している' do
\r
828 Picture.any_instance.should_receive(:supply_default).with(any_args).exactly(1)
\r
829 r = @rp.new_picture @imager
\r
831 it '実素材モデルに上書き補充を依頼している' do
\r
832 Picture.any_instance.should_receive(:overwrite).with(any_args).exactly(1)
\r
833 r = @rp.new_picture @imager
\r
836 Picture.any_instance.should_receive(:store).with(any_args).exactly(1)
\r
837 r = @rp.new_picture @imager
\r
840 context 'つつがなく終わるとき' do
\r
841 it '保存された実素材を返す' do
\r
842 r = @rp.new_picture @imager
\r
843 r.is_a?(Picture).should be_true
\r
846 #以下から例外ケース。処理先頭から失敗させていく
\r
847 context '実素材の保存に失敗したとき' do
\r
849 Picture.any_instance.stub(:store).with(any_args).and_return(false)
\r
852 r = @rp.new_picture @imager
\r
855 it '自身の全体エラーメッセージにその旨をセットしている' do
\r
856 r = @rp.new_picture @imager
\r
857 @rp.errors[:base].should_not be_empty
\r
862 describe '作成・更新に於いて' do
\r
864 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
865 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
866 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
867 @rp = FactoryGirl.build :resource_picture, attr
\r
868 @imager = ImagerTest.load "abc\ndef\nghi"
\r
870 context '事前チェック' do
\r
872 #すべての処理が正常パターンで通過すれば、一番深い分岐まで通る。
\r
873 #それで外部のメソッド呼び出しだけに着目してテストする。
\r
874 OriginalPicture.any_instance.stub(:save).and_return(true)
\r
875 ResourcePicture.any_instance.stub(:new_picture).with(any_args).and_return(@p)
\r
876 ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(true)
\r
878 it '原画に保存を依頼している' do
\r
879 OriginalPicture.any_instance.should_receive(:save).exactly(1)
\r
880 r = @rp.store @imager
\r
882 it '新規実素材の取得を依頼している' do
\r
883 ResourcePicture.any_instance.should_receive(:new_picture).with(any_args).exactly(1)
\r
884 r = @rp.store @imager
\r
887 ResourcePicture.any_instance.should_receive(:save).with(any_args).exactly(1)
\r
888 r = @rp.store @imager
\r
890 it 'gif付き画像ファイルの作成・更新機能で画像を保存している' do
\r
891 ResourcePicture.any_instance.should_receive(:store_picture_with_gif).with(@imager).exactly(1)
\r
892 r = @rp.store @imager
\r
895 context 'つつがなく終わるとき' do
\r
897 #すべての処理を正常パターンで通過させ、保存機能をチェックする。
\r
898 ResourcePicture.any_instance.stub(:new_picture).with(any_args).and_return(@p)
\r
899 ResourcePicture.any_instance.stub(:store_picture_with_gif).with(@imager).and_return(true)
\r
902 r = @rp.store @imager
\r
905 it '原画の停止日時をクリアする' do
\r
906 r = @rp.store @imager
\r
907 @rp.original_picture.stopped_at.should be_nil
\r
909 it '原画の公開日時に現在時刻をセットする' do
\r
911 r = @rp.store @imager
\r
912 }.should change(@rp.original_picture, :published_at)
\r
914 it '実素材idから最新画像idを取得してセットしている' do
\r
915 r = @rp.store @imager
\r
916 @rp.picture_id.should eq @p.id
\r
920 r = @rp.store @imager
\r
921 }.should change ResourcePicture, :count
\r
924 #以下から例外ケース。処理先頭から失敗させていく
\r
925 context '原画の保存に失敗したとき' do
\r
927 OriginalPicture.any_instance.stub(:save).and_return(false)
\r
936 }.should_not change(ResourcePicture, :count)
\r
939 context '画像オブジェクトの取得に失敗したとき' do
\r
944 r = @rp.store @imager
\r
948 r = @rp.store @imager
\r
949 @rp.should be_a_new ResourcePicture
\r
951 it '処理を中断してロールバックする' do
\r
953 r = @rp.store @imager
\r
954 }.should_not change Picture, :count
\r
957 context '新規実素材の取得に失敗したとき' do
\r
959 ResourcePicture.any_instance.stub(:new_picture).with(any_args).and_return(false)
\r
962 r = @rp.store @imager
\r
966 r = @rp.store @imager
\r
967 @rp.should be_a_new ResourcePicture
\r
969 it '処理を中断してロールバックする' do
\r
971 r = @rp.store @imager
\r
972 }.should_not change Picture, :count
\r
975 context '自身の保存に失敗したとき' do
\r
977 ResourcePicture.any_instance.stub(:new_picture).with(any_args).and_return(@p)
\r
978 ResourcePicture.any_instance.stub(:save).with(any_args).and_return(false)
\r
981 r = @rp.store @imager
\r
985 r = @rp.store @imager
\r
986 @rp.should be_a_new ResourcePicture
\r
988 it '処理を中断してロールバックする' do
\r
990 r = @rp.store @imager
\r
991 }.should_not change Picture, :count
\r
994 context 'gif付き画像ファイルの作成・更新機能に失敗したとき' do
\r
996 ResourcePicture.any_instance.stub(:new_picture).with(any_args).and_return(@p)
\r
997 ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(false)
\r
1000 r = @rp.store @imager
\r
1004 r = @rp.store @imager
\r
1005 @rp.should be_a_new ResourcePicture
\r
1007 it '処理を中断してロールバックする' do
\r
1009 r = @rp.store @imager
\r
1010 }.should_not change Picture, :count
\r
1015 describe 'gif付き画像ファイルの作成・更新に於いて' do
\r
1017 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
1018 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
1019 attr = {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => 'tester', :credit => '{}', :settings => {}.to_json.to_s}
\r
1020 @rp = FactoryGirl.build :resource_picture, attr
\r
1021 @imager = ImagerTest.load "abc\ndef\nghi"
\r
1023 context '事前チェック' do
\r
1025 #すべての処理が正常パターンで通過すれば、一番深い分岐まで通る。
\r
1026 #それで外部のメソッド呼び出しだけに着目してテストする。
\r
1027 ResourcePicture.any_instance.stub(:store_picture).with(any_args).and_return(true)
\r
1028 ResourcePicture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
\r
1029 ResourcePicture.any_instance.stub(:filename).with(any_args).and_return('1.png')
\r
1030 ResourcePicture.any_instance.stub(:gifname).with(any_args).and_return('1.gif')
\r
1032 it '画像ファイルの作成・更新機能で画像を保存している' do
\r
1033 #二回目の保存はgif変換の結果を渡す。
\r
1034 ResourcePicture.any_instance.should_receive(:store_picture).with(any_args).exactly(2)
\r
1035 r = @rp.store_picture_with_gif @imager
\r
1037 it '自身にフォーマット変換対象かを問い合わせている' do
\r
1038 ResourcePicture.any_instance.should_receive(:to_gif?).with(any_args).exactly(1)
\r
1039 r = @rp.store_picture_with_gif @imager
\r
1041 it '画像ライブラリにGifフォーマット変換を依頼している' do
\r
1042 ImagerTest.any_instance.should_receive(:to_gif).with(any_args).exactly(1)
\r
1043 r = @rp.store_picture_with_gif @imager
\r
1046 context 'つつがなく終わるとき' do
\r
1048 #すべての処理を正常パターンで通過させ、保存機能をチェックする。
\r
1049 ResourcePicture.any_instance.stub(:store_picture).with(any_args).and_return(true)
\r
1050 ResourcePicture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
\r
1051 ResourcePicture.any_instance.stub(:filename).with(any_args).and_return('1.png')
\r
1052 ResourcePicture.any_instance.stub(:gifname).with(any_args).and_return('1.gif')
\r
1055 r = @rp.store_picture_with_gif @imager
\r
1059 context 'gif変換なしで、つつがなく終わるとき' do
\r
1061 #すべての処理を正常パターンで通過させ、保存機能をチェックする。
\r
1062 ResourcePicture.any_instance.stub(:store_picture).with(any_args).and_return(true)
\r
1063 ResourcePicture.any_instance.stub(:to_gif?).with(any_args).and_return(false)
\r
1064 ResourcePicture.any_instance.stub(:filename).with(any_args).and_return('1.png')
\r
1065 ResourcePicture.any_instance.stub(:gifname).with(any_args).and_return('1.gif')
\r
1068 r = @rp.store_picture_with_gif @imager
\r
1071 it 'gif保存は呼ばれていない' do
\r
1072 ResourcePicture.any_instance.should_receive(:store_picture).with(any_args).exactly(1)
\r
1073 r = @rp.store_picture_with_gif @imager
\r
1076 #以下から例外ケース。処理先頭から失敗させていく
\r
1077 context '画像の保存に失敗したとき' do
\r
1079 ResourcePicture.any_instance.stub(:store_picture).with(any_args).and_return(false)
\r
1082 r = @rp.store_picture_with_gif @imager
\r
1085 it '全体エラーメッセージがセットされている' do
\r
1087 r = @rp.store_picture_with_gif @imager
\r
1088 }.should change(@rp.errors[:base], :count)
\r
1090 it 'gif変換判定は呼ばれていない' do
\r
1091 ResourcePicture.any_instance.should_not_receive(:to_gif?).with(any_args)
\r
1092 r = @rp.store_picture_with_gif @imager
\r
1095 context 'gif変換に失敗したとき' do
\r
1097 ResourcePicture.any_instance.stub(:store_picture).with(any_args).and_return(true)
\r
1098 ResourcePicture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
\r
1099 ImagerTest.any_instance.stub(:to_gif).with(any_args).and_return(false)
\r
1102 r = @rp.store_picture_with_gif @imager
\r
1105 it '全体エラーメッセージがセットされている' do
\r
1107 r = @rp.store_picture_with_gif @imager
\r
1108 }.should change(@rp.errors[:base], :count)
\r
1110 it 'gif画像の保存は呼ばれていない' do
\r
1111 #本画像の保存があるので、一度は呼ばれる
\r
1112 ResourcePicture.any_instance.should_receive(:store_picture).with(any_args).exactly(1)
\r
1113 r = @rp.store_picture_with_gif @imager
\r
1116 context 'gif画像の保存に失敗したとき' do
\r
1118 ResourcePicture.any_instance.stub(:store_picture).with(@imager, '1.png').and_return(true)
\r
1119 ResourcePicture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
\r
1120 @gifimager = @imager.to_gif
\r
1121 ImagerTest.any_instance.stub(:to_gif).with(any_args).and_return(@gifimager)
\r
1122 ResourcePicture.any_instance.stub(:store_picture).with(@gifimager, '1.gif').and_return(false)
\r
1123 ResourcePicture.any_instance.stub(:filename).with(any_args).and_return('1.png')
\r
1124 ResourcePicture.any_instance.stub(:gifname).with(any_args).and_return('1.gif')
\r
1127 r = @rp.store_picture_with_gif @imager
\r
1130 it '全体エラーメッセージがセットされている' do
\r
1132 r = @rp.store_picture_with_gif @imager
\r
1133 }.should change(@rp.errors[:base], :count)
\r
1138 describe '画像ファイルの作成・更新に於いて' do
\r
1139 #PictureIo経由で画像を保存するための機能。ファイル名に自身のidを使うので事前に自身の保存が必要。
\r
1141 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
1142 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
1143 attr = {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => 'tester', :credit => '{}', :settings => {}.to_json.to_s}
\r
1144 @rp = FactoryGirl.build :resource_picture, attr
\r
1146 @imager = ImagerTest.load "abc\ndef\nghi"
\r
1148 context '事前チェック' do
\r
1150 #すべての処理を正常パターンで通過させ、保存機能をチェックする。
\r
1151 PictureIO.resource_picture_io.stub(:put).with(any_args).and_return(true)
\r
1152 ResourcePicture.any_instance.stub(:flag_thumbnail).with(any_args).and_return(1)
\r
1154 it 'サムネイル化が1回呼ばれる' do
\r
1155 ImagerTest.any_instance.should_receive(:to_thumbnail).with(any_args).exactly(1)
\r
1156 r = @rp.store_picture(@imager, '1.png')
\r
1158 it '画像ファイルの保存が2回呼ばれる' do
\r
1159 PictureIO.resource_picture_io.should_receive(:put).with(any_args).exactly(2)
\r
1160 r = @rp.store_picture(@imager, '1.gif')
\r
1162 it '画像ファイルのベースへのサムネイル保存が1回呼ばれる' do
\r
1163 PictureIO.resource_picture_io.should_receive(:put).with(@imager.to_thumbnail.binary, '1.gif').exactly(1)
\r
1164 r = @rp.store_picture(@imager, '1.gif')
\r
1166 it '画像ファイルのfullへの保存が1回呼ばれる' do
\r
1167 PictureIO.resource_picture_io.should_receive(:put).with(@imager.binary, '1.gif', 'full').exactly(1)
\r
1168 r = @rp.store_picture(@imager, '1.gif')
\r
1171 context 'つつがなく終わるとき' do
\r
1173 #すべての処理を正常パターンで通過させ、保存機能をチェックする。
\r
1174 PictureIO.resource_picture_io.stub(:put).with(any_args).and_return(true)
\r
1175 ResourcePicture.any_instance.stub(:flag_thumbnail).with(any_args).and_return(1)
\r
1178 r = @rp.store_picture(@imager, '1.gif')
\r
1182 #以下から例外ケース。処理先頭から失敗させていく
\r
1183 context 'サムネイル化に失敗したとき' do
\r
1185 ResourcePicture.any_instance.stub(:flag_thumbnail).with(any_args).and_return(1)
\r
1186 ImagerTest.any_instance.stub(:to_thumbnail).with(any_args).and_return(false)
\r
1189 r = @rp.store_picture(@imager, '1.gif')
\r
1192 it '画像ファイルの保存は呼ばれていない' do
\r
1193 PictureIO.resource_picture_io.should_not_receive(:put).with(any_args)
\r
1194 r = @rp.store_picture(@imager, '1.gif')
\r
1197 context 'サムネイル画像の保存に失敗したとき' do
\r
1199 ResourcePicture.any_instance.stub(:flag_thumbnail).with(any_args).and_return(1)
\r
1200 @tmbimager = @imager.to_thumbnail
\r
1201 ImagerTest.any_instance.stub(:to_thumbnail).with(any_args).and_return(@tmbimager)
\r
1202 PictureIO.resource_picture_io.stub(:put).with(@tmbimager.binary, '1.gif').and_raise(PictureIO::Error)
\r
1205 r = @rp.store_picture(@imager, '1.gif')
\r
1208 it '画像ファイルの保存は呼ばれていない' do
\r
1209 PictureIO.resource_picture_io.should_receive(:put).with(any_args).exactly(1)
\r
1210 r = @rp.store_picture(@imager, '1.gif')
\r
1213 context '画像の保存に失敗したとき' do
\r
1215 ResourcePicture.any_instance.stub(:flag_thumbnail).with(any_args).and_return(1)
\r
1216 @tmbimager = @imager.to_thumbnail
\r
1217 ImagerTest.any_instance.stub(:to_thumbnail).with(any_args).and_return(@tmbimager)
\r
1218 PictureIO.resource_picture_io.stub(:put).with(@tmbimager.binary, '1.gif').and_return(true)
\r
1219 PictureIO.resource_picture_io.stub(:put).with(@imager.binary, '1.gif', 'full').and_raise(PictureIO::Error)
\r
1222 r = @rp.store_picture(@imager, '1.gif')
\r
1229 describe '公開停止に於いて' do
\r
1231 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
1232 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
1233 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
\r
1234 PictureIO.resource_picture_io.stub(:exist?).with(@rp.filename).and_return(true)
\r
1235 PictureIO.resource_picture_io.stub(:exist?).with(@rp.filename, 'full').and_return(true)
\r
1237 context '事前チェックしておく' do
\r
1239 OriginalPicture.any_instance.stub(:save).and_return(true)
\r
1240 ResourcePicture.any_instance.stub(:destroy).and_return(true)
\r
1241 PictureIO.resource_picture_io.stub(:delete).with(@rp.filename).and_return(true)
\r
1242 PictureIO.resource_picture_io.stub(:delete).with(@rp.filename, 'full').and_return(true)
\r
1244 it '原画に保存を依頼している' do
\r
1245 OriginalPicture.any_instance.should_receive(:save).exactly(1)
\r
1248 it '素材モデルに削除を依頼している' do
\r
1249 ResourcePicture.any_instance.should_receive(:destroy).exactly(1)
\r
1252 it '保管庫にサムネイルの画像データ削除を依頼している' do
\r
1253 PictureIO.resource_picture_io.should_receive(:delete).with(@rp.filename).exactly(1)
\r
1256 it '保管庫にフルサイズの画像データ削除を依頼している' do
\r
1257 PictureIO.resource_picture_io.should_receive(:delete).with(@rp.filename, 'full').exactly(1)
\r
1261 context 'つつがなく終わるとき' do
\r
1265 }.should change(ResourcePicture, :count).by(-1)
\r
1267 r = ResourcePicture.find @rp.id
\r
1268 }.should raise_error
\r
1270 it '原画の公開日時をクリアする' do
\r
1271 r = @rp.store @imager
\r
1272 @rp.original_picture.published_at.should be_nil
\r
1274 it '原画の停止日時に現在時刻をセットする' do
\r
1277 }.should change(@rp.original_picture, :stopped_at)
\r
1284 context '原画の保存に失敗したとき' do
\r
1286 OriginalPicture.any_instance.stub(:save).and_return(false)
\r
1292 it 'ロールバックしている' do
\r
1295 }.should_not change(ResourcePicture, :count)
\r
1298 context '自身の削除に失敗したとき' do
\r
1300 ResourcePicture.any_instance.stub(:destroy).with(any_args).and_return(false)
\r
1306 it 'ロールバックしている' do
\r
1309 }.should_not change(ResourcePicture, :count)
\r
1312 context 'サムネイル画像の削除に失敗したとき' do
\r
1314 PictureIO.resource_picture_io.stub(:delete).with(@rp.filename).and_raise(PictureIO::Error)
\r
1315 PictureIO.resource_picture_io.stub(:delete).with(@rp.filename, 'full').and_return(true)
\r
1321 it 'ロールバックしている' do
\r
1324 }.should_not change(ResourcePicture, :count)
\r
1327 context 'フルサイズ画像の削除に失敗したとき' do
\r
1329 PictureIO.resource_picture_io.stub(:delete).with(@rp.filename).and_return(true)
\r
1330 PictureIO.resource_picture_io.stub(:delete).with(@rp.filename, 'full').and_raise(PictureIO::Error)
\r
1336 it 'ロールバックしている' do
\r
1339 }.should_not change(ResourcePicture, :count)
\r
1344 describe 'クレジットデータに於いて' do
\r
1346 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
\r
1347 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
\r
1348 attr = {:original_picture_id => @op.id, :license_id => @license.id, :artist_name => 'tester', :credit => '{"system_picture_id": 2}', :settings => {}.to_json.to_s}
\r
1349 @rp = FactoryGirl.build :resource_picture, attr
\r
1351 it 'system_picture_idが入っている' do
\r
1352 res = @rp.credit_data
\r
1353 res["system_picture_id"].should eq 2
\r