From: yasushiito Date: Sun, 20 Jan 2013 02:37:11 +0000 (+0900) Subject: t#30339:test X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=e268dd56e460e3f76ce7d96571696b07a2c9a821;p=pettanr%2Fpettanr.git t#30339:test --- diff --git a/app/models/original_picture.rb b/app/models/original_picture.rb index 7bdaccaa..0332fbd7 100644 --- a/app/models/original_picture.rb +++ b/app/models/original_picture.rb @@ -15,6 +15,7 @@ class OriginalPicture < ActiveRecord::Base end def overwrite ar + self.uploaded_at = Time.now self.artist_id = ar.id end @@ -55,19 +56,21 @@ class OriginalPicture < ActiveRecord::Base 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 diff --git a/app/models/provider_original_picture.rb b/app/models/provider_original_picture.rb index 86e6df2a..0710d475 100644 --- a/app/models/provider_original_picture.rb +++ b/app/models/provider_original_picture.rb @@ -63,15 +63,29 @@ class ProviderOriginalPicture < ActiveRecord::Base 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 @@ -81,9 +95,9 @@ class ProviderOriginalPicture < ActiveRecord::Base 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 @@ -107,9 +121,9 @@ class ProviderOriginalPicture < ActiveRecord::Base 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 @@ -135,9 +149,10 @@ class ProviderOriginalPicture < ActiveRecord::Base 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 diff --git a/app/models/resource_picture.rb b/app/models/resource_picture.rb index edc43be2..bfd9bb97 100644 --- a/app/models/resource_picture.rb +++ b/app/models/resource_picture.rb @@ -162,6 +162,9 @@ class ResourcePicture < ActiveRecord::Base 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 @@ -215,6 +218,9 @@ class ResourcePicture < ActiveRecord::Base 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') diff --git a/app/views/original_pictures/browse.html.erb b/app/views/original_pictures/browse.html.erb index 08c39cd9..e1cf771f 100644 --- a/app/views/original_pictures/browse.html.erb +++ b/app/views/original_pictures/browse.html.erb @@ -39,6 +39,20 @@

+ <%= t_m 'OriginalPicture.published_at' -%>: + <% if @original_picture.published_at %> + <%= l @original_picture.published_at %> + <% end %> +

+ +

+ <%= t_m 'OriginalPicture.stopped_at' -%>: + <% if @original_picture.stopped_at %> + <%= l @original_picture.stopped_at %> + <% end %> +

+ +

<%= t_m 'OriginalPicture.created_at' -%>: <%= l @original_picture.created_at %>

diff --git a/app/views/original_pictures/index.html.erb b/app/views/original_pictures/index.html.erb index 530ea570..e07b8a3d 100644 --- a/app/views/original_pictures/index.html.erb +++ b/app/views/original_pictures/index.html.erb @@ -26,10 +26,10 @@ <% 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 %> diff --git a/app/views/original_pictures/list.html.erb b/app/views/original_pictures/list.html.erb index 66b6679a..4af41b58 100644 --- a/app/views/original_pictures/list.html.erb +++ b/app/views/original_pictures/list.html.erb @@ -10,6 +10,8 @@ <%= t_m 'OriginalPicture.filesize' -%> <%= t_m 'OriginalPicture.md5' -%> <%= t_m 'OriginalPicture.artist_id' -%> + <%= t_m 'OriginalPicture.published_at' -%> + <%= t_m 'OriginalPicture.stopped_at' -%> <%= t_m 'OriginalPicture.created_at' -%> <%= t_m 'OriginalPicture.updated_at' -%> @@ -24,6 +26,16 @@ <%= original_picture.filesize %> <%= h(truncate(original_picture.md5, :length => 8)) %> <%= link_to original_picture.artist_id, browse_artist_path(original_picture.artist) %> + + <% if original_picture.published_at %> + <%= distance_of_time_in_words_to_now original_picture.published_at %> + <% end %> + + + <% if original_picture.stopped_at %> + <%= distance_of_time_in_words_to_now original_picture.stopped_at %> + <% end %> + <%= l original_picture.created_at %> <%= l original_picture.updated_at %> diff --git a/app/views/original_pictures/show.html.erb b/app/views/original_pictures/show.html.erb index 12a7fa29..e8e40c2e 100644 --- a/app/views/original_pictures/show.html.erb +++ b/app/views/original_pictures/show.html.erb @@ -12,10 +12,10 @@ <% 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 %> @@ -52,6 +52,20 @@

+ <%= t_m 'OriginalPicture.published_at' -%>: + <% if @original_picture.published_at %> + <%= l @original_picture.published_at %> + <% end %> +

+ +

+ <%= t_m 'OriginalPicture.stopped_at' -%>: + <% if @original_picture.stopped_at %> + <%= l @original_picture.stopped_at %> + <% end %> +

+ +

<%= t_m 'OriginalPicture.created_at' -%>: <%= l @original_picture.created_at %>

