end
def overwrite ar
+ self.uploaded_at = Time.now
self.artist_id = ar.id
end
end
def unpublished?
- self.pictures.empty?
+ self.published_at == nil and self.stopped_at == nil
end
def stopped?
- self.pictures.any? and self.resource_picture == nil
+ self.stopped_at != nil
end
def unlicensed?
- self.pictures.any? and self.resource_picture and self.updated_at > self.pictures.first.head.updated_at
+ dt = self.published_at || self.stopped_at
+ return false unless dt
+ self.uploaded_at > dt
end
def published?
- self.pictures.any? and self.resource_picture and self.updated_at < self.pictures.first.head.updated_at
+ self.published_at != nil
end
def self.default_page_size
end
end
+ def self.unpublish_resource_picture provider_original_picture, providers_original_picture_attr
+ res = true
+ resource_picture = if provider_original_picture.original_picture and provider_original_picture.original_picture.resource_picture
+ provider_original_picture.original_picture.resource_picture
+ else
+ nil
+ end
+ if providers_original_picture_attr['stopped_at'] and resource_picture
+ res = resource_picture.unpublish
+ end
+ res
+ end
+
def self.import_original_picture pid, providers_original_picture_attr
return providers_original_picture_attr unless ProviderOriginalPicture.replace_artist(pid, providers_original_picture_attr)
provider_original_picture = ProviderOriginalPicture.get_one(pid, providers_original_picture_attr['id'])
popid = providers_original_picture_attr['id']
providers_original_picture_attr.delete 'id'
- resource_picture = providers_original_picture_attr['resource_picture']
+# resource_picture = providers_original_picture_attr['resource_picture']
providers_original_picture_attr.delete 'resource_picture'
+ return providers_original_picture_attr unless ProviderOriginalPicture.unpublish_resource_picture provider_original_picture, providers_original_picture_attr
demander_original_picture = provider_original_picture.modify_original_picture providers_original_picture_attr
- providers_original_picture_attr['resource_picture'] = resource_picture
+# providers_original_picture_attr['resource_picture'] = resource_picture
return providers_original_picture_attr unless demander_original_picture.valid?
provider_original_picture.attributes = {:provider_id => pid, :providers_original_picture_id => popid, :demanders_original_picture_id => demander_original_picture.id}
return providers_original_picture_attr unless provider_original_picture.save
def self.import_original_pictures pid, providers_original_pictures
res = []
providers_original_pictures.each do |providers_original_picture_attr|
- org_attr = providers_original_picture_attr.dup
- if r = ProviderOriginalPicture.import_original_picture(pid, providers_original_picture_attr)
- res << org_attr
+ tmp_attr = providers_original_picture_attr.dup
+ if r = ProviderOriginalPicture.import_original_picture(pid, tmp_attr)
+ res << providers_original_picture_attr
end
end
res
def self.import_pictures pid, providers_pictures
res = []
providers_pictures.each do |providers_picture_attr|
- org_attr = providers_picture_attr.dup
- if r = ProviderOriginalPicture.import_picture(pid, providers_picture_attr)
- res << org_attr
+ tmp_attr = providers_picture_attr.dup
+ if r = ProviderOriginalPicture.import_picture(pid, tmp_attr)
+ res << providers_picture_attr
end
end
res
res = []
providers_original_pictures.each do |providers_original_picture_attr|
providers_resource_picture_attr = providers_original_picture_attr['resource_picture']
- org_attr = providers_resource_picture_attr.dup
- if r = ProviderOriginalPicture.import_resource_picture(pid, providers_resource_picture_attr)
- res << org_attr
+ next nil unless providers_resource_picture_attr
+ tmp_attr = providers_resource_picture_attr.dup
+ if r = ProviderOriginalPicture.import_resource_picture(pid, tmp_attr)
+ res << providers_resource_picture_attr
end
end
res
res = false
self.overwrite self.original_picture
ResourcePicture.transaction do
+ self.original_picture.published_at = Time.now
+ self.original_picture.stopped_at = nil
+ raise ActiveRecord::Rollback unless self.original_picture.save
pc = self.new_picture imager
if pc
self.picture_id = pc.id
def unpublish
res = false
ResourcePicture.transaction do
+ self.original_picture.published_at = nil
+ self.original_picture.stopped_at = Time.now
+ raise ActiveRecord::Rollback unless self.original_picture.save
begin
PictureIO.resource_picture_io.delete(self.filename) if PictureIO.resource_picture_io.exist?(self.filename)
PictureIO.resource_picture_io.delete(self.filename, 'full') if PictureIO.resource_picture_io.exist?(self.filename, 'full')
</p>
<p>
+ <b><%= t_m 'OriginalPicture.published_at' -%>:</b>
+ <% if @original_picture.published_at %>
+ <%= l @original_picture.published_at %>
+ <% end %>
+</p>
+
+<p>
+ <b><%= t_m 'OriginalPicture.stopped_at' -%>:</b>
+ <% if @original_picture.stopped_at %>
+ <%= l @original_picture.stopped_at %>
+ <% end %>
+</p>
+
+<p>
<b><%= t_m 'OriginalPicture.created_at' -%>:</b>
<%= l @original_picture.created_at %>
</p>
<% case true %>
<% when original_picture.unpublished? %>
<%= t('original_pictures.unpublished') %>
- <% when original_picture.stopped? %>
- <%= t('original_pictures.stopped') %>
<% when original_picture.unlicensed? %>
<%= t('original_pictures.unlicensed') %>
+ <% when original_picture.stopped? %>
+ <%= t('original_pictures.stopped') %>
<% when original_picture.published? %>
<%= t('original_pictures.published') %>
<% end %>
<th><%= t_m 'OriginalPicture.filesize' -%></th>
<th><%= t_m 'OriginalPicture.md5' -%></th>
<th><%= t_m 'OriginalPicture.artist_id' -%></th>
+ <th><%= t_m 'OriginalPicture.published_at' -%></th>
+ <th><%= t_m 'OriginalPicture.stopped_at' -%></th>
<th><%= t_m 'OriginalPicture.created_at' -%></th>
<th><%= t_m 'OriginalPicture.updated_at' -%></th>
</tr>
<td><%= original_picture.filesize %></td>
<td><%= h(truncate(original_picture.md5, :length => 8)) %></td>
<td><%= link_to original_picture.artist_id, browse_artist_path(original_picture.artist) %></td>
+ <td>
+ <% if original_picture.published_at %>
+ <%= distance_of_time_in_words_to_now original_picture.published_at %>
+ <% end %>
+ </td>
+ <td>
+ <% if original_picture.stopped_at %>
+ <%= distance_of_time_in_words_to_now original_picture.stopped_at %>
+ <% end %>
+ </td>
<td><%= l original_picture.created_at %></td>
<td><%= l original_picture.updated_at %></td>
</tr>
<% case true %>
<% when @original_picture.unpublished? %>
<%= t('original_pictures.unpublished') %>
- <% when @original_picture.stopped? %>
- <%= t('original_pictures.stopped') %>
<% when @original_picture.unlicensed? %>
<%= t('original_pictures.unlicensed') %>
+ <% when @original_picture.stopped? %>
+ <%= t('original_pictures.stopped') %>
<% when @original_picture.published? %>
<%= t('original_pictures.published') %>
<% end %>
</p>
<p>
+ <b><%= t_m 'OriginalPicture.published_at' -%>:</b>
+ <% if @original_picture.published_at %>
+ <%= l @original_picture.published_at %>
+ <% end %>
+ </p>
+
+ <p>
+ <b><%= t_m 'OriginalPicture.stopped_at' -%>:</b>
+ <% if @original_picture.stopped_at %>
+ <%= l @original_picture.stopped_at %>
+ <% end %>
+ </p>
+
+ <p>
<b><%= t_m 'OriginalPicture.created_at' -%>:</b>
<%= l @original_picture.created_at %>
</p>
filesize: ファイルサイズ
artist_id: 絵師
md5: MD5
+ published_at: 公開
+ stopped_at: 停止
created_at: 作成
updated_at: 更新
picture:
--- /dev/null
+class AddPublishDateOnOp < ActiveRecord::Migration
+ def up
+ add_column :original_pictures, :uploaded_at, :datetime
+ add_column :original_pictures, :published_at, :datetime
+ add_column :original_pictures, :stopped_at, :datetime
+ end
+
+ def down
+ remove_column :original_pictures, :uploaded_at
+ remove_column :original_pictures, :published_at
+ remove_column :original_pictures, :stopped_at
+ end
+end
op.filesize 100000
op.artist_id 1
op.md5 'op8f6bcd4621d373cade4e832627b4f6'
+ op.published_at nil
+ op.stopped_at nil
end
factory :oplg, :class => OriginalPictureLicenseGroup do |oplg|
end
describe '上書き補充に於いて' do
+ it '投稿日時が設定されている' do
+ @op = FactoryGirl.build :original_picture, :uploaded_at => nil
+ @op.overwrite @artist
+ @op.uploaded_at.should_not be_nil
+ end
it '絵師idが設定されている' do
@op = FactoryGirl.build :original_picture, :artist_id => nil
@op.overwrite @artist
before do
@op = FactoryGirl.create :original_picture, :artist_id => @artist.id
end
- context 'å®\9fç´ æ\9d\90ã\81\8cã\82¼ã\83のとき' do
+ context 'å\85¬é\96\8bæ\97¥æ\99\82ã\81¨å\81\9cæ¢æ\97¥æ\99\82ã\81\8cã\81¨ã\82\82ã\81«ç©ºのとき' do
it 'Trueを返す' do
r = @op.unpublished?
r.should be_true
end
end
- context 'å®\9fç´ æ\9d\90ã\81\8cã\82¼ã\83ではないとき' do
+ context 'å\85¬é\96\8bæ\97¥æ\99\82ã\81¨å\81\9cæ¢æ\97¥æ\99\82ã\81\8cã\81¨ã\82\82ã\81«ç©ºではないとき' do
it 'Falseを返す' do
- @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id
+ @op.stopped_at =Time.now
+ r = @op.unpublished?
+ r.should be_false
+ end
+ it 'Falseを返す' do
+ @op.published_at =Time.now
r = @op.unpublished?
r.should be_false
end
before do
@op = FactoryGirl.create :original_picture, :artist_id => @artist.id
end
- context '未公開ではないが、素材がないとき' do
+ context '停止日時が空でないとき' do
it 'Trueを返す' do
- @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id
+ @op.stopped_at =Time.now
r = @op.stopped?
r.should be_true
end
end
- context '未公開のとき' do
+ context '停止日時が空のとき' do
it 'Falseを返す' do
- r = @op.stopped?
- r.should be_false
- end
- end
- context '未公開ではなく、素材もあるとき' do
- it 'falseを返す' 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
+ @op.stopped_at = nil
r = @op.stopped?
r.should be_false
end
before do
@op = FactoryGirl.create :original_picture, :artist_id => @artist.id
end
- context '未公開ではなく、素材もあるが、原画の更新日時が実素材のheadのそれより後のとき' do
+ context '公開日時と停止日時のうち、空でない方を取得して、投稿日時がそれより後のとき' do
it 'Trueを返す' do
- @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :updated_at => Time.now - 1000
- @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
+ @op.uploaded_at = Time.now
+ @op.stopped_at = Time.now - 400
+ r = @op.unlicensed?
+ r.should be_true
+ end
+ it 'Trueを返す' do
+ @op.uploaded_at = Time.now
+ @op.published_at =Time.now - 400
r = @op.unlicensed?
r.should be_true
end
end
- context '未公開のとき' do
+ context '公開日時と停止日時のうち、空でない方を取得して、投稿日時がそれより後ではないとき' do
it 'Falseを返す' do
+ @op.published_at = nil
+ @op.stopped_at = nil
r = @op.unlicensed?
r.should be_false
end
- end
- context '未公開ではないが、素材がないとき' do
it 'Falseを返す' do
- @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id
+ @op.uploaded_at = Time.now
+ @op.published_at =Time.now + 400
r = @op.unlicensed?
r.should be_false
end
- end
- context '未公開ではなく、素材もあり、実素材のheadの更新日時が原画のそれより後のとき' do
it 'Falseを返す' do
- @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :updated_at => Time.now + 1000
- @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
+ @op.uploaded_at = Time.now
+ @op.stopped_at =Time.now + 400
r = @op.unlicensed?
r.should be_false
end
before do
@op = FactoryGirl.create :original_picture, :artist_id => @artist.id
end
- context '未公開ではなく、素材もあり、実素材のheadの更新日時が原画のそれより後のとき' do
+ context '公開日時が空ではないとき' do
it 'Trueを返す' do
- @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :updated_at => Time.now + 1000
- @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
+ @op.published_at =Time.now
r = @op.published?
r.should be_true
end
end
- context '未公開のとき' do
+ context '公開日時が空のとき' do
it 'Falseを返す' do
- r = @op.published?
- r.should be_false
- end
- end
- context '未公開ではないが、素材がないとき' do
- it 'falseを返す' do
- @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id
- r = @op.published?
- r.should be_false
- end
- end
- context '未公開ではなく、素材もあるが、原画の更新日時が実素材のheadのそれより後のとき' do
- it 'falseを返す' do
- @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :updated_at => Time.now - 1000
- @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
+ @op.published_at = nil
r = @op.published?
r.should be_false
end
end
end
+ describe '素材停止に於いて' do
+ before do
+ @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
+ @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
+ rpattr = {:original_picture_id => @op.id, :picture_id => @p.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester',
+ :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
+ @rp = FactoryGirl.create :resource_picture, rpattr
+ end
+ context '貸手側原画のカラム値の停止日時が設定されているとき' do
+ before do
+ @pop = ProviderOriginalPicture.create :provider_id => @provider.id, :providers_original_picture_id => 1, :demanders_original_picture_id => @op.id
+ @stopped_op = FactoryGirl.build :original_picture, :artist_id => @artist.id, :stopped_at => Time.now + 400
+ @stopped_op_attr = @stopped_op.attributes
+ ResourcePicture.any_instance.stub(:unpublish).with(any_args).and_return(true)
+ end
+ context '対照表から素材を取得できるとき' do
+ before do
+ @stopped_op = FactoryGirl.build :original_picture, :artist_id => @artist.id, :stopped_at => Time.now + 400
+ end
+ it '素材に停止を依頼している' do
+ ResourcePicture.any_instance.should_receive(:unpublish).with(any_args).exactly(1)
+ r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
+ end
+ end
+ context '対照表から原画を取得できないとき' do
+ before do
+ @pop = ProviderOriginalPicture.new
+ end
+ it '素材に停止を依頼していない' do
+ ResourcePicture.any_instance.should_not_receive(:unpublish).with(any_args)
+ r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
+ end
+ end
+ context '対照表から素材を取得できないとき' do
+ before do
+ @rp.destroy
+ end
+ it '素材に停止を依頼していない' do
+ ResourcePicture.any_instance.should_not_receive(:unpublish).with(any_args)
+ r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
+ end
+ end
+ end
+ context '貸手側原画のカラム値の停止日時が設定されていないとき' do
+ before do
+ @pop = ProviderOriginalPicture.create :provider_id => @provider.id, :providers_original_picture_id => 1, :demanders_original_picture_id => @op.id
+ @stopped_op = FactoryGirl.build :original_picture, :artist_id => @artist.id, :stopped_at => nil
+ @stopped_op_attr = @stopped_op.attributes
+ ResourcePicture.any_instance.stub(:unpublish).with(any_args).and_return(true)
+ end
+ it '素材に停止を依頼していない' do
+ ResourcePicture.any_instance.should_not_receive(:unpublish).with(any_args)
+ r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
+ end
+ end
+ context 'つつがなく終わるとき' do
+ before do
+ @pop = ProviderOriginalPicture.create :provider_id => @provider.id, :providers_original_picture_id => 1, :demanders_original_picture_id => @op.id
+ @stopped_op = FactoryGirl.build :original_picture, :artist_id => @artist.id, :stopped_at => Time.now + 400
+ @stopped_op_attr = @stopped_op.attributes
+ ResourcePicture.any_instance.stub(:unpublish).with(any_args).and_return(true)
+ end
+ it 'trueを返す' do
+ r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
+ r.should be_true
+ end
+ end
+ context '素材停止に失敗したとき' do
+ before do
+ @pop = ProviderOriginalPicture.create :provider_id => @provider.id, :providers_original_picture_id => 1, :demanders_original_picture_id => @op.id
+ @stopped_op = FactoryGirl.build :original_picture, :artist_id => @artist.id, :stopped_at => Time.now + 400
+ @stopped_op_attr = @stopped_op.attributes
+ ResourcePicture.any_instance.stub(:unpublish).with(any_args).and_return(false)
+ end
+ it 'falseを返す' do
+ r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
+ r.should be_false
+ end
+ end
+ end
+
describe '原画インポートに於いて' do
before do
@op = FactoryGirl.create :original_picture, :artist_id => @artist.id
before do
ProviderOriginalPicture.stub(:get_one).with(any_args).and_return(ProviderOriginalPicture.new)
ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
+ ProviderOriginalPicture.stub(:unpublish_resource_picture).with(any_args).and_return(true)
ProviderOriginalPicture.any_instance.stub(:modify_original_picture).with(any_args).and_return(@op)
OriginalPicture.any_instance.stub(:valid?).with(any_args).and_return(true)
ProviderOriginalPicture.any_instance.stub(:save).with(any_args).and_return(true)
ProviderOriginalPicture.should_receive(:replace_artist).with(any_args).exactly(1)
r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
end
- it '対照表に原画同期を依頼してしている' do
+ it '素材停止を依頼している' do
+ ProviderOriginalPicture.should_receive(:unpublish_resource_picture).with(any_args).exactly(1)
+ r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
+ end
+ it '対照表に原画同期を依頼している' do
ProviderOriginalPicture.any_instance.should_receive(:modify_original_picture).with(any_args).exactly(1)
r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
end
end
context '複数インポートのとき' do
before do
+ #前回インポートで貸手からもらった素材
+ @other_p = FactoryGirl.create :picture, :original_picture_id => @other_op.id, :license_id => @license.id, :artist_id => @artist.id
+ rpattr = {:original_picture_id => @other_op.id, :picture_id => @other_p.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester',
+ :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
+ @other_rp = FactoryGirl.create :resource_picture, rpattr
+ #対照表も用意されている
+ @pop = ProviderOriginalPicture.create :provider_id => @provider.id, :providers_original_picture_id => @other_op.id, :demanders_original_picture_id => @other_op.id
+ #これが今回停止される
+ @other_op_attr = @other_op.attributes
+ @other_op_attr['stopped_at'] = Time.now - 100
+ @other_op_attr['created_at'] = Time.now - 100
+ @other_op_attr['updated_at'] = Time.now - 100
ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
end
it '空っぽの配列を返す' do
- r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @other_op.attributes]
+ r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @other_op_attr]
r.should be_empty
end
- it '対照表が追加される' do
+ it '新規分の対照表が追加される' do
lambda {
- r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @other_op.attributes]
- }.should change(ProviderOriginalPicture, :count).by(2)
+ r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @other_op_attr]
+ }.should change(ProviderOriginalPicture, :count)
+ end
+ it '停止された素材が削除される' do
+ lambda {
+ r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @other_op_attr]
+ }.should change(ResourcePicture, :count)
+ end
+ it '原画の日時は貸手と一致しており、素材停止の影響を受けていない' do
+ r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @other_op_attr]
+ @other_op.reload
+ @other_op.updated_at.should eq @other_op_attr['updated_at']
end
end
#警告ケース
ResourcePicture.any_instance.should_receive(:save).with(any_args).exactly(1)
r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
end
+ context '素材のカラム値を取得できないとき' do
+ before do
+ @attr['resource_picture'] = nil
+ ProviderOriginalPicture.stub(:import_resource_picture).with(any_args).and_return(nil)
+ end
+ it '素材インポートを依頼していない' do
+ ProviderOriginalPicture.should_not_receive(:import_resource_picture).with(any_args)
+ r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
+ end
+ end
end
context 'つつがなく終わるとき' do
before do
before do\r
#すべての処理が正常パターンで通過すれば、一番深い分岐まで通る。\r
#それで外部のメソッド呼び出しだけに着目してテストする。\r
+ OriginalPicture.any_instance.stub(:save).and_return(true)\r
ResourcePicture.any_instance.stub(:new_picture).with(any_args).and_return(@p)\r
ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(true)\r
end\r
+ it '原画に保存を依頼している' do\r
+ OriginalPicture.any_instance.should_receive(:save).exactly(1)\r
+ r = @rp.store @imager\r
+ end\r
it '新規実素材の取得を依頼している' do\r
ResourcePicture.any_instance.should_receive(:new_picture).with(any_args).exactly(1)\r
r = @rp.store @imager\r
r = @rp.store @imager\r
r.should be_true\r
end\r
+ it '原画の停止日時をクリアする' do\r
+ r = @rp.store @imager\r
+ @rp.original_picture.stopped_at.should be_nil\r
+ end\r
+ it '原画の公開日時に現在時刻をセットする' do\r
+ lambda {\r
+ r = @rp.store @imager\r
+ }.should change(@rp.original_picture, :published_at)\r
+ end\r
it '実素材idから最新画像idを取得してセットしている' do\r
r = @rp.store @imager\r
@rp.picture_id.should eq @p.id\r
end\r
end\r
#以下から例外ケース。処理先頭から失敗させていく\r
+ context '原画の保存に失敗したとき' do\r
+ before do\r
+ OriginalPicture.any_instance.stub(:save).and_return(false)\r
+ end\r
+ it 'Falseを返す' do\r
+ r = @rp.unpublish\r
+ r.should be_false\r
+ end\r
+ it 'ロールバックしている' do\r
+ lambda {\r
+ r = @rp.unpublish\r
+ }.should_not change(ResourcePicture, :count)\r
+ end\r
+ end\r
context '画像オブジェクトの取得に失敗したとき' do\r
before do\r
@imager = false\r
end\r
context '事前チェックしておく' do\r
before do\r
+ OriginalPicture.any_instance.stub(:save).and_return(true)\r
ResourcePicture.any_instance.stub(:destroy).and_return(true)\r
PictureIO.resource_picture_io.stub(:delete).with(@rp.filename).and_return(true)\r
PictureIO.resource_picture_io.stub(:delete).with(@rp.filename, 'full').and_return(true)\r
end\r
+ it '原画に保存を依頼している' do\r
+ OriginalPicture.any_instance.should_receive(:save).exactly(1)\r
+ r = @rp.unpublish\r
+ end\r
it '素材モデルに削除を依頼している' do\r
ResourcePicture.any_instance.should_receive(:destroy).exactly(1)\r
r = @rp.unpublish\r
r = ResourcePicture.find @rp.id\r
}.should raise_error\r
end\r
+ it '原画の公開日時をクリアする' do\r
+ r = @rp.store @imager\r
+ @rp.original_picture.published_at.should be_nil\r
+ end\r
+ it '原画の停止日時に現在時刻をセットする' do\r
+ lambda {\r
+ r = @rp.unpublish\r
+ }.should change(@rp.original_picture, :stopped_at)\r
+ end\r
it 'Trueを返す' do\r
r = @rp.unpublish\r
r.should be_true\r
end\r
end\r
+ context '原画の保存に失敗したとき' do\r
+ before do\r
+ OriginalPicture.any_instance.stub(:save).and_return(false)\r
+ end\r
+ it 'Falseを返す' do\r
+ r = @rp.unpublish\r
+ r.should be_false\r
+ end\r
+ it 'ロールバックしている' do\r
+ lambda {\r
+ r = @rp.unpublish\r
+ }.should_not change(ResourcePicture, :count)\r
+ end\r
+ end\r
context '自身の削除に失敗したとき' do\r
before do\r
ResourcePicture.any_instance.stub(:destroy).with(any_args).and_return(false)\r