describe Picture do
before do
- FactoryGirl.create :admin
+ @admin = FactoryGirl.create :admin
@user = FactoryGirl.create( :user_yas)
- @author = @user.author
+ @author = FactoryGirl.create :author, :user_id => @user.id
@artist = FactoryGirl.create :artist_yas, :author_id => @author.id
@other_user = FactoryGirl.create( :user_yas)
- @other_author = @other_user.author
+ @other_author = FactoryGirl.create :author, :user_id => @other_user.id
@other_artist = FactoryGirl.create :artist_yas, :author_id => @other_author.id
@sp = FactoryGirl.create :system_picture
@lg = FactoryGirl.create :license_group
end
end
+ describe '文字コード検証に於いて' do
+ before do
+ @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
+ end
+
+ context 'artist_nameを検証するとき' do
+ it 'Shift JISなら失敗する' do
+ @p.artist_name = "\x83G\x83r\x83]\x83D"
+ lambda{
+ @p.valid_encode
+ }.should raise_error(Pettanr::BadRequest)
+ end
+ end
+
+ context 'classnameを検証するとき' do
+ it 'Shift JISなら失敗する' do
+ @p.classname = "\x83G\x83r\x83]\x83D"
+ lambda{
+ @p.valid_encode
+ }.should raise_error(Pettanr::BadRequest)
+ end
+ end
+
+ context 'creditを検証するとき' do
+ it 'Shift JISなら失敗する' do
+ @p.credit = "\x83G\x83r\x83]\x83D"
+ lambda{
+ @p.valid_encode
+ }.should raise_error(Pettanr::BadRequest)
+ end
+ end
+
+ context 'settingsを検証するとき' do
+ it 'Shift JISなら失敗する' do
+ @p.settings = "\x83G\x83r\x83]\x83D"
+ lambda{
+ @p.valid_encode
+ }.should raise_error(Pettanr::BadRequest)
+ end
+ end
+
+ end
+
describe 'デフォルト値補充に於いて' do
it 'defined' do
- @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id\r
+ @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
@p.supply_default
end
end
:artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id,
:artist_name => 'tester', :classname => 'Tester', :credit => {:title => 'cap'}.to_json.to_s, :settings => {:set => 1}.to_json.to_s}
@rp = FactoryGirl.build :resource_picture, attr
- @p = FactoryGirl.build :picture, :original_picture_id => nil, :license_id => nil, :artist_id => nil, :revision => nil\r
+ @p = FactoryGirl.build :picture, :original_picture_id => nil, :license_id => nil, :artist_id => nil, :revision => nil
end
it 'width, height, ext, filesize, md5, original_picture_idが設定されている' do
@p.overwrite @rp
describe '所持判定に於いて' do
before do
- @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id\r
+ @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
+ end
+ context '事前チェックする' do
+ it '自身にロールリストからの絵師取得を依頼している' do
+ Picture.should_receive(:get_artist_from_roles).with(any_args).exactly(1)
+ r = @p.own?([@artist])
+ end
+ end
+ context 'ロール内絵師が取得できるとき' do
+ before do
+ end
+ it 'ロール内絵師のidが自身の絵師idと一致するなら許可する' do
+ Picture.stub(:get_artist_from_roles).with(any_args).and_return(@artist)
+ r = @p.own?([@artist])
+ r.should be_true
+ end
+ it 'ロール内絵師のidが自身の絵師idと一致しないならno' do
+ Picture.stub(:get_artist_from_roles).with(any_args).and_return(@other_artist)
+ @p.own?(@other_artist).should be_false
+ end
end
- it '実素材を更新することはないので、Falseを返す' do
- @p.own?(@author).should == false
+ context 'ロール内絵師が取得できないとき' do
+ before do
+ Picture.stub(:get_artist_from_roles).with(any_args).and_return(nil)
+ end
+ it 'Falseを返す' do
+ r = @p.own?([@artist])
+ r.should be_false
+ end
end
end
describe '閲覧許可に於いて' do
before do
- @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id\r
+ @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
+ end
+ it 'Trueを返す。' do
+ r = @p.visible?(@artist)
+ r.should be_true
+ end
+ end
+
+ describe '詳細閲覧許可に於いて' do
+ before do
+ @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
+ end
+ context '自身に原画がリンクしていないとき' do
+ before do
+ Picture.any_instance.stub(:original_picture).with(any_args).and_return(nil)
+ end
+ it 'Falseを返す' do
+ r = @p.showable?(@author)
+ r.should be_false
+ end
+ end
+ it '自作の実素材ならyes' do
+ Picture.any_instance.stub(:own?).with(any_args).and_return(true)
+ @p.showable?(@artist).should == true
+ end
+ context '他人の実素材のとき' do
+ before do
+ Picture.any_instance.stub(:own?).with(any_args).and_return(false)
+ end
+ it '自身にhead判定と有効性判定を問い合わせ、両者がTrueならTrueを返す。' do
+ Picture.any_instance.stub(:head?).with(any_args).and_return(true)
+ Picture.any_instance.stub(:enable?).with(any_args).and_return(true)
+ r = @p.showable?(@author)
+ r.should be_true
+ end
+ it 'head判定がFalseならFalseを返す。' do
+ Picture.any_instance.stub(:head?).with(any_args).and_return(false)
+ Picture.any_instance.stub(:enable?).with(any_args).and_return(true)
+ r = @p.showable?(@author)
+ r.should be_false
+ end
+ it '有効性判定がFalseならFalseを返す。' do
+ Picture.any_instance.stub(:enable?).with(any_args).and_return(false)
+ Picture.any_instance.stub(:head?).with(any_args).and_return(true)
+ r = @p.showable?(@author)
+ r.should be_false
+ end
end
- it '必ず許可となる' do\r
- r = @p.visible?(@author)
- r.should == true
- end\r
end
describe 'ファイル名に於いて' do
before do
- @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'\r
+ @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'
end
it 'id+拡張子のフォーマットで返す' do
r = @p.filename
describe 'gifファイル名に於いて' do
before do
- @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'gif'\r
+ @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'gif'
end
it 'id.gifのフォーマットで返す' do
r = @p.filename
describe 'MimeTypeに於いて' do
before do
- @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'\r
+ @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'
end
it 'image/拡張子のフォーマットで返す' do
r = @p.mime_type
describe 'ファイルのurlに於いて' do
before do
- @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id\r
+ @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
Picture.any_instance.stub(:filename).and_return('3.gif')
end
it 'ファイル名取得を依頼している' do
end
end
- describe 'head判定に於いて' do
+ describe '有効性判定に於いて' do
before do
+ @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id
+ @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
+ Picture.any_instance.stub(:head).and_return(@p)
end
- context '自身とリンクした素材があるとき' do
+ context 'è\87ªèº«ã\81®headã\81¨ã\83ªã\83³ã\82¯ã\81\97ã\81\9fç´ æ\9d\90ã\81\8cã\81\82ã\82\8bã\81¨ã\81\8d' do
before do
- @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id
- @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
+ Picture.any_instance.stub(:resource_picture).and_return(@rp)
end
it 'trueを返す' do
- res = @p.head?
+ res = @p.enable?
res.should be_true
end
end
- context '自身とリンクした素材がないとき' do
+ context 'è\87ªèº«ã\81®headã\81¨ã\83ªã\83³ã\82¯ã\81\97ã\81\9fç´ æ\9d\90ã\81\8cã\81ªã\81\84ã\81¨ã\81\8d' do
before do
- @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
- @p2 = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 1
+ Picture.any_instance.stub(:resource_picture).and_return(nil)
+ end
+ it 'falseを返す' do
+ res = @p.enable?
+ res.should be_false
+ end
+ end
+ end
+
+ describe 'head取得に於いて' do
+ before do
+ #旧版
+ @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 0,
+ :original_picture_id => @op.id, :md5 => 'a' * 32
+ #最新版
+ @p2 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
+ :original_picture_id => @op.id, :md5 => 'b' * 32
+ #除外すべき無関係画像
+ @op2 = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p3 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 0,
+ :original_picture_id => @op2.id, :md5 => 'C' * 32
+ end
+ context 'つつがなく終わるとき' do
+ before do
+ #素材は有効
@rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p2.id
end
+ it '最新版を返す' do
+ res = @p.head
+ res.should eq @p2
+ end
+ end
+ context '無効な素材(素材とリンクしてない)とき' do
+ it '同じく最新版を返す' do
+ res = @p.head
+ res.should eq @p2
+ end
+ end
+ end
+
+ describe 'head判定に於いて' do
+ before do
+ #旧版
+ @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 0,
+ :original_picture_id => @op.id, :md5 => 'a' * 32
+ #最新版
+ @p2 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
+ :original_picture_id => @op.id, :md5 => 'b' * 32
+ @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p2.id
+ end
+ context '旧版のとき' do
it 'falseを返す' do
res = @p.head?
res.should be_false
end
end
+ context '最新版のとき' do
+ it 'trueを返す' do
+ res = @p2.head?
+ res.should be_true
+ end
+ end
end
- describe 'フォーマット変換対象判定に於いて' do\r
- before do\r
+ describe 'フォーマット変換対象判定に於いて' do
+ before do
@p = FactoryGirl.build :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id
- end\r
- context '変換するケース' do\r
- it '画像フォーマットがpngかつライセンスの変換禁止フラグが無効のときTrue' do\r
- Picture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(0)\r
- @p.ext = 'png'\r
- @p.to_gif?.should be_true\r
- end\r
- end\r
- context '変換しないケース' do\r
- it '画像フォーマットがpngでない' do\r
- Picture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(0)\r
- @p.ext = 'gif'\r
- @p.to_gif?.should be_false\r
- end\r
- it '変換禁止フラグが無効' do\r
- Picture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(-1)\r
- @p.ext = 'png'\r
- @p.to_gif?.should be_false\r
- end\r
- end\r
- end\r
- \r
- describe 'サブディレクトリリストに於いて' do\r
- before do\r
+ end
+ context '変換するケース' do
+ it '画像フォーマットがpngかつライセンスの変換禁止フラグが無効のときTrue' do
+ Picture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(0)
+ @p.ext = 'png'
+ @p.to_gif?.should be_true
+ end
+ end
+ context '変換しないケース' do
+ it '画像フォーマットがpngでない' do
+ Picture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(0)
+ @p.ext = 'gif'
+ @p.to_gif?.should be_false
+ end
+ it '変換禁止フラグが無効' do
+ Picture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(-1)
+ @p.ext = 'png'
+ @p.to_gif?.should be_false
+ end
+ end
+ end
+
+ describe 'サブディレクトリリストに於いて' do
+ before do
@p = FactoryGirl.build :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id
- end\r
- it '配列で返す' do\r
- Picture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(0)\r
- r = @p.subdirs\r
- r.is_a?(Array).should be_true\r
- end\r
- it '本画像(ベースディレクトリ)を含んでいる' do\r
- Picture.any_instance.stub(:flag_reverse).with(any_args).and_return(0)\r
- r = @p.subdirs\r
- r.include?('').should be_true\r
- end\r
- context '反転が許可されているとき' do\r
- it '垂直・水平・垂直水平反転ディレクトリも返す' do\r
- Picture.any_instance.stub(:flag_reverse).with(any_args).and_return(0)\r
- r = @p.subdirs\r
- r.include?('v').should be_true\r
- r.include?('h').should be_true\r
- r.include?('vh').should be_true\r
- end\r
- end\r
- context '反転が許可されていないとき' do\r
- it '本画像(ベースディレクトリ)だけを返す' do\r
- Picture.any_instance.stub(:flag_reverse).with(any_args).and_return(-1)\r
- r = @p.subdirs\r
- r.size.should eq 1\r
- end\r
- end\r
- end\r
- \r
+ end
+ it '配列で返す' do
+ Picture.any_instance.stub(:flag_gif_convert).with(any_args).and_return(0)
+ r = @p.subdirs
+ r.is_a?(Array).should be_true
+ end
+ it '本画像(ベースディレクトリ)を含んでいる' do
+ Picture.any_instance.stub(:flag_reverse).with(any_args).and_return(0)
+ r = @p.subdirs
+ r.include?('').should be_true
+ end
+ context '反転が許可されているとき' do
+ it '垂直・水平・垂直水平反転ディレクトリも返す' do
+ Picture.any_instance.stub(:flag_reverse).with(any_args).and_return(0)
+ r = @p.subdirs
+ r.include?('v').should be_true
+ r.include?('h').should be_true
+ r.include?('vh').should be_true
+ end
+ end
+ context '反転が許可されていないとき' do
+ it '本画像(ベースディレクトリ)だけを返す' do
+ Picture.any_instance.stub(:flag_reverse).with(any_args).and_return(-1)
+ r = @p.subdirs
+ r.size.should eq 1
+ end
+ end
+ end
+
describe 'md5重複リストに於いて' do
before do
@op = FactoryGirl.create :original_picture, :artist_id => @artist.id
:original_picture_id => @op2.id, :md5 => 'b' * 32
@op3 = FactoryGirl.create :original_picture, :artist_id => @artist.id
end
- it 'リストを返す' do
- res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
- res.is_a?(Array).should be_true
- end
- it 'md5が違えば含まない' do
- res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
- res.include?(@p2).should be_false
- end
- it '同一原画は含まない' do
- res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
- res.empty?.should be_true
- end
- it '同一原画は旧版でも含まない' do
- @p3 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
- :original_picture_id => @op.id, :md5 => 'a' * 32
- res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
- res.empty?.should be_true
- end
- it '他所の原画なら含む' do
- @p3 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
- :original_picture_id => @op2.id, :md5 => 'a' * 32
- res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
- res.should eq [@p3]
- end
- it '他所の原画でもmd5が違えば含まない' do
- @p3 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
- :original_picture_id => @op2.id, :md5 => 'c' * 32
- res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
- res.empty?.should be_true
- end
- it '更新日時順' do
- @p3 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
- :original_picture_id => @op2.id, :md5 => 'a' * 32
- @p4 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
- :original_picture_id => @op3.id, :md5 => 'a' * 32, :updated_at => Time.now + 100
- res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
- res.should eq [@p4, @p3]
+ context '除外する原画idで指定されていないとき' do
+ it 'リストを返す' do
+ res = Picture.list_by_md5(@p.md5)
+ res.is_a?(Array).should be_true
+ end
+ it 'md5が違えば含まない' do
+ res = Picture.list_by_md5(@p.md5)
+ res.include?(@p2).should be_false
+ end
+ it '更新日時順' do
+ @p3 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
+ :original_picture_id => @op2.id, :md5 => 'C' * 32
+ @p4 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
+ :original_picture_id => @op3.id, :md5 => @p3.md5, :updated_at => Time.now + 100
+ res = Picture.find_by_md5(@p3.md5)
+ res.should eq [@p4, @p3]
+ end
+ end
+ context '除外する原画idで指定されたとき' do
+ it 'リストを返す' do
+ res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
+ res.is_a?(Array).should be_true
+ end
+ it 'md5が違えば含まない' do
+ res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
+ res.include?(@p2).should be_false
+ end
+ it '同一原画は含まない' do
+ res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
+ res.empty?.should be_true
+ end
+ it '同一原画は旧版でも含まない' do
+ @p3 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
+ :original_picture_id => @op.id, :md5 => 'a' * 32
+ res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
+ res.empty?.should be_true
+ end
+ it '他所の原画なら含む' do
+ @p3 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
+ :original_picture_id => @op2.id, :md5 => 'a' * 32
+ res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
+ res.should eq [@p3]
+ end
+ it '他所の原画でもmd5が違えば含まない' do
+ @p3 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
+ :original_picture_id => @op2.id, :md5 => 'c' * 32
+ res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
+ res.empty?.should be_true
+ end
+ it '更新日時順' do
+ @p3 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
+ :original_picture_id => @op2.id, :md5 => 'a' * 32
+ @p4 = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
+ :original_picture_id => @op3.id, :md5 => 'a' * 32, :updated_at => Time.now + 100
+ res = Picture.list_by_md5(@p.md5, @p.original_picture_id)
+ res.should eq [@p4, @p3]
+ end
end
end
describe '単体取得に於いて' do
before do
- @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id\r
+ @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
end
context 'つつがなく終わるとき' do
it '閲覧許可を問い合わせている' do
Picture.any_instance.stub(:save).with(any_args).and_return(true)
Picture.any_instance.stub(:store_picture).with(any_args).and_return(true)
Picture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
- @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'\r
+ @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'
end
it '自身を保存している' do
Picture.any_instance.should_receive(:save).with(any_args).exactly(1)
#すべての処理を正常パターンで通過させ、保存機能をチェックする。
Picture.any_instance.stub(:store_picture).with(any_args).and_return(true)
Picture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
- @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'\r
+ @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'
end
it 'Trueを返す' do
r = @p.store(@imager)
#すべての処理を正常パターンで通過させ、保存機能をチェックする。
Picture.any_instance.stub(:store_picture).with(any_args).and_return(true)
Picture.any_instance.stub(:to_gif?).with(any_args).and_return(false)
- @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'\r
+ @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'
end
it 'Trueを返す' do
r = @p.store(@imager)
context '自身の保存に失敗したとき' do
before do
Picture.any_instance.stub(:save).with(any_args).and_return(false)
- @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'\r
+ @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'
end
it 'Falseを返す' do
r = @p.store(@imager)
context '画像の保存に失敗したとき' do
before do
Picture.any_instance.stub(:store_picture).with(any_args).and_return(false)
- @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'\r
+ @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'
end
it 'Falseを返す' do
r = @p.store(@imager)
Picture.any_instance.stub(:store_picture).with(any_args).and_return(true)
Picture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
ImagerTest.stub(:load).with(any_args).and_return(false)
- @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'\r
+ @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'
end
it 'Falseを返す' do
r = @p.store(@imager)
Picture.any_instance.stub(:store_picture).with(@imager, '1.png').and_return(true)
Picture.any_instance.stub(:to_gif?).with(any_args).and_return(true)
Picture.any_instance.stub(:store_picture).with(@gifimager, '1.gif').and_return(false)
- @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'\r
+ @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'
end
it 'Falseを返す' do
r = @p.store(@imager)
PictureIO::LocalPicture.any_instance.stub(:delete).with(any_args).and_return(true)
Picture.any_instance.stub(:subdirs).with(any_args).and_return(['', 'v', 'h', 'vh'])
- @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'\r
+ @p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'
end
context '事前チェック' do
before do
end
+ describe '墨塗に於いて' do
+ before do
+ @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :ext => 'png'
+ end
+ context '事前チェック' do
+ before do
+ @imager = ImagerTest.load "abc\ndef\nghi"
+ Picture.any_instance.stub(:store).with(any_args).and_return(true)
+ PettanImager.stub(:load).with(any_args).and_return(@imager)
+ end
+ it '画像ライブラリにロードを依頼している' do
+ PettanImager.should_receive(:load).with(any_args).exactly(1)
+ r = @p.unpublish
+ end
+ it '自身に作成を依頼している' do
+ Picture.any_instance.should_receive(:store).with(any_args).exactly(1)
+ r = @p.unpublish
+ end
+ end
+ context 'つつがなく終わるとき' do
+ before do
+ Picture.any_instance.stub(:store).with(any_args).and_return(true)
+ end
+ it 'Trueを返す' do
+ r = @p.unpublish
+ r.should be_true
+ end
+ end
+ #例外ケース
+ context '画像ライブラリのロードに失敗したとき' do
+ before do
+ PettanImager.stub(:load).and_return(false)
+ end
+ it 'Falseを返す' do
+ r = @p.unpublish
+ r.should be_false
+ end
+ end
+ context '作成に失敗したとき' do
+ before do
+ Picture.any_instance.stub(:store).with(any_args).and_return(false)
+ end
+ it 'Falseを返す' do
+ r = @p.unpublish
+ r.should be_false
+ end
+ end
+ end
+
describe 'フラグ展開に於いて' do
before do
@p = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id,
end
end
+ describe 'エクスポートに於いて' do
+ before do
+ @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
+ @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
+ @p2 = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 1, :updated_at => Time.now + 1000
+ #開始日時以前の実素材
+ @old_op = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @old_p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @old_op.id, :license_id => @license.id, :revision => 0, :updated_at => Time.now - 1000
+ @old_rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @old_op.id, :license_id => @license.id, :picture_id => @old_p.id
+ #他人の実素材
+ @other_op = FactoryGirl.create :original_picture, :artist_id => @other_artist.id
+ @other_p = FactoryGirl.create :picture, :artist_id => @other_artist.id, :original_picture_id => @other_op.id, :license_id => @license.id, :revision => 0, :updated_at => Time.now + 100
+ @other_rp = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :original_picture_id => @other_op.id, :license_id => @license.id, :picture_id => @other_p.id
+ #貸手からの実素材排除
+ @outer_artist = FactoryGirl.create :artist_yas, :author_id => nil
+ @outer_op = FactoryGirl.create :original_picture, :artist_id => @outer_artist.id
+ @outer_p = FactoryGirl.create :picture, :artist_id => @outer_artist.id, :original_picture_id => @outer_op.id, :license_id => @license.id, :revision => 0
+ @outer_rp = FactoryGirl.create :resource_picture, :artist_id => @outer_artist.id, :original_picture_id => @outer_op.id, :license_id => @license.id, :picture_id => @outer_p.id
+ end
+ context 'つつがなく終わるとき' do
+ it '開始日時が省略された場合はすべての内実素材を返す' do
+ r = Picture.export
+ r.should eq [@p2, @other_p, @p, @old_p]
+ end
+ it '開始日時以降に更新された内実素材を返す' do
+ r = Picture.export @p.updated_at - 100
+ r.should eq [@p2, @other_p, @p]
+ end
+ end
+ end
+
+ describe 'リストのjson化に於いて' do
+ before do
+ @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
+ @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
+ @other_op = FactoryGirl.create :original_picture, :artist_id => @other_artist.id
+ @other_p = FactoryGirl.create :picture, :artist_id => @other_artist.id, :original_picture_id => @other_op.id, :license_id => @license.id, :revision => 0, :updated_at => Time.now + 100
+ @other_rp = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :original_picture_id => @other_op.id, :license_id => @license.id, :picture_id => @other_p.id
+ Picture.any_instance.stub(:restore).with(any_args).and_return('picture binary data')
+ end
+ context 'つつがなく終わるとき' do
+ it 'json文字列を返す' do
+ r = Picture.list_as_json_text Picture.all
+ lambda {
+ j = JSON.parse r
+ }.should_not raise_error(JSON::ParserError)
+ end
+ it '実素材リストを返す' do
+ r = Picture.list_as_json_text Picture.all
+ j = JSON.parse r
+ j.size.should eq 2
+ end
+ it '各実素材に画像データを添えて返す' do
+ r = Picture.list_as_json_text Picture.all
+ j = JSON.parse r
+ j.first['picture_data'].should_not be_nil
+ j.last['picture_data'].should_not be_nil
+ end
+ end
+ end
+
end