OSDN Git Service

t#30516:fix import rp
[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       @other_op = FactoryGirl.create :original_picture, :artist_id => @artist.id
258       @pop = FactoryGirl.create :provider_original_picture, :provider_id => @provider.id, :providers_original_picture_id => 6, :demanders_original_picture_id => @op.id
259       @pop2 = FactoryGirl.create :provider_original_picture, :provider_id => @provider.id, :providers_original_picture_id => 9, :demanders_original_picture_id => @other_op.id
260     end
261     context 'つつがなく終わるとき' do
262       before do
263       end
264       it 'trueを返す' do
265         @attr6 = {'original_picture_id' => 6}
266         r = ProviderOriginalPicture.replace_original_picture @provider.id, @attr6
267         r.should be_true
268       end
269       it 'カラム値の原画idを借手側の原画のidで置き換える' do
270         @attr6 = {'original_picture_id' => 6}
271         r = ProviderOriginalPicture.replace_original_picture @provider.id, @attr6
272         @attr6['original_picture_id'].should eq @op.id
273         @attr9 = {'original_picture_id' => 9}
274         r = ProviderOriginalPicture.replace_original_picture @provider.id, @attr9
275         @attr9['original_picture_id'].should eq @other_op.id
276       end
277     end
278     context '借手側の原画がなかったとき' do
279       before do
280       end
281       it 'falseを返す' do
282         @attr = {'original_picture_id' => 1}
283         r = ProviderOriginalPicture.replace_original_picture @provider.id, @attr
284         r.should be_false
285       end
286     end
287   end
288   
289   describe '原画インポートに於いて' do
290     before do
291       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
292       @other_op = FactoryGirl.create :original_picture, :artist_id => @artist.id
293     end
294     context '事前チェックする' do
295       before do
296         ProviderOriginalPicture.stub(:get_one).with(any_args).and_return(ProviderOriginalPicture.new)
297         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
298         ProviderOriginalPicture.any_instance.stub(:modify_original_picture).with(any_args).and_return(@op)
299         OriginalPicture.any_instance.stub(:valid?).with(any_args).and_return(true)
300         ProviderOriginalPicture.any_instance.stub(:save).with(any_args).and_return(true)
301       end
302       it '対照表取得を問い合わせている' do
303         ProviderOriginalPicture.should_receive(:get_one).with(any_args).exactly(1)
304         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
305       end
306       it '絵師id置換を依頼している' do
307         ProviderOriginalPicture.should_receive(:replace_artist).with(any_args).exactly(1)
308         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
309       end
310       it '対照表に原画同期を依頼してしている' do
311         ProviderOriginalPicture.any_instance.should_receive(:modify_original_picture).with(any_args).exactly(1)
312         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
313       end
314       it '原画を検証している' do
315         OriginalPicture.any_instance.should_receive(:valid?).with(any_args).exactly(1)
316         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
317       end
318       it '対照表オブジェクトを保存している' do
319         ProviderOriginalPicture.any_instance.should_receive(:save).with(any_args).exactly(1)
320         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
321       end
322     end
323     context 'つつがなく終わるとき' do
324       before do
325         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
326       end
327       it '空っぽの配列を返す' do
328         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
329         r.should be_empty
330       end
331       it '対照表が追加される' do
332         lambda {
333           r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
334         }.should change ProviderOriginalPicture, :count
335       end
336     end
337     context '複数インポートのとき' do
338       before do
339         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
340       end
341       it '空っぽの配列を返す' do
342         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @other_op.attributes]
343         r.should be_empty
344       end
345       it '対照表が追加される' do
346         lambda {
347           r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @other_op.attributes]
348         }.should change(ProviderOriginalPicture, :count).by(2)
349       end
350     end
351     #警告ケース
352     context '絵師id置換に失敗したとき' do
353       before do
354         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(false)
355       end
356       it '結果に原画のカラム値を追加している' do
357         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @op.attributes]
358         r.should_not be_empty
359       end
360     end
361     context '原画の検証に失敗したとき' do
362       before do
363         OriginalPicture.any_instance.stub(:valid?).with(any_args).and_return(false)
364       end
365      it '結果に貸手側原画のカラム値を追加している' do
366         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
367         r.should_not be_empty
368       end
369     end
370     context '対照表オブジェクトの保存に失敗したとき' do
371       before do
372         ProviderOriginalPicture.any_instance.stub(:save).with(any_args).and_return(false)
373       end
374      it '結果に貸手側原画のカラム値を追加している' do
375         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
376         r.should_not be_empty
377       end
378     end
379     context '原画オブジェクトの保存に失敗したとき' do
380       before do
381         OriginalPicture.any_instance.stub(:save).with(any_args).and_return(false)
382       end
383       it '結果に貸手側原画のカラム値を追加している' do
384         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
385         r.should_not be_empty
386       end
387     end
388   end
389   
390   describe '実素材インポートに於いて' do
391     before do
392       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
393       @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
394       @imager = ImagerTest.load "abc\ndef\nghi"
395       @attr = @p.attributes
396       @attr['picture_data'] =  "abc\ndef\nghi"
397     end
398     context '事前チェックする' do
399       before do
400         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
401         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
402         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
403         Base64.stub(:decode64).with(any_args).and_return("abc\ndef\nghi")
404         PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
405         ProviderOriginalPicture.stub(:modify_picture).with(any_args).and_return(@p)
406         Picture.any_instance.stub(:store).with(any_args).and_return(true)
407       end
408       it '原画id置換を依頼している' do
409         ProviderOriginalPicture.should_receive(:replace_original_picture).with(any_args).exactly(1)
410         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
411       end
412       it '絵師id置換を依頼している' do
413         ProviderOriginalPicture.should_receive(:replace_artist).with(any_args).exactly(1)
414         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
415       end
416       it 'ライセンスid置換を依頼している' do
417         ProviderOriginalPicture.should_receive(:replace_license).with(any_args).exactly(1)
418         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
419       end
420       it '画像データをデコードしている' do
421         Base64.should_receive(:decode64).with(any_args).exactly(1)
422         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
423       end
424       it '画像ライブラリにロードを依頼している' do
425         PettanImager.should_receive(:load).with(any_args).exactly(1)
426         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
427       end
428       it '対照表モデルに貸手側実素材同期を依頼している' do
429         ProviderOriginalPicture.should_receive(:modify_picture).with(any_args).exactly(1)
430         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
431       end
432       it '実素材を保存している' do
433         Picture.any_instance.should_receive(:store).with(any_args).exactly(1)
434         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
435       end
436     end
437     context 'つつがなく終わるとき' do
438       before do
439         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
440         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
441         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
442         Base64.stub(:decode64).with(any_args).and_return("abc\ndef\nghi")
443         PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
444         @newp = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :revision => 1
445         @newattr = @newp.attributes
446         @newattr['picture_data'] =  "abc\ndef\nghi"
447       end
448       it '空っぽの配列を返す' do
449         r = ProviderOriginalPicture.import_pictures @provider.id, [@newattr]
450         r.should be_empty
451       end
452       it '実素材が追加される' do
453         lambda {
454           r = ProviderOriginalPicture.import_pictures @provider.id, [@newattr]
455         }.should change Picture, :count
456       end
457     end
458     #警告ケース
459     context '原画id置換に失敗したとき' do
460       before do
461         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(false)
462       end
463       it '結果に実素材のカラム値を追加している' do
464         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
465         r.should_not be_empty
466       end
467     end
468     context '絵師id置換に失敗したとき' do
469       before do
470         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
471         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(false)
472       end
473       it '結果に実素材のカラム値を追加している' do
474         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
475         r.should_not be_empty
476       end
477     end
478     context 'ライセンスid置換に失敗したとき' do
479       before do
480         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
481         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
482         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(false)
483       end
484       it '結果に実素材のカラム値を追加している' do
485         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
486         r.should_not be_empty
487       end
488     end
489     context '画像ライブラリのロードに失敗したとき' do
490       before do
491         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
492         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
493         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
494         PettanImager.stub(:load).with(any_args).and_return(false)
495       end
496       it '結果に実素材のカラム値を追加している' do
497         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
498         r.should_not be_empty
499       end
500     end
501     context '実素材の保存に失敗したとき' do
502       before do
503         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
504         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
505         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
506         PettanImager.stub(:load).with(any_args).and_return(@imager)
507         ProviderOriginalPicture.stub(:modify_picture).with(any_args).and_return(@p)
508         Picture.any_instance.stub(:store).with(any_args).and_return(false)
509       end
510       it '結果に実素材のカラム値を追加している' do
511         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
512         r.should_not be_empty
513       end
514     end
515   end
516   
517   describe '素材インポートに於いて' do
518     before do
519       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
520       @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
521       rpattr = {:original_picture_id => @op.id, :picture_id => @p.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
522         :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
523       @rp = FactoryGirl.create :resource_picture, rpattr
524       @imager = ImagerTest.load "abc\ndef\nghi"
525       @attr = @op.attributes
526       @attr['resource_picture'] =  @rp.attributes
527       @attr['resource_picture']['picture_data'] =  "abc\ndef\nghi"
528     end
529     context '事前チェックする' do
530       before do
531         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
532         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
533         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
534         Base64.stub(:decode64).with(any_args).and_return("abc\ndef\nghi")
535         PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
536         ProviderOriginalPicture.stub(:modify_resource_picture).with(any_args).and_return(@rp)
537         ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(true)
538         ResourcePicture.any_instance.stub(:save).with(any_args).and_return(true)
539       end
540       it '原画id置換を依頼している' do
541         ProviderOriginalPicture.should_receive(:replace_original_picture).with(any_args).exactly(1)
542         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
543       end
544       it '絵師id置換を依頼している' do
545         ProviderOriginalPicture.should_receive(:replace_artist).with(any_args).exactly(1)
546         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
547       end
548       it 'ライセンスid置換を依頼している' do
549         ProviderOriginalPicture.should_receive(:replace_license).with(any_args).exactly(1)
550         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
551       end
552       it '画像データをデコードしている' do
553         Base64.should_receive(:decode64).with(any_args).exactly(1)
554         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
555       end
556       it '画像ライブラリにロードを依頼している' do
557         PettanImager.should_receive(:load).with(any_args).exactly(1)
558         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
559       end
560       it '対照表モデルに貸手側素材同期を依頼している' do
561         ProviderOriginalPicture.should_receive(:modify_resource_picture).with(any_args).exactly(1)
562         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
563       end
564       it '素材にgif付き画像ファイルの作成・更新を依頼している' do
565         ResourcePicture.any_instance.should_receive(:store_picture_with_gif).with(any_args).exactly(1)
566         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
567       end
568       it '素材を保存している' do
569         ResourcePicture.any_instance.should_receive(:save).with(any_args).exactly(1)
570         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
571       end
572     end
573     context 'つつがなく終わるとき' do
574       before do
575         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
576         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
577         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
578         Base64.stub(:decode64).with(any_args).and_return("abc\ndef\nghi")
579         PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
580         @op2 = FactoryGirl.create :original_picture, :artist_id => @artist.id
581         @p2 = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op2.id, :license_id => @license.id, :revision => 0
582         newrpattr = {:original_picture_id => @op2.id, :picture_id => @p2.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
583           :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1, :thumbnail => 0}.to_json.to_s}
584         @rp2 = FactoryGirl.build :resource_picture, newrpattr
585         @newattr = @op2.attributes
586         @newattr['resource_picture'] =  @rp2.attributes
587         @newattr['resource_picture']['picture_data'] =  "abc\ndef\nghi"
588       end
589       it '空っぽの配列を返す' do
590         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@newattr]
591         r.should be_empty
592       end
593       it '素材が追加される' do
594         lambda {
595           r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@newattr]
596         }.should change ResourcePicture, :count
597       end
598     end
599     #警告ケース
600     context '原画id置換に失敗したとき' do
601       before do
602         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(false)
603       end
604       it '結果に素材のカラム値を追加している' do
605         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
606         r.should_not be_empty
607       end
608     end
609     context '絵師id置換に失敗したとき' do
610       before do
611         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
612         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(false)
613       end
614       it '結果に素材のカラム値を追加している' do
615         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
616         r.should_not be_empty
617       end
618     end
619     context 'ライセンスid置換に失敗したとき' do
620       before do
621         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
622         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
623         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(false)
624       end
625       it '結果に素材のカラム値を追加している' do
626         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
627         r.should_not be_empty
628       end
629     end
630     context '画像ライブラリのロードに失敗したとき' do
631       before do
632         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
633         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
634         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
635         PettanImager.stub(:load).with(any_args).and_return(false)
636       end
637       it '結果に素材のカラム値を追加している' do
638         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
639         r.should_not be_empty
640       end
641     end
642     context 'gif付き画像ファイルの作成・更新に失敗したとき' do
643       before do
644         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
645         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
646         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
647         PettanImager.stub(:load).with(any_args).and_return(@imager)
648         ProviderOriginalPicture.stub(:modify_resource_picture).with(any_args).and_return(@rp)
649         ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(false)
650       end
651       it '結果に素材のカラム値を追加している' do
652         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
653         r.should_not be_empty
654       end
655     end
656     context '素材の保存に失敗したとき' do
657       before do
658         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
659         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
660         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
661         PettanImager.stub(:load).with(any_args).and_return(@imager)
662         ProviderOriginalPicture.stub(:modify_resource_picture).with(any_args).and_return(@rp)
663         ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(true)
664         ResourcePicture.any_instance.stub(:save).with(any_args).and_return(false)
665       end
666       it '結果に素材のカラム値を追加している' do
667         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
668         r.should_not be_empty
669       end
670     end
671   end
672   
673   describe 'インポートに於いて' do
674     before do
675       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
676       @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
677       @opattr = @op.attributes
678       @pattr = @p.attributes
679       @pattr['picture_data'] =  "abc\ndef\nghi"
680       @rpattr = {:original_picture_id => @op.id, :picture_id => @p.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
681         :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
682       @opattr['resource_picture'] =  @rpattr
683       @opattr['resource_picture']['picture_data'] =  "abc\ndef\nghi"
684     end
685     context '事前チェックする' do
686       before do
687         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([])
688         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([])
689         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([])
690       end
691       it '自身に原画インポートを依頼している' do
692         ProviderOriginalPicture.should_receive(:import_original_pictures).with(any_args).exactly(1)
693         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
694       end
695       it '自身に実素材インポートを依頼している' do
696         ProviderOriginalPicture.should_receive(:import_pictures).with(any_args).exactly(1)
697         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
698       end
699       it '自身に素材インポートを依頼している' do
700         ProviderOriginalPicture.should_receive(:import_resource_pictures).with(any_args).exactly(1)
701         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
702       end
703     end
704     context 'つつがなく終わるとき' do
705       before do
706         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([])
707         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([])
708         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([])
709       end
710       it '各失敗したカラム値をHashで返す' do
711         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
712         r[:original_pictures].should be_empty
713         r[:pictures].should be_empty
714         r[:resource_pictures].should be_empty
715       end
716     end
717     #警告ケース
718     context '原画インポートに失敗したとき' do
719       before do
720         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([@opattr])
721         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([])
722         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([])
723       end
724       it '失敗した原画のカラム値を配列でoriginal_picturesに追加している' do
725         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
726         r[:original_pictures].should_not be_empty
727         r[:pictures].should be_empty
728         r[:resource_pictures].should be_empty
729       end
730     end
731     context '実素材インポートに失敗したとき' do
732       before do
733         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([])
734         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([@pattr])
735         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([])
736       end
737       it '失敗した原画のカラム値を配列でpicturesに追加している' do
738         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
739         r[:original_pictures].should be_empty
740         r[:pictures].should_not be_empty
741         r[:resource_pictures].should be_empty
742       end
743     end
744     context '素材インポートに失敗したとき' do
745       before do
746         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([])
747         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([])
748         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([@rpattr])
749       end
750       it '失敗した原画のカラム値を配列でresource_picturesに追加している' do
751         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
752         r[:original_pictures].should be_empty
753         r[:pictures].should be_empty
754         r[:resource_pictures].should_not be_empty
755       end
756     end
757   end
758   
759
760 end