OSDN Git Service

8466206d3a31b1ebdff18327bf3b6adbfa7b48eb
[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).with(any_args).and_return(true)
538       end
539       it '原画id置換を依頼している' do
540         ProviderOriginalPicture.should_receive(:replace_original_picture).with(any_args).exactly(1)
541         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
542       end
543       it '絵師id置換を依頼している' do
544         ProviderOriginalPicture.should_receive(:replace_artist).with(any_args).exactly(1)
545         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
546       end
547       it 'ライセンスid置換を依頼している' do
548         ProviderOriginalPicture.should_receive(:replace_license).with(any_args).exactly(1)
549         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
550       end
551       it '画像データをデコードしている' do
552         Base64.should_receive(:decode64).with(any_args).exactly(1)
553         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
554       end
555       it '画像ライブラリにロードを依頼している' do
556         PettanImager.should_receive(:load).with(any_args).exactly(1)
557         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
558       end
559       it '対照表モデルに貸手側素材同期を依頼している' do
560         ProviderOriginalPicture.should_receive(:modify_resource_picture).with(any_args).exactly(1)
561         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
562       end
563       it '素材を保存している' do
564         ResourcePicture.any_instance.should_receive(:store).with(any_args).exactly(1)
565         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
566       end
567     end
568     context 'つつがなく終わるとき' do
569       before do
570         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
571         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
572         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
573         Base64.stub(:decode64).with(any_args).and_return("abc\ndef\nghi")
574         PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
575         @op2 = FactoryGirl.create :original_picture, :artist_id => @artist.id
576         @p2 = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op2.id, :license_id => @license.id, :revision => 0
577         newrpattr = {:original_picture_id => @op2.id, :picture_id => @p2.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
578           :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1, :thumbnail => 0}.to_json.to_s}
579         @rp2 = FactoryGirl.build :resource_picture, newrpattr
580         @newattr = @op2.attributes
581         @newattr['resource_picture'] =  @rp2.attributes
582         @newattr['resource_picture']['picture_data'] =  "abc\ndef\nghi"
583       end
584       it '空っぽの配列を返す' do
585         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@newattr]
586         r.should be_empty
587       end
588       it '素材が追加される' do
589         lambda {
590           r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@newattr]
591         }.should change ResourcePicture, :count
592       end
593     end
594     #警告ケース
595     context '原画id置換に失敗したとき' do
596       before do
597         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(false)
598       end
599       it '結果に素材のカラム値を追加している' do
600         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
601         r.should_not be_empty
602       end
603     end
604     context '絵師id置換に失敗したとき' do
605       before do
606         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
607         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(false)
608       end
609       it '結果に素材のカラム値を追加している' do
610         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
611         r.should_not be_empty
612       end
613     end
614     context 'ライセンスid置換に失敗したとき' do
615       before do
616         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
617         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
618         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(false)
619       end
620       it '結果に素材のカラム値を追加している' do
621         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
622         r.should_not be_empty
623       end
624     end
625     context '画像ライブラリのロードに失敗したとき' do
626       before do
627         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
628         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
629         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
630         PettanImager.stub(:load).with(any_args).and_return(false)
631       end
632       it '結果に素材のカラム値を追加している' do
633         r = ProviderOriginalPicture.import_resource_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(@imager)
643         ProviderOriginalPicture.stub(:modify_resource_picture).with(any_args).and_return(@rp)
644         ResourcePicture.any_instance.stub(:store).with(any_args).and_return(false)
645       end
646       it '結果に素材のカラム値を追加している' do
647         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
648         r.should_not be_empty
649       end
650     end
651   end
652   
653   describe 'インポートに於いて' do
654     before do
655       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
656       @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
657       @opattr = @op.attributes
658       @pattr = @p.attributes
659       @pattr['picture_data'] =  "abc\ndef\nghi"
660       @rpattr = {:original_picture_id => @op.id, :picture_id => @p.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
661         :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
662       @opattr['resource_picture'] =  @rpattr
663       @opattr['resource_picture']['picture_data'] =  "abc\ndef\nghi"
664     end
665     context '事前チェックする' do
666       before do
667         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([])
668         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([])
669         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([])
670       end
671       it '自身に原画インポートを依頼している' do
672         ProviderOriginalPicture.should_receive(:import_original_pictures).with(any_args).exactly(1)
673         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
674       end
675       it '自身に実素材インポートを依頼している' do
676         ProviderOriginalPicture.should_receive(:import_pictures).with(any_args).exactly(1)
677         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
678       end
679       it '自身に素材インポートを依頼している' do
680         ProviderOriginalPicture.should_receive(:import_resource_pictures).with(any_args).exactly(1)
681         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
682       end
683     end
684     context 'つつがなく終わるとき' do
685       before do
686         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([])
687         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([])
688         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([])
689       end
690       it '各失敗したカラム値をHashで返す' do
691         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
692         r[:original_pictures].should be_empty
693         r[:pictures].should be_empty
694         r[:resource_pictures].should be_empty
695       end
696     end
697     #警告ケース
698     context '原画インポートに失敗したとき' do
699       before do
700         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([@opattr])
701         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([])
702         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([])
703       end
704       it '失敗した原画のカラム値を配列でoriginal_picturesに追加している' do
705         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
706         r[:original_pictures].should_not be_empty
707         r[:pictures].should be_empty
708         r[:resource_pictures].should be_empty
709       end
710     end
711     context '実素材インポートに失敗したとき' do
712       before do
713         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([])
714         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([@pattr])
715         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([])
716       end
717       it '失敗した原画のカラム値を配列でpicturesに追加している' do
718         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
719         r[:original_pictures].should be_empty
720         r[:pictures].should_not be_empty
721         r[:resource_pictures].should be_empty
722       end
723     end
724     context '素材インポートに失敗したとき' do
725       before do
726         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([])
727         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([])
728         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([@rpattr])
729       end
730       it '失敗した原画のカラム値を配列でresource_picturesに追加している' do
731         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
732         r[:original_pictures].should be_empty
733         r[:pictures].should be_empty
734         r[:resource_pictures].should_not be_empty
735       end
736     end
737   end
738   
739
740 end