OSDN Git Service

t#31223:add them contents list for author and artist
[pettanr/pettanr.git] / spec / models / provider_original_picture_spec.rb
1 # -*- encoding: utf-8 -*-
2 #原画対照表
3 require 'spec_helper'
4
5 describe ProviderOriginalPicture do
6   before do
7     @admin = FactoryGirl.create :admin
8     @sp = FactoryGirl.create :system_picture
9     @lg = FactoryGirl.create :license_group
10     @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
11     @user = FactoryGirl.create :user_yas
12     @author = FactoryGirl.create :author, :user_id => @user.id
13     @artist = FactoryGirl.create :artist, :author_id => @author.id
14     @other_user = FactoryGirl.create :user_yas
15     @other_author = FactoryGirl.create :author, :user_id => @other_user.id
16     @other_artist = FactoryGirl.create :artist, :author_id => @other_author.id
17     @provider_status = FactoryGirl.create :provider_status
18     @provider = FactoryGirl.create :provider, :provider_status_id => @provider_status.id
19   end
20   describe '検証に於いて' do
21     before do
22       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
23       @pop = FactoryGirl.build :provider_original_picture, :provider_id => @provider.id, :providers_original_picture_id => 2, :demanders_original_picture_id => @op.id
24     end
25     
26     context 'オーソドックスなデータのとき' do
27       it '下限データが通る' do
28         @pop.should be_valid
29       end
30       it '上限データが通る' do
31         @pop.should be_valid
32       end
33     end
34     
35     context 'provider_idを検証するとき' do
36       it 'nullなら失敗する' do
37         @pop.provider_id = nil
38         @pop.should_not be_valid
39       end
40       it '数値でなければ失敗する' do
41         @pop.provider_id = 'a'
42         @pop.should_not be_valid
43       end
44       it '存在する貸手でなければ失敗する' do
45         @pop.provider_id = 0
46         @pop.should_not be_valid
47       end
48     end
49     context 'providers_original_picture_idを検証するとき' do
50       it 'nullなら失敗する' do
51         @pop.providers_original_picture_id = nil
52         @pop.should_not be_valid
53       end
54       it '数値でなければ失敗する' do
55         @pop.providers_original_picture_id = 'a'
56         @pop.should_not be_valid
57       end
58     end
59     context 'demanders_original_picture_idを検証するとき' do
60       it 'nullなら失敗する' do
61         @pop.demanders_original_picture_id = nil
62         @pop.should_not be_valid
63       end
64       it '数値でなければ失敗する' do
65         @pop.demanders_original_picture_id = 'a'
66         @pop.should_not be_valid
67       end
68     end
69   end
70   
71   describe '対照表取得に於いて' do
72     before do
73       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
74       @pop = FactoryGirl.create :provider_original_picture, :provider_id => @provider.id, :providers_original_picture_id => 2, :demanders_original_picture_id => @op.id
75     end
76     it '取得した対照表を返す' do
77       r = ProviderOriginalPicture.get_one @provider.id, 2
78       r.should be_true
79     end
80     it '該当する対照表が存在しなかったら、新規に興した対照表オブジェクトを返す' do
81       r = ProviderOriginalPicture.get_one @provider.id, 1
82       r.should be_a_new ProviderOriginalPicture
83       r = ProviderOriginalPicture.get_one 0, 2
84       r.should be_a_new ProviderOriginalPicture
85     end
86   end
87   
88   describe '貸手側原画同期に於いて' do
89     before do
90       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
91       @pop = FactoryGirl.create :provider_original_picture, :provider_id => @provider.id, :providers_original_picture_id => 2, :demanders_original_picture_id => @op.id
92       @newpop = ProviderOriginalPicture.new
93     end
94     context '自身に原画がリンクしてないとき' do
95       before do
96       end
97       it '原画オブジェクトを新規に興す' do
98         lambda {
99           r = @newpop.modify_original_picture @op.attributes
100         }.should change OriginalPicture, :count
101       end
102     end
103     context '自身に原画がリンクしているとき' do
104       it '自身から原画を取得する' do
105         lambda {
106           r = @pop.modify_original_picture @op.attributes
107         }.should_not change OriginalPicture, :count
108       end
109     end
110     it '貸手側原画カラム値からカラム値をセットする 原画オブジェクトを保存する' do
111       r = @pop.modify_original_picture :filesize => 3346
112       @op.reload
113       @op.filesize.should eq 3346
114     end
115     it '原画オブジェクトを返す' do
116       r = @pop.modify_original_picture @op.attributes
117       r.should eq @op
118     end
119   end
120
121   describe '貸手側実素材同期に於いて' do
122     before do
123       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
124       @p = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 0,
125         :original_picture_id => @op.id
126       @p2 = FactoryGirl.build :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 1,
127         :original_picture_id => @op.id
128     end
129     context '実素材が取得できないとき' do
130       before do
131       end
132       it '実素材オブジェクトを新規に興す' do
133         r = ProviderOriginalPicture.modify_picture @p2.attributes
134         r.should be_a_new Picture
135       end
136     end
137     context '実素材が取得できるとき' do
138       it '実素材に原画idRevision取得を依頼して、実素材を取得している' do
139         r = ProviderOriginalPicture.modify_picture @p.attributes
140         r.should_not be_a_new Picture
141         r.should eq @p
142       end
143     end
144     it '実素材にカラム値をセットする' do
145       r = ProviderOriginalPicture.modify_picture({:original_picture_id => @p.id, :revision => 0, :filesize => 3346})
146       r.filesize.should eq 3346
147     end
148     it '実素材を返す' do
149       r = ProviderOriginalPicture.modify_picture @p.attributes
150       r.should eq @p
151     end
152   end
153
154   describe '貸手側素材同期に於いて' do
155     before do
156       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
157       @p = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 0,
158         :original_picture_id => @op.id
159       @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
160       @attr = FactoryGirl.attributes_for :resource_picture, :artist_id => @artist.id, :original_picture_id => 111, :license_id => @license.id, :picture_id => @p.id, :filesize => 36225
161     end
162     context '素材が取得できないとき' do
163       before do
164       end
165       it '素材オブジェクトを新規に興す' do
166         r = ProviderOriginalPicture.modify_resource_picture @attr
167         r.should be_a_new ResourcePicture
168       end
169     end
170     context '素材が取得できるとき' do
171       it '素材に原画id取得を依頼して、素材を取得している' do
172         r = ProviderOriginalPicture.modify_resource_picture @rp.attributes
173         r.should_not be_a_new ResourcePicture
174         r.should eq @rp
175       end
176     end
177     it '素材にカラム値をセットする' do
178       r = ProviderOriginalPicture.modify_resource_picture @attr
179       r.filesize.should eq 36225
180     end
181     it '素材を返す' do
182       r = ProviderOriginalPicture.modify_resource_picture @rp.attributes
183       r.should eq @rp
184     end
185   end
186   
187   describe '絵師id置換に於いて' do
188     before do
189       @pa = FactoryGirl.create :provider_artist, :provider_id => @provider.id, :providers_artist_id => 5, :demanders_artist_id => @artist.id
190       @pa2 = FactoryGirl.create :provider_artist, :provider_id => @provider.id, :providers_artist_id => 3, :demanders_artist_id => @other_artist.id
191     end
192     context 'つつがなく終わるとき' do
193       before do
194       end
195       it 'trueを返す' do
196         @attr5 = {'artist_id' => 5}
197         r = ProviderOriginalPicture.replace_artist @provider.id, @attr5
198         r.should be_true
199       end
200       it 'カラム値の絵師idを借手側の絵師のidで置き換える' do
201         @attr5 = {'artist_id' => 5}
202         r = ProviderOriginalPicture.replace_artist @provider.id, @attr5
203         @attr5['artist_id'].should eq @artist.id
204         @attr3 = {'artist_id' => 3}
205         r = ProviderOriginalPicture.replace_artist @provider.id, @attr3
206         @attr3['artist_id'].should eq @other_artist.id
207       end
208     end
209     context '借手側の絵師がなかったとき' do
210       before do
211       end
212       it 'falseを返す' do
213         @attr = {'artist_id' => 1}
214         r = ProviderOriginalPicture.replace_artist @provider.id, @attr
215         r.should be_false
216       end
217     end
218   end
219   
220   describe 'ライセンスid置換に於いて' do
221     before do
222       @other_license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id, :url => 'http://other.license', :name => 'other_license'
223       @pl = FactoryGirl.create :provider_license, :provider_id => @provider.id, :providers_license_id => 4, :demanders_license_id => @license.id
224       @pl2 = FactoryGirl.create :provider_license, :provider_id => @provider.id, :providers_license_id => 2, :demanders_license_id => @other_license.id
225     end
226     context 'つつがなく終わるとき' do
227       before do
228       end
229       it 'trueを返す' do
230         @attr5 = {'license_id' => 4}
231         r = ProviderOriginalPicture.replace_license @provider.id, @attr5
232         r.should be_true
233       end
234       it 'カラム値のライセンスidを借手側のライセンスのidで置き換える' do
235         @attr4 = {'license_id' => 4}
236         r = ProviderOriginalPicture.replace_license @provider.id, @attr4
237         @attr4['license_id'].should eq @license.id
238         @attr2 = {'license_id' => 2}
239         r = ProviderOriginalPicture.replace_license @provider.id, @attr2
240         @attr2['license_id'].should eq @other_license.id
241       end
242     end
243     context '借手側のライセンスがなかったとき' do
244       before do
245       end
246       it 'falseを返す' do
247         @attr = {'license_id' => 1}
248         r = ProviderOriginalPicture.replace_license @provider.id, @attr
249         r.should be_false
250       end
251     end
252   end
253   
254   describe '実素材id置換に於いて' do
255     before do
256       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
257       @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
258       @rpattr = {:original_picture_id => @op.id, :picture_id => 3, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
259         :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
260     end
261     context '事前チェックする' do
262       before do
263         Picture.stub(:head).with(any_args).and_return(@p)
264       end
265       it '実素材にhead取得を問い合わせている' do
266         Picture.should_receive(:head).with(any_args).exactly(1)
267         r = ProviderOriginalPicture.replace_picture @provider.id, @rpattr
268       end
269     end
270     context 'つつがなく終わるとき' do
271       before do
272         Picture.stub(:head).with(any_args).and_return(@p)
273       end
274       it 'trueを返す' do
275         r = ProviderOriginalPicture.replace_picture @provider.id, @rpattr
276         r.should be_true
277       end
278       it 'カラム値の実素材idを借手側の実素材のidで置き換える' do
279         r = ProviderOriginalPicture.replace_picture @provider.id, @rpattr
280         @rpattr['picture_id'].should eq @p.id
281       end
282     end
283     context '借手側の実素材がなかったとき' do
284       before do
285         Picture.stub(:head).with(any_args).and_return(nil)
286       end
287       it 'falseを返す' do
288         r = ProviderOriginalPicture.replace_picture @provider.id, @rpattr
289         r.should be_false
290       end
291     end
292   end
293   
294   describe '原画id置換に於いて' do
295     before do
296       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
297       @other_op = FactoryGirl.create :original_picture, :artist_id => @artist.id
298       @pop = FactoryGirl.create :provider_original_picture, :provider_id => @provider.id, :providers_original_picture_id => 6, :demanders_original_picture_id => @op.id
299       @pop2 = FactoryGirl.create :provider_original_picture, :provider_id => @provider.id, :providers_original_picture_id => 9, :demanders_original_picture_id => @other_op.id
300     end
301     context 'つつがなく終わるとき' do
302       before do
303       end
304       it 'trueを返す' do
305         @attr6 = {'original_picture_id' => 6}
306         r = ProviderOriginalPicture.replace_original_picture @provider.id, @attr6
307         r.should be_true
308       end
309       it 'カラム値の原画idを借手側の原画のidで置き換える' do
310         @attr6 = {'original_picture_id' => 6}
311         r = ProviderOriginalPicture.replace_original_picture @provider.id, @attr6
312         @attr6['original_picture_id'].should eq @op.id
313         @attr9 = {'original_picture_id' => 9}
314         r = ProviderOriginalPicture.replace_original_picture @provider.id, @attr9
315         @attr9['original_picture_id'].should eq @other_op.id
316       end
317     end
318     context '借手側の原画がなかったとき' do
319       before do
320       end
321       it 'falseを返す' do
322         @attr = {'original_picture_id' => 1}
323         r = ProviderOriginalPicture.replace_original_picture @provider.id, @attr
324         r.should be_false
325       end
326     end
327   end
328   
329   describe '素材停止に於いて' do
330     before do
331       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
332       @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
333       rpattr = {:original_picture_id => @op.id, :picture_id => @p.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
334         :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
335       @rp = FactoryGirl.create :resource_picture, rpattr
336     end
337     context '貸手側原画のカラム値の停止日時が設定されているとき' do
338       before do
339         @pop = ProviderOriginalPicture.create :provider_id => @provider.id, :providers_original_picture_id => 1, :demanders_original_picture_id => @op.id
340         @stopped_op = FactoryGirl.build :original_picture, :artist_id => @artist.id, :stopped_at => Time.now + 400
341         @stopped_op_attr = @stopped_op.attributes
342         ResourcePicture.any_instance.stub(:unpublish).with(any_args).and_return(true)
343       end
344       context '対照表から素材を取得できるとき' do
345         before do
346           @stopped_op = FactoryGirl.build :original_picture, :artist_id => @artist.id, :stopped_at => Time.now + 400
347         end
348         it '素材に停止を依頼している' do
349           ResourcePicture.any_instance.should_receive(:unpublish).with(any_args).exactly(1)
350           r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
351         end
352       end
353       context '対照表から原画を取得できないとき' do
354         before do
355           @pop = ProviderOriginalPicture.new
356         end
357         it '素材に停止を依頼していない' do
358           ResourcePicture.any_instance.should_not_receive(:unpublish).with(any_args)
359           r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
360         end
361       end
362       context '対照表から素材を取得できないとき' do
363         before do
364           @rp.destroy
365         end
366         it '素材に停止を依頼していない' do
367           ResourcePicture.any_instance.should_not_receive(:unpublish).with(any_args)
368           r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
369         end
370       end
371     end
372     context '貸手側原画のカラム値の停止日時が設定されていないとき' do
373       before do
374         @pop = ProviderOriginalPicture.create :provider_id => @provider.id, :providers_original_picture_id => 1, :demanders_original_picture_id => @op.id
375         @stopped_op = FactoryGirl.build :original_picture, :artist_id => @artist.id, :stopped_at => nil
376         @stopped_op_attr = @stopped_op.attributes
377         ResourcePicture.any_instance.stub(:unpublish).with(any_args).and_return(true)
378       end
379       it '素材に停止を依頼していない' do
380         ResourcePicture.any_instance.should_not_receive(:unpublish).with(any_args)
381         r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
382       end
383     end
384     context 'つつがなく終わるとき' do
385       before do
386         @pop = ProviderOriginalPicture.create :provider_id => @provider.id, :providers_original_picture_id => 1, :demanders_original_picture_id => @op.id
387         @stopped_op = FactoryGirl.build :original_picture, :artist_id => @artist.id, :stopped_at => Time.now + 400
388         @stopped_op_attr = @stopped_op.attributes
389         ResourcePicture.any_instance.stub(:unpublish).with(any_args).and_return(true)
390       end
391       it 'trueを返す' do
392         r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
393         r.should be_true
394       end
395     end
396     context '素材停止に失敗したとき' do
397       before do
398         @pop = ProviderOriginalPicture.create :provider_id => @provider.id, :providers_original_picture_id => 1, :demanders_original_picture_id => @op.id
399         @stopped_op = FactoryGirl.build :original_picture, :artist_id => @artist.id, :stopped_at => Time.now + 400
400         @stopped_op_attr = @stopped_op.attributes
401         ResourcePicture.any_instance.stub(:unpublish).with(any_args).and_return(false)
402       end
403       it 'falseを返す' do
404         r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
405         r.should be_false
406       end
407     end
408   end
409   
410   describe '原画インポートに於いて' do
411     before do
412       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
413       @other_op = FactoryGirl.create :original_picture, :artist_id => @artist.id
414     end
415     context '事前チェックする' do
416       before do
417         ProviderOriginalPicture.stub(:get_one).with(any_args).and_return(ProviderOriginalPicture.new)
418         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
419         ProviderOriginalPicture.stub(:unpublish_resource_picture).with(any_args).and_return(true)
420         ProviderOriginalPicture.any_instance.stub(:modify_original_picture).with(any_args).and_return(@op)
421         OriginalPicture.any_instance.stub(:valid?).with(any_args).and_return(true)
422         ProviderOriginalPicture.any_instance.stub(:save).with(any_args).and_return(true)
423       end
424       it '対照表取得を問い合わせている' do
425         ProviderOriginalPicture.should_receive(:get_one).with(any_args).exactly(1)
426         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
427       end
428       it '絵師id置換を依頼している' do
429         ProviderOriginalPicture.should_receive(:replace_artist).with(any_args).exactly(1)
430         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
431       end
432       it '素材停止を依頼している' do
433         ProviderOriginalPicture.should_receive(:unpublish_resource_picture).with(any_args).exactly(1)
434         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
435       end
436       it '対照表に原画同期を依頼している' do
437         ProviderOriginalPicture.any_instance.should_receive(:modify_original_picture).with(any_args).exactly(1)
438         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
439       end
440       it '原画を検証している' do
441         OriginalPicture.any_instance.should_receive(:valid?).with(any_args).exactly(1)
442         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
443       end
444       it '対照表オブジェクトを保存している' do
445         ProviderOriginalPicture.any_instance.should_receive(:save).with(any_args).exactly(1)
446         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
447       end
448     end
449     context 'つつがなく終わるとき' do
450       before do
451         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
452       end
453       it '空っぽの配列を返す' do
454         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
455         r.should be_empty
456       end
457       it '対照表が追加される' do
458         lambda {
459           r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
460         }.should change ProviderOriginalPicture, :count
461       end
462     end
463     context '複数インポートのとき' do
464       before do
465         #前回インポートで貸手からもらった素材
466         @other_p = FactoryGirl.create :picture, :original_picture_id => @other_op.id, :license_id => @license.id, :artist_id => @artist.id
467         rpattr = {:original_picture_id => @other_op.id, :picture_id => @other_p.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
468           :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
469         @other_rp = FactoryGirl.create :resource_picture, rpattr
470         #対照表も用意されている
471         @pop = ProviderOriginalPicture.create :provider_id => @provider.id, :providers_original_picture_id => @other_op.id, :demanders_original_picture_id => @other_op.id
472         #これが今回停止される
473         @other_op_attr = @other_op.attributes
474         @other_op_attr['stopped_at'] = Time.now - 100
475         @other_op_attr['created_at'] = Time.now - 100
476         @other_op_attr['updated_at'] = Time.now - 100
477         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
478       end
479       it '空っぽの配列を返す' do
480         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @other_op_attr]
481         r.should be_empty
482       end
483       it '新規分の対照表が追加される' do
484         lambda {
485           r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @other_op_attr]
486         }.should change(ProviderOriginalPicture, :count)
487       end
488       it '停止された素材が削除される' do
489         lambda {
490           r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @other_op_attr]
491         }.should change(ResourcePicture, :count)
492       end
493       it '原画の日時は貸手と一致しており、素材停止の影響を受けていない' do
494         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @other_op_attr]
495         @other_op.reload
496         @other_op.updated_at.should eq @other_op_attr['updated_at']
497       end
498     end
499     #警告ケース
500     context '絵師id置換に失敗したとき' do
501       before do
502         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(false)
503       end
504       it '結果に原画のカラム値を追加している' do
505         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @op.attributes]
506         r.should_not be_empty
507       end
508     end
509     context '原画の検証に失敗したとき' do
510       before do
511         OriginalPicture.any_instance.stub(:valid?).with(any_args).and_return(false)
512       end
513      it '結果に貸手側原画のカラム値を追加している' do
514         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
515         r.should_not be_empty
516       end
517     end
518     context '対照表オブジェクトの保存に失敗したとき' do
519       before do
520         ProviderOriginalPicture.any_instance.stub(:save).with(any_args).and_return(false)
521       end
522      it '結果に貸手側原画のカラム値を追加している' do
523         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
524         r.should_not be_empty
525       end
526     end
527     context '原画オブジェクトの保存に失敗したとき' do
528       before do
529         OriginalPicture.any_instance.stub(:save).with(any_args).and_return(false)
530       end
531       it '結果に貸手側原画のカラム値を追加している' do
532         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
533         r.should_not be_empty
534       end
535     end
536   end
537   
538   describe '実素材インポートに於いて' do
539     before do
540       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
541       @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
542       @imager = ImagerTest.load "abc\ndef\nghi"
543       @attr = @p.attributes
544       @attr['picture_data'] =  "abc\ndef\nghi"
545     end
546     context '事前チェックする' do
547       before do
548         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
549         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
550         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
551         Base64.stub(:decode64).with(any_args).and_return("abc\ndef\nghi")
552         PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
553         ProviderOriginalPicture.stub(:modify_picture).with(any_args).and_return(@p)
554         Picture.any_instance.stub(:store).with(any_args).and_return(true)
555       end
556       it '原画id置換を依頼している' do
557         ProviderOriginalPicture.should_receive(:replace_original_picture).with(any_args).exactly(1)
558         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
559       end
560       it '絵師id置換を依頼している' do
561         ProviderOriginalPicture.should_receive(:replace_artist).with(any_args).exactly(1)
562         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
563       end
564       it 'ライセンスid置換を依頼している' do
565         ProviderOriginalPicture.should_receive(:replace_license).with(any_args).exactly(1)
566         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
567       end
568       it '画像データをデコードしている' do
569         Base64.should_receive(:decode64).with(any_args).exactly(1)
570         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
571       end
572       it '画像ライブラリにロードを依頼している' do
573         PettanImager.should_receive(:load).with(any_args).exactly(1)
574         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
575       end
576       it '対照表モデルに貸手側実素材同期を依頼している' do
577         ProviderOriginalPicture.should_receive(:modify_picture).with(any_args).exactly(1)
578         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
579       end
580       it '実素材を保存している' do
581         Picture.any_instance.should_receive(:store).with(any_args).exactly(1)
582         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
583       end
584     end
585     context 'つつがなく終わるとき' do
586       before do
587         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
588         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
589         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
590         Base64.stub(:decode64).with(any_args).and_return("abc\ndef\nghi")
591         PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
592         @newp = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :revision => 1
593         @newattr = @newp.attributes
594         @newattr['picture_data'] =  "abc\ndef\nghi"
595       end
596       it '空っぽの配列を返す' do
597         r = ProviderOriginalPicture.import_pictures @provider.id, [@newattr]
598         r.should be_empty
599       end
600       it '実素材が追加される' do
601         lambda {
602           r = ProviderOriginalPicture.import_pictures @provider.id, [@newattr]
603         }.should change Picture, :count
604       end
605     end
606     #警告ケース
607     context '原画id置換に失敗したとき' do
608       before do
609         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(false)
610       end
611       it '結果に実素材のカラム値を追加している' do
612         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
613         r.should_not be_empty
614       end
615     end
616     context '絵師id置換に失敗したとき' do
617       before do
618         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
619         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(false)
620       end
621       it '結果に実素材のカラム値を追加している' do
622         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
623         r.should_not be_empty
624       end
625     end
626     context 'ライセンスid置換に失敗したとき' do
627       before do
628         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
629         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
630         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(false)
631       end
632       it '結果に実素材のカラム値を追加している' do
633         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
634         r.should_not be_empty
635       end
636     end
637     context '画像ライブラリのロードに失敗したとき' do
638       before do
639         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
640         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
641         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
642         PettanImager.stub(:load).with(any_args).and_return(false)
643       end
644       it '結果に実素材のカラム値を追加している' do
645         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
646         r.should_not be_empty
647       end
648     end
649     context '実素材の保存に失敗したとき' do
650       before do
651         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
652         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
653         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
654         PettanImager.stub(:load).with(any_args).and_return(@imager)
655         ProviderOriginalPicture.stub(:modify_picture).with(any_args).and_return(@p)
656         Picture.any_instance.stub(:store).with(any_args).and_return(false)
657       end
658       it '結果に実素材のカラム値を追加している' do
659         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
660         r.should_not be_empty
661       end
662     end
663   end
664   
665   describe '素材インポートに於いて' do
666     before do
667       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
668       @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
669       rpattr = {:original_picture_id => @op.id, :picture_id => @p.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
670         :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
671       @rp = FactoryGirl.create :resource_picture, rpattr
672       @imager = ImagerTest.load "abc\ndef\nghi"
673       @attr = @op.attributes
674       @attr['resource_picture'] =  @rp.attributes
675       @attr['resource_picture']['picture_data'] =  "abc\ndef\nghi"
676     end
677     context '事前チェックする' do
678       before do
679         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
680         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
681         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
682         ProviderOriginalPicture.stub(:replace_picture).with(any_args).and_return(true)
683         Base64.stub(:decode64).with(any_args).and_return("abc\ndef\nghi")
684         PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
685         ProviderOriginalPicture.stub(:modify_resource_picture).with(any_args).and_return(@rp)
686         ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(true)
687         ResourcePicture.any_instance.stub(:save).with(any_args).and_return(true)
688       end
689       it '原画id置換を依頼している' do
690         ProviderOriginalPicture.should_receive(:replace_original_picture).with(any_args).exactly(1)
691         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
692       end
693       it '絵師id置換を依頼している' do
694         ProviderOriginalPicture.should_receive(:replace_artist).with(any_args).exactly(1)
695         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
696       end
697       it 'ライセンスid置換を依頼している' do
698         ProviderOriginalPicture.should_receive(:replace_license).with(any_args).exactly(1)
699         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
700       end
701       it '実素材id置換を依頼している' do
702         ProviderOriginalPicture.should_receive(:replace_picture).with(any_args).exactly(1)
703         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
704       end
705       it '画像データをデコードしている' do
706         Base64.should_receive(:decode64).with(any_args).exactly(1)
707         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
708       end
709       it '画像ライブラリにロードを依頼している' do
710         PettanImager.should_receive(:load).with(any_args).exactly(1)
711         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
712       end
713       it '対照表モデルに貸手側素材同期を依頼している' do
714         ProviderOriginalPicture.should_receive(:modify_resource_picture).with(any_args).exactly(1)
715         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
716       end
717       it '素材を保存している' do
718         ResourcePicture.any_instance.should_receive(:save).with(any_args).exactly(1)
719         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
720       end
721       it '素材にgif付き画像ファイルの作成・更新を依頼している' do
722         ResourcePicture.any_instance.should_receive(:store_picture_with_gif).with(any_args).exactly(1)
723         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
724       end
725       context '素材のカラム値を取得できないとき' do
726         before do
727           @attr['resource_picture'] =  nil
728           ProviderOriginalPicture.stub(:import_resource_picture).with(any_args).and_return(nil)
729         end
730         it '素材インポートを依頼していない' do
731           ProviderOriginalPicture.should_not_receive(:import_resource_picture).with(any_args)
732           r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
733         end
734       end
735     end
736     context 'つつがなく終わるとき' do
737       before do
738         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
739         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
740         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
741         Base64.stub(:decode64).with(any_args).and_return("abc\ndef\nghi")
742         PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
743         @op2 = FactoryGirl.create :original_picture, :artist_id => @artist.id
744         @p2 = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op2.id, :license_id => @license.id, :revision => 0
745         newrpattr = {:original_picture_id => @op2.id, :picture_id => @p2.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
746           :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1, :thumbnail => 0}.to_json.to_s}
747         @rp2 = FactoryGirl.build :resource_picture, newrpattr
748         @newattr = @op2.attributes
749         @newattr['resource_picture'] =  @rp2.attributes
750         @newattr['resource_picture']['picture_data'] =  "abc\ndef\nghi"
751       end
752       it '空っぽの配列を返す' do
753         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@newattr]
754         r.should be_empty
755       end
756       it '素材が追加される' do
757         lambda {
758           r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@newattr]
759         }.should change ResourcePicture, :count
760       end
761     end
762     #警告ケース
763     context '原画id置換に失敗したとき' do
764       before do
765         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(false)
766       end
767       it '結果に素材のカラム値を追加している' do
768         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
769         r.should_not be_empty
770       end
771     end
772     context '絵師id置換に失敗したとき' do
773       before do
774         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
775         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(false)
776       end
777       it '結果に素材のカラム値を追加している' do
778         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
779         r.should_not be_empty
780       end
781     end
782     context 'ライセンスid置換に失敗したとき' do
783       before do
784         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
785         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
786         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(false)
787       end
788       it '結果に素材のカラム値を追加している' do
789         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
790         r.should_not be_empty
791       end
792     end
793     context '実素材id置換に失敗したとき' do
794       before do
795         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
796         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
797         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
798         ProviderOriginalPicture.stub(:replace_picture).with(any_args).and_return(false)
799       end
800       it '結果に素材のカラム値を追加している' do
801         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
802         r.should_not be_empty
803       end
804     end
805     context '画像ライブラリのロードに失敗したとき' do
806       before do
807         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
808         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
809         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
810         PettanImager.stub(:load).with(any_args).and_return(false)
811       end
812       it '結果に素材のカラム値を追加している' do
813         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
814         r.should_not be_empty
815       end
816     end
817     context '素材の保存に失敗したとき' do
818       before do
819         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
820         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
821         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
822         PettanImager.stub(:load).with(any_args).and_return(@imager)
823         ProviderOriginalPicture.stub(:modify_resource_picture).with(any_args).and_return(@rp)
824         ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(true)
825         ResourcePicture.any_instance.stub(:save).with(any_args).and_return(false)
826       end
827       it '結果に素材のカラム値を追加している' do
828         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
829         r.should_not be_empty
830       end
831     end
832     context 'gif付き画像ファイルの作成・更新に失敗したとき' do
833       before do
834         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
835         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
836         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
837         PettanImager.stub(:load).with(any_args).and_return(@imager)
838         ProviderOriginalPicture.stub(:modify_resource_picture).with(any_args).and_return(@rp)
839         ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(false)
840       end
841       it '結果に素材のカラム値を追加している' do
842         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
843         r.should_not be_empty
844       end
845     end
846   end
847   
848   describe 'インポートに於いて' do
849     before do
850       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
851       @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
852       @opattr = @op.attributes
853       @pattr = @p.attributes
854       @pattr['picture_data'] =  "abc\ndef\nghi"
855       @rpattr = {:original_picture_id => @op.id, :picture_id => @p.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
856         :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
857       @opattr['resource_picture'] =  @rpattr
858       @opattr['resource_picture']['picture_data'] =  "abc\ndef\nghi"
859     end
860     context '事前チェックする' do
861       before do
862         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([])
863         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([])
864         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([])
865       end
866       it '自身に原画インポートを依頼している' do
867         ProviderOriginalPicture.should_receive(:import_original_pictures).with(any_args).exactly(1)
868         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
869       end
870       it '自身に実素材インポートを依頼している' do
871         ProviderOriginalPicture.should_receive(:import_pictures).with(any_args).exactly(1)
872         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
873       end
874       it '自身に素材インポートを依頼している' do
875         ProviderOriginalPicture.should_receive(:import_resource_pictures).with(any_args).exactly(1)
876         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
877       end
878     end
879     context 'つつがなく終わるとき' do
880       before do
881         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([])
882         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([])
883         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([])
884       end
885       it '各失敗したカラム値をHashで返す' do
886         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
887         r[:original_pictures].should be_empty
888         r[:pictures].should be_empty
889         r[:resource_pictures].should be_empty
890       end
891     end
892     #警告ケース
893     context '原画インポートに失敗したとき' do
894       before do
895         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([@opattr])
896         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([])
897         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([])
898       end
899       it '失敗した原画のカラム値を配列でoriginal_picturesに追加している' do
900         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
901         r[:original_pictures].should_not be_empty
902         r[:pictures].should be_empty
903         r[:resource_pictures].should be_empty
904       end
905     end
906     context '実素材インポートに失敗したとき' do
907       before do
908         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([])
909         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([@pattr])
910         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([])
911       end
912       it '失敗した原画のカラム値を配列でpicturesに追加している' do
913         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
914         r[:original_pictures].should be_empty
915         r[:pictures].should_not be_empty
916         r[:resource_pictures].should be_empty
917       end
918     end
919     context '素材インポートに失敗したとき' do
920       before do
921         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([])
922         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([])
923         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([@rpattr])
924       end
925       it '失敗した原画のカラム値を配列でresource_picturesに追加している' do
926         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
927         r[:original_pictures].should be_empty
928         r[:pictures].should be_empty
929         r[:resource_pictures].should_not be_empty
930       end
931     end
932   end
933   
934
935 end