OSDN Git Service

t#30339:test
authoryasushiito <yas@pen-chan.jp>
Sun, 20 Jan 2013 02:37:11 +0000 (11:37 +0900)
committeryasushiito <yas@pen-chan.jp>
Sun, 20 Jan 2013 02:37:11 +0000 (11:37 +0900)
13 files changed:
app/models/original_picture.rb
app/models/provider_original_picture.rb
app/models/resource_picture.rb
app/views/original_pictures/browse.html.erb
app/views/original_pictures/index.html.erb
app/views/original_pictures/list.html.erb
app/views/original_pictures/show.html.erb
config/locales/pettanr.ja.yml
db/migrate/20130119013745_add_publish_date_on_op.rb [new file with mode: 0644]
spec/factories.rb
spec/models/original_picture_spec.rb
spec/models/provider_original_picture_spec.rb
spec/models/resource_picture_spec.rb

index 7bdacca..0332fbd 100644 (file)
@@ -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
index 86e6df2..0710d47 100644 (file)
@@ -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
index edc43be..bfd9bb9 100644 (file)
@@ -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')
index 08c39cd..e1cf771 100644 (file)
 </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>
index 530ea57..e07b8a3 100644 (file)
         <% 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 %>
index 66b6679..4af41b5 100644 (file)
@@ -10,6 +10,8 @@
     <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>
index 12a7fa2..e8e40c2 100644 (file)
         <% 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>
index e8b8a4b..4c9c49d 100644 (file)
@@ -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 (file)
index 0000000..cc8bc08
--- /dev/null
@@ -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
index ff73e07..03358af 100644 (file)
@@ -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|
index cab70e9..7de83d5 100644 (file)
@@ -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 'å®\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
@@ -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
index 5c332c1..10c6135 100644 (file)
@@ -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
index a2736a5..fc0a3bf 100644 (file)
@@ -718,9 +718,14 @@ describe ResourcePicture 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
@@ -744,6 +749,15 @@ describe ResourcePicture do
         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
@@ -755,6 +769,20 @@ describe ResourcePicture do
       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
@@ -1055,10 +1083,15 @@ describe ResourcePicture do
     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
@@ -1081,11 +1114,34 @@ describe ResourcePicture do
           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