diff --git a/config/locales/pettanr.ja.yml b/config/locales/pettanr.ja.yml index e8b8a4bc..4c9c49d1 100644 --- a/config/locales/pettanr.ja.yml +++ b/config/locales/pettanr.ja.yml @@ -161,6 +161,8 @@ ja: filesize: ファイルサイズ artist_id: 絵師 md5: MD5 + published_at: 公開 + stopped_at: 停止 created_at: 作成 updated_at: 更新 picture: diff --git a/db/migrate/20130119013745_add_publish_date_on_op.rb b/db/migrate/20130119013745_add_publish_date_on_op.rb new file mode 100644 index 00000000..cc8bc085 --- /dev/null +++ b/db/migrate/20130119013745_add_publish_date_on_op.rb @@ -0,0 +1,13 @@ +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 diff --git a/spec/factories.rb b/spec/factories.rb index ff73e071..03358af0 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -79,6 +79,8 @@ FactoryGirl.define do 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| diff --git a/spec/models/original_picture_spec.rb b/spec/models/original_picture_spec.rb index cab70e9d..7de83d5e 100644 --- a/spec/models/original_picture_spec.rb +++ b/spec/models/original_picture_spec.rb @@ -146,6 +146,11 @@ describe OriginalPicture do 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 @@ -297,15 +302,20 @@ describe OriginalPicture do before do @op = FactoryGirl.create :original_picture, :artist_id => @artist.id end - context '実素材がゼロのとき' do + context '公開日時と停止日時がともに空のとき' do it 'Trueを返す' do r = @op.unpublished? r.should be_true end end - context '実素材がゼロではないとき' do + context '公開日時と停止日時がともに空ではないとき' 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 @@ -316,23 +326,16 @@ describe OriginalPicture do 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 @@ -343,31 +346,36 @@ describe OriginalPicture do 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 @@ -378,31 +386,16 @@ describe OriginalPicture do 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 diff --git a/spec/models/provider_original_picture_spec.rb b/spec/models/provider_original_picture_spec.rb index 5c332c12..10c61355 100644 --- a/spec/models/provider_original_picture_spec.rb +++ b/spec/models/provider_original_picture_spec.rb @@ -286,6 +286,87 @@ describe ProviderOriginalPicture do 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 @@ -295,6 +376,7 @@ describe ProviderOriginalPicture do 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) @@ -307,7 +389,11 @@ describe ProviderOriginalPicture do 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 @@ -336,16 +422,38 @@ describe ProviderOriginalPicture do 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 #警告ケース @@ -569,6 +677,16 @@ describe ProviderOriginalPicture do 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 diff --git a/spec/models/resource_picture_spec.rb b/spec/models/resource_picture_spec.rb index a2736a5b..fc0a3bf6 100644 --- a/spec/models/resource_picture_spec.rb +++ b/spec/models/resource_picture_spec.rb @@ -718,9 +718,14 @@ describe ResourcePicture do before do #すべての処理が正常パターンで通過すれば、一番深い分岐まで通る。 #それで外部のメソッド呼び出しだけに着目してテストする。 + OriginalPicture.any_instance.stub(:save).and_return(true) ResourcePicture.any_instance.stub(:new_picture).with(any_args).and_return(@p) ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(true) end + it '原画に保存を依頼している' do + OriginalPicture.any_instance.should_receive(:save).exactly(1) + r = @rp.store @imager + end it '新規実素材の取得を依頼している' do ResourcePicture.any_instance.should_receive(:new_picture).with(any_args).exactly(1) r = @rp.store @imager @@ -744,6 +749,15 @@ describe ResourcePicture do r = @rp.store @imager r.should be_true end + it '原画の停止日時をクリアする' do + r = @rp.store @imager + @rp.original_picture.stopped_at.should be_nil + end + it '原画の公開日時に現在時刻をセットする' do + lambda { + r = @rp.store @imager + }.should change(@rp.original_picture, :published_at) + end it '実素材idから最新画像idを取得してセットしている' do r = @rp.store @imager @rp.picture_id.should eq @p.id @@ -755,6 +769,20 @@ describe ResourcePicture do end end #以下から例外ケース。処理先頭から失敗させていく + context '原画の保存に失敗したとき' do + before do + OriginalPicture.any_instance.stub(:save).and_return(false) + end + it 'Falseを返す' do + r = @rp.unpublish + r.should be_false + end + it 'ロールバックしている' do + lambda { + r = @rp.unpublish + }.should_not change(ResourcePicture, :count) + end + end context '画像オブジェクトの取得に失敗したとき' do before do @imager = false @@ -1055,10 +1083,15 @@ describe ResourcePicture do end context '事前チェックしておく' do before do + OriginalPicture.any_instance.stub(:save).and_return(true) ResourcePicture.any_instance.stub(:destroy).and_return(true) PictureIO.resource_picture_io.stub(:delete).with(@rp.filename).and_return(true) PictureIO.resource_picture_io.stub(:delete).with(@rp.filename, 'full').and_return(true) end + it '原画に保存を依頼している' do + OriginalPicture.any_instance.should_receive(:save).exactly(1) + r = @rp.unpublish + end it '素材モデルに削除を依頼している' do ResourcePicture.any_instance.should_receive(:destroy).exactly(1) r = @rp.unpublish @@ -1081,11 +1114,34 @@ describe ResourcePicture do r = ResourcePicture.find @rp.id }.should raise_error end + it '原画の公開日時をクリアする' do + r = @rp.store @imager + @rp.original_picture.published_at.should be_nil + end + it '原画の停止日時に現在時刻をセットする' do + lambda { + r = @rp.unpublish + }.should change(@rp.original_picture, :stopped_at) + end it 'Trueを返す' do r = @rp.unpublish r.should be_true end end + context '原画の保存に失敗したとき' do + before do + OriginalPicture.any_instance.stub(:save).and_return(false) + end + it 'Falseを返す' do + r = @rp.unpublish + r.should be_false + end + it 'ロールバックしている' do + lambda { + r = @rp.unpublish + }.should_not change(ResourcePicture, :count) + end + end context '自身の削除に失敗したとき' do before do ResourcePicture.any_instance.stub(:destroy).with(any_args).and_return(false)