OSDN Git Service

t#30339:test
[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       @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
293       rpattr = {:original_picture_id => @op.id, :picture_id => @p.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
294         :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
295       @rp = FactoryGirl.create :resource_picture, rpattr
296     end
297     context '貸手側原画のカラム値の停止日時が設定されているとき' do
298       before do
299         @pop = ProviderOriginalPicture.create :provider_id => @provider.id, :providers_original_picture_id => 1, :demanders_original_picture_id => @op.id
300         @stopped_op = FactoryGirl.build :original_picture, :artist_id => @artist.id, :stopped_at => Time.now + 400
301         @stopped_op_attr = @stopped_op.attributes
302         ResourcePicture.any_instance.stub(:unpublish).with(any_args).and_return(true)
303       end
304       context '対照表から素材を取得できるとき' do
305         before do
306           @stopped_op = FactoryGirl.build :original_picture, :artist_id => @artist.id, :stopped_at => Time.now + 400
307         end
308         it '素材に停止を依頼している' do
309           ResourcePicture.any_instance.should_receive(:unpublish).with(any_args).exactly(1)
310           r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
311         end
312       end
313       context '対照表から原画を取得できないとき' do
314         before do
315           @pop = ProviderOriginalPicture.new
316         end
317         it '素材に停止を依頼していない' do
318           ResourcePicture.any_instance.should_not_receive(:unpublish).with(any_args)
319           r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
320         end
321       end
322       context '対照表から素材を取得できないとき' do
323         before do
324           @rp.destroy
325         end
326         it '素材に停止を依頼していない' do
327           ResourcePicture.any_instance.should_not_receive(:unpublish).with(any_args)
328           r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
329         end
330       end
331     end
332     context '貸手側原画のカラム値の停止日時が設定されていないとき' do
333       before do
334         @pop = ProviderOriginalPicture.create :provider_id => @provider.id, :providers_original_picture_id => 1, :demanders_original_picture_id => @op.id
335         @stopped_op = FactoryGirl.build :original_picture, :artist_id => @artist.id, :stopped_at => nil
336         @stopped_op_attr = @stopped_op.attributes
337         ResourcePicture.any_instance.stub(:unpublish).with(any_args).and_return(true)
338       end
339       it '素材に停止を依頼していない' do
340         ResourcePicture.any_instance.should_not_receive(:unpublish).with(any_args)
341         r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
342       end
343     end
344     context 'つつがなく終わるとき' do
345       before do
346         @pop = ProviderOriginalPicture.create :provider_id => @provider.id, :providers_original_picture_id => 1, :demanders_original_picture_id => @op.id
347         @stopped_op = FactoryGirl.build :original_picture, :artist_id => @artist.id, :stopped_at => Time.now + 400
348         @stopped_op_attr = @stopped_op.attributes
349         ResourcePicture.any_instance.stub(:unpublish).with(any_args).and_return(true)
350       end
351       it 'trueを返す' do
352         r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
353         r.should be_true
354       end
355     end
356     context '素材停止に失敗したとき' do
357       before do
358         @pop = ProviderOriginalPicture.create :provider_id => @provider.id, :providers_original_picture_id => 1, :demanders_original_picture_id => @op.id
359         @stopped_op = FactoryGirl.build :original_picture, :artist_id => @artist.id, :stopped_at => Time.now + 400
360         @stopped_op_attr = @stopped_op.attributes
361         ResourcePicture.any_instance.stub(:unpublish).with(any_args).and_return(false)
362       end
363       it 'falseを返す' do
364         r = ProviderOriginalPicture.unpublish_resource_picture @pop, @stopped_op_attr
365         r.should be_false
366       end
367     end
368   end
369   
370   describe '原画インポートに於いて' do
371     before do
372       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
373       @other_op = FactoryGirl.create :original_picture, :artist_id => @artist.id
374     end
375     context '事前チェックする' do
376       before do
377         ProviderOriginalPicture.stub(:get_one).with(any_args).and_return(ProviderOriginalPicture.new)
378         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
379         ProviderOriginalPicture.stub(:unpublish_resource_picture).with(any_args).and_return(true)
380         ProviderOriginalPicture.any_instance.stub(:modify_original_picture).with(any_args).and_return(@op)
381         OriginalPicture.any_instance.stub(:valid?).with(any_args).and_return(true)
382         ProviderOriginalPicture.any_instance.stub(:save).with(any_args).and_return(true)
383       end
384       it '対照表取得を問い合わせている' do
385         ProviderOriginalPicture.should_receive(:get_one).with(any_args).exactly(1)
386         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
387       end
388       it '絵師id置換を依頼している' do
389         ProviderOriginalPicture.should_receive(:replace_artist).with(any_args).exactly(1)
390         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
391       end
392       it '素材停止を依頼している' do
393         ProviderOriginalPicture.should_receive(:unpublish_resource_picture).with(any_args).exactly(1)
394         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
395       end
396       it '対照表に原画同期を依頼している' do
397         ProviderOriginalPicture.any_instance.should_receive(:modify_original_picture).with(any_args).exactly(1)
398         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
399       end
400       it '原画を検証している' do
401         OriginalPicture.any_instance.should_receive(:valid?).with(any_args).exactly(1)
402         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
403       end
404       it '対照表オブジェクトを保存している' do
405         ProviderOriginalPicture.any_instance.should_receive(:save).with(any_args).exactly(1)
406         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
407       end
408     end
409     context 'つつがなく終わるとき' do
410       before do
411         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
412       end
413       it '空っぽの配列を返す' do
414         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
415         r.should be_empty
416       end
417       it '対照表が追加される' do
418         lambda {
419           r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
420         }.should change ProviderOriginalPicture, :count
421       end
422     end
423     context '複数インポートのとき' do
424       before do
425         #前回インポートで貸手からもらった素材
426         @other_p = FactoryGirl.create :picture, :original_picture_id => @other_op.id, :license_id => @license.id, :artist_id => @artist.id
427         rpattr = {:original_picture_id => @other_op.id, :picture_id => @other_p.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
428           :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
429         @other_rp = FactoryGirl.create :resource_picture, rpattr
430         #対照表も用意されている
431         @pop = ProviderOriginalPicture.create :provider_id => @provider.id, :providers_original_picture_id => @other_op.id, :demanders_original_picture_id => @other_op.id
432         #これが今回停止される
433         @other_op_attr = @other_op.attributes
434         @other_op_attr['stopped_at'] = Time.now - 100
435         @other_op_attr['created_at'] = Time.now - 100
436         @other_op_attr['updated_at'] = Time.now - 100
437         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
438       end
439       it '空っぽの配列を返す' do
440         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @other_op_attr]
441         r.should be_empty
442       end
443       it '新規分の対照表が追加される' do
444         lambda {
445           r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @other_op_attr]
446         }.should change(ProviderOriginalPicture, :count)
447       end
448       it '停止された素材が削除される' do
449         lambda {
450           r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @other_op_attr]
451         }.should change(ResourcePicture, :count)
452       end
453       it '原画の日時は貸手と一致しており、素材停止の影響を受けていない' do
454         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @other_op_attr]
455         @other_op.reload
456         @other_op.updated_at.should eq @other_op_attr['updated_at']
457       end
458     end
459     #警告ケース
460     context '絵師id置換に失敗したとき' do
461       before do
462         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(false)
463       end
464       it '結果に原画のカラム値を追加している' do
465         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes, @op.attributes]
466         r.should_not be_empty
467       end
468     end
469     context '原画の検証に失敗したとき' do
470       before do
471         OriginalPicture.any_instance.stub(:valid?).with(any_args).and_return(false)
472       end
473      it '結果に貸手側原画のカラム値を追加している' do
474         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
475         r.should_not be_empty
476       end
477     end
478     context '対照表オブジェクトの保存に失敗したとき' do
479       before do
480         ProviderOriginalPicture.any_instance.stub(:save).with(any_args).and_return(false)
481       end
482      it '結果に貸手側原画のカラム値を追加している' do
483         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
484         r.should_not be_empty
485       end
486     end
487     context '原画オブジェクトの保存に失敗したとき' do
488       before do
489         OriginalPicture.any_instance.stub(:save).with(any_args).and_return(false)
490       end
491       it '結果に貸手側原画のカラム値を追加している' do
492         r = ProviderOriginalPicture.import_original_pictures @provider.id, [@op.attributes]
493         r.should_not be_empty
494       end
495     end
496   end
497   
498   describe '実素材インポートに於いて' do
499     before do
500       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
501       @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
502       @imager = ImagerTest.load "abc\ndef\nghi"
503       @attr = @p.attributes
504       @attr['picture_data'] =  "abc\ndef\nghi"
505     end
506     context '事前チェックする' do
507       before do
508         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
509         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
510         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
511         Base64.stub(:decode64).with(any_args).and_return("abc\ndef\nghi")
512         PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
513         ProviderOriginalPicture.stub(:modify_picture).with(any_args).and_return(@p)
514         Picture.any_instance.stub(:store).with(any_args).and_return(true)
515       end
516       it '原画id置換を依頼している' do
517         ProviderOriginalPicture.should_receive(:replace_original_picture).with(any_args).exactly(1)
518         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
519       end
520       it '絵師id置換を依頼している' do
521         ProviderOriginalPicture.should_receive(:replace_artist).with(any_args).exactly(1)
522         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
523       end
524       it 'ライセンスid置換を依頼している' do
525         ProviderOriginalPicture.should_receive(:replace_license).with(any_args).exactly(1)
526         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
527       end
528       it '画像データをデコードしている' do
529         Base64.should_receive(:decode64).with(any_args).exactly(1)
530         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
531       end
532       it '画像ライブラリにロードを依頼している' do
533         PettanImager.should_receive(:load).with(any_args).exactly(1)
534         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
535       end
536       it '対照表モデルに貸手側実素材同期を依頼している' do
537         ProviderOriginalPicture.should_receive(:modify_picture).with(any_args).exactly(1)
538         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
539       end
540       it '実素材を保存している' do
541         Picture.any_instance.should_receive(:store).with(any_args).exactly(1)
542         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
543       end
544     end
545     context 'つつがなく終わるとき' do
546       before do
547         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
548         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
549         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
550         Base64.stub(:decode64).with(any_args).and_return("abc\ndef\nghi")
551         PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
552         @newp = FactoryGirl.build :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id, :revision => 1
553         @newattr = @newp.attributes
554         @newattr['picture_data'] =  "abc\ndef\nghi"
555       end
556       it '空っぽの配列を返す' do
557         r = ProviderOriginalPicture.import_pictures @provider.id, [@newattr]
558         r.should be_empty
559       end
560       it '実素材が追加される' do
561         lambda {
562           r = ProviderOriginalPicture.import_pictures @provider.id, [@newattr]
563         }.should change Picture, :count
564       end
565     end
566     #警告ケース
567     context '原画id置換に失敗したとき' do
568       before do
569         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(false)
570       end
571       it '結果に実素材のカラム値を追加している' do
572         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
573         r.should_not be_empty
574       end
575     end
576     context '絵師id置換に失敗したとき' do
577       before do
578         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
579         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(false)
580       end
581       it '結果に実素材のカラム値を追加している' do
582         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
583         r.should_not be_empty
584       end
585     end
586     context 'ライセンスid置換に失敗したとき' do
587       before do
588         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
589         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
590         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(false)
591       end
592       it '結果に実素材のカラム値を追加している' do
593         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
594         r.should_not be_empty
595       end
596     end
597     context '画像ライブラリのロードに失敗したとき' do
598       before do
599         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
600         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
601         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
602         PettanImager.stub(:load).with(any_args).and_return(false)
603       end
604       it '結果に実素材のカラム値を追加している' do
605         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
606         r.should_not be_empty
607       end
608     end
609     context '実素材の保存に失敗したとき' 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(true)
613         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
614         PettanImager.stub(:load).with(any_args).and_return(@imager)
615         ProviderOriginalPicture.stub(:modify_picture).with(any_args).and_return(@p)
616         Picture.any_instance.stub(:store).with(any_args).and_return(false)
617       end
618       it '結果に実素材のカラム値を追加している' do
619         r = ProviderOriginalPicture.import_pictures @provider.id, [@attr]
620         r.should_not be_empty
621       end
622     end
623   end
624   
625   describe '素材インポートに於いて' do
626     before do
627       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
628       @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
629       rpattr = {:original_picture_id => @op.id, :picture_id => @p.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
630         :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
631       @rp = FactoryGirl.create :resource_picture, rpattr
632       @imager = ImagerTest.load "abc\ndef\nghi"
633       @attr = @op.attributes
634       @attr['resource_picture'] =  @rp.attributes
635       @attr['resource_picture']['picture_data'] =  "abc\ndef\nghi"
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         Base64.stub(:decode64).with(any_args).and_return("abc\ndef\nghi")
643         PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
644         ProviderOriginalPicture.stub(:modify_resource_picture).with(any_args).and_return(@rp)
645         ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(true)
646         ResourcePicture.any_instance.stub(:save).with(any_args).and_return(true)
647       end
648       it '原画id置換を依頼している' do
649         ProviderOriginalPicture.should_receive(:replace_original_picture).with(any_args).exactly(1)
650         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
651       end
652       it '絵師id置換を依頼している' do
653         ProviderOriginalPicture.should_receive(:replace_artist).with(any_args).exactly(1)
654         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
655       end
656       it 'ライセンスid置換を依頼している' do
657         ProviderOriginalPicture.should_receive(:replace_license).with(any_args).exactly(1)
658         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
659       end
660       it '画像データをデコードしている' do
661         Base64.should_receive(:decode64).with(any_args).exactly(1)
662         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
663       end
664       it '画像ライブラリにロードを依頼している' do
665         PettanImager.should_receive(:load).with(any_args).exactly(1)
666         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
667       end
668       it '対照表モデルに貸手側素材同期を依頼している' do
669         ProviderOriginalPicture.should_receive(:modify_resource_picture).with(any_args).exactly(1)
670         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
671       end
672       it '素材にgif付き画像ファイルの作成・更新を依頼している' do
673         ResourcePicture.any_instance.should_receive(:store_picture_with_gif).with(any_args).exactly(1)
674         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
675       end
676       it '素材を保存している' do
677         ResourcePicture.any_instance.should_receive(:save).with(any_args).exactly(1)
678         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
679       end
680       context '素材のカラム値を取得できないとき' do
681         before do
682           @attr['resource_picture'] =  nil
683           ProviderOriginalPicture.stub(:import_resource_picture).with(any_args).and_return(nil)
684         end
685         it '素材インポートを依頼していない' do
686           ProviderOriginalPicture.should_not_receive(:import_resource_picture).with(any_args)
687           r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
688         end
689       end
690     end
691     context 'つつがなく終わるとき' do
692       before do
693         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
694         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
695         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
696         Base64.stub(:decode64).with(any_args).and_return("abc\ndef\nghi")
697         PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
698         @op2 = FactoryGirl.create :original_picture, :artist_id => @artist.id
699         @p2 = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op2.id, :license_id => @license.id, :revision => 0
700         newrpattr = {:original_picture_id => @op2.id, :picture_id => @p2.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
701           :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1, :thumbnail => 0}.to_json.to_s}
702         @rp2 = FactoryGirl.build :resource_picture, newrpattr
703         @newattr = @op2.attributes
704         @newattr['resource_picture'] =  @rp2.attributes
705         @newattr['resource_picture']['picture_data'] =  "abc\ndef\nghi"
706       end
707       it '空っぽの配列を返す' do
708         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@newattr]
709         r.should be_empty
710       end
711       it '素材が追加される' do
712         lambda {
713           r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@newattr]
714         }.should change ResourcePicture, :count
715       end
716     end
717     #警告ケース
718     context '原画id置換に失敗したとき' do
719       before do
720         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(false)
721       end
722       it '結果に素材のカラム値を追加している' do
723         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
724         r.should_not be_empty
725       end
726     end
727     context '絵師id置換に失敗したとき' do
728       before do
729         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
730         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(false)
731       end
732       it '結果に素材のカラム値を追加している' do
733         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
734         r.should_not be_empty
735       end
736     end
737     context 'ライセンスid置換に失敗したとき' do
738       before do
739         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
740         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
741         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(false)
742       end
743       it '結果に素材のカラム値を追加している' do
744         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
745         r.should_not be_empty
746       end
747     end
748     context '画像ライブラリのロードに失敗したとき' do
749       before do
750         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
751         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
752         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
753         PettanImager.stub(:load).with(any_args).and_return(false)
754       end
755       it '結果に素材のカラム値を追加している' do
756         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
757         r.should_not be_empty
758       end
759     end
760     context 'gif付き画像ファイルの作成・更新に失敗したとき' do
761       before do
762         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
763         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
764         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
765         PettanImager.stub(:load).with(any_args).and_return(@imager)
766         ProviderOriginalPicture.stub(:modify_resource_picture).with(any_args).and_return(@rp)
767         ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(false)
768       end
769       it '結果に素材のカラム値を追加している' do
770         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
771         r.should_not be_empty
772       end
773     end
774     context '素材の保存に失敗したとき' do
775       before do
776         ProviderOriginalPicture.stub(:replace_original_picture).with(any_args).and_return(true)
777         ProviderOriginalPicture.stub(:replace_artist).with(any_args).and_return(true)
778         ProviderOriginalPicture.stub(:replace_license).with(any_args).and_return(true)
779         PettanImager.stub(:load).with(any_args).and_return(@imager)
780         ProviderOriginalPicture.stub(:modify_resource_picture).with(any_args).and_return(@rp)
781         ResourcePicture.any_instance.stub(:store_picture_with_gif).with(any_args).and_return(true)
782         ResourcePicture.any_instance.stub(:save).with(any_args).and_return(false)
783       end
784       it '結果に素材のカラム値を追加している' do
785         r = ProviderOriginalPicture.import_resource_pictures @provider.id, [@attr]
786         r.should_not be_empty
787       end
788     end
789   end
790   
791   describe 'インポートに於いて' do
792     before do
793       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
794       @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
795       @opattr = @op.attributes
796       @pattr = @p.attributes
797       @pattr['picture_data'] =  "abc\ndef\nghi"
798       @rpattr = {:original_picture_id => @op.id, :picture_id => @p.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
799         :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
800       @opattr['resource_picture'] =  @rpattr
801       @opattr['resource_picture']['picture_data'] =  "abc\ndef\nghi"
802     end
803     context '事前チェックする' do
804       before do
805         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([])
806         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([])
807         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([])
808       end
809       it '自身に原画インポートを依頼している' do
810         ProviderOriginalPicture.should_receive(:import_original_pictures).with(any_args).exactly(1)
811         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
812       end
813       it '自身に実素材インポートを依頼している' do
814         ProviderOriginalPicture.should_receive(:import_pictures).with(any_args).exactly(1)
815         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
816       end
817       it '自身に素材インポートを依頼している' do
818         ProviderOriginalPicture.should_receive(:import_resource_pictures).with(any_args).exactly(1)
819         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
820       end
821     end
822     context 'つつがなく終わるとき' do
823       before do
824         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([])
825         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([])
826         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([])
827       end
828       it '各失敗したカラム値をHashで返す' do
829         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
830         r[:original_pictures].should be_empty
831         r[:pictures].should be_empty
832         r[:resource_pictures].should be_empty
833       end
834     end
835     #警告ケース
836     context '原画インポートに失敗したとき' do
837       before do
838         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([@opattr])
839         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([])
840         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([])
841       end
842       it '失敗した原画のカラム値を配列でoriginal_picturesに追加している' do
843         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
844         r[:original_pictures].should_not be_empty
845         r[:pictures].should be_empty
846         r[:resource_pictures].should be_empty
847       end
848     end
849     context '実素材インポートに失敗したとき' do
850       before do
851         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([])
852         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([@pattr])
853         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([])
854       end
855       it '失敗した原画のカラム値を配列でpicturesに追加している' do
856         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
857         r[:original_pictures].should be_empty
858         r[:pictures].should_not be_empty
859         r[:resource_pictures].should be_empty
860       end
861     end
862     context '素材インポートに失敗したとき' do
863       before do
864         ProviderOriginalPicture.stub(:import_original_pictures).with(any_args).and_return([])
865         ProviderOriginalPicture.stub(:import_pictures).with(any_args).and_return([])
866         ProviderOriginalPicture.stub(:import_resource_pictures).with(any_args).and_return([@rpattr])
867       end
868       it '失敗した原画のカラム値を配列でresource_picturesに追加している' do
869         r = ProviderOriginalPicture.import @provider.id, [@opattr], [@pattr]
870         r[:original_pictures].should be_empty
871         r[:pictures].should be_empty
872         r[:resource_pictures].should_not be_empty
873       end
874     end
875   end
876   
877
878 end