1 # -*- encoding: utf-8 -*-
5 describe OriginalLicense do
8 @f = Rails.root + 'spec/json/original_license.json'
9 @t = File.open(@f, 'r').read
11 @fs = Rails.root + 'spec/json/original_licenses.json'
12 @ts = File.open(@fs, 'r').read
14 @fes = Rails.root + 'spec/json/invalid_original_licenses.json'
15 @tes = File.open(@fes, 'r').read
16 @jes = JSON.parse @tes
23 it 'オーソドックスなデータなら通る' do
24 @ol = Factory.build :original_license, :license_id => @l.id
28 context 'nameを検証するとき' do
30 @ol = Factory.build :original_license, :license_id => @l.id
38 @ol.should_not be_valid
42 @ol.should_not be_valid
45 context 'urlを検証するとき' do
47 @ol = Factory.build :original_license, :license_id => @l.id
55 @ol.should_not be_valid
59 @ol.should_not be_valid
62 cl = Factory :original_license, :license_id => @l.id
63 @ol.should_not be_valid
70 context 'license_idを検証するとき' do
72 @ol = Factory.build :original_license
75 @ol.license_id = @l.id
80 @ol.should_not be_valid
84 @ol.should_not be_valid
86 it '存在するlicenseでなければ失敗する' do
88 @ol.should_not be_valid
93 describe '対象オリジナルライセンスの取得に於いて' do
95 @lc = Factory :license
96 @ol = Factory :original_license, :license_id => @lc.id
98 context 'urlが一致するオリジナルライセンスがないとき' do
99 it '新規オリジナルライセンスを準備して返す' do
100 r = OriginalLicense.update_original_license Factory.attributes_for(:original_license, :url => 'http://domain.no')
101 r.should be_a_new OriginalLicense
104 context 'urlが一致するオリジナルライセンスがあるとき' do
105 it '該当オリジナルライセンスを返す' do
106 prm = Factory.attributes_for(:original_license)
107 r = OriginalLicense.update_original_license prm
108 r.is_a?(OriginalLicense).should be_true
109 r.should_not be_a_new OriginalLicense
110 r[:url].should eq prm[:url]
115 describe 'オリジナルライセンス更新に於いて' do
117 @lc = Factory :license
118 @ol = Factory :original_license, :license_id => @lc.id, :url => @lc.url
119 @attr = Factory.attributes_for(:original_license, :name => 'exist case', :url => @lc.url)
120 @newattr = Factory.attributes_for(:original_license, :url => 'http://domain.no')
122 context 'つつがなく終わるとき' do
123 it '対象オリジナルライセンスを問い合わせている' do
124 OriginalLicense.stub(:update_original_license).with(any_args).and_return(OriginalLicense.new(@attr))
125 OriginalLicense.should_receive(:update_original_license).exactly(1)
126 OriginalLicense.store @attr
129 it 'オリジナルライセンスを保存しようとしている' do
130 OriginalLicense.any_instance.should_receive(:save).exactly(1)
131 OriginalLicense.store @newattr
133 it 'オリジナルライセンスが作成されている' do
135 OriginalLicense.store @newattr
136 }.should change OriginalLicense, :count
138 context 'ライセンスとの連動' do
139 it 'ライセンスが作成されている' do
141 OriginalLicense.store @newattr
142 }.should change License, :count
145 r = OriginalLicense.store @newattr
146 l = License.find(r.license_id)
150 r = OriginalLicense.store @newattr
151 l = License.find(r.license_id)
152 l.url.should eq r.url
153 l.name.should eq r.name
158 it 'オリジナルライセンスを保存しようとしている' do
159 OriginalLicense.any_instance.should_receive(:save).exactly(1)
160 OriginalLicense.store @attr
162 it 'オリジナルライセンスの数に変化がない' do
164 OriginalLicense.store @attr
165 }.should_not change OriginalLicense, :count
167 context 'ライセンスとの連動' do
168 it 'ライセンスの数に変化がない' do
170 OriginalLicense.store @attr
171 }.should_not change License, :count
174 r = OriginalLicense.store @attr
175 l = License.find(r.license_id)
179 r = OriginalLicense.store @attr
180 l = License.find(r.license_id)
181 l.url.should eq r.url
182 l.name.should eq r.name
187 r = OriginalLicense.store @newattr
188 r.url.should eq @newattr[:url]
189 r.name.should eq @newattr[:name]
191 it '保存されたOriginalLicenseオブジェクトを返す' do
192 r = OriginalLicense.store @newattr
193 r.should_not be_a_new OriginalLicense
196 context 'ライセンスの作成に失敗するとき' do
198 License.any_instance.stub(:save).with(any_args).and_return(false)
203 r = OriginalLicense.store @newattr
204 }.should_not change License, :count
206 it 'オリジナルライセンスに変化がない' do
208 r = OriginalLicense.store @newattr
209 }.should_not change OriginalLicense, :count
213 it 'オリジナルライセンス属性に変化がない' do
215 r = OriginalLicense.store @attr
216 }.should_not change License.find(@ol.id), :name
218 it 'ライセンス属性に変化がない' do
220 r = OriginalLicense.store @attr
221 }.should_not change License.find(@lc.id), :name
225 context 'オリジナルライセンスの作成に失敗するとき' do
227 OriginalLicense.any_instance.stub(:save).with(any_args).and_return(false)
232 r = OriginalLicense.store @newattr
233 }.should_not change License, :count
235 it 'オリジナルライセンスに変化がない' do
237 r = OriginalLicense.store @newattr
238 }.should_not change OriginalLicense, :count
242 it 'オリジナルライセンス属性に変化がない' do
244 r = OriginalLicense.store @attr
245 }.should_not change License.find(@ol.id), :name
247 it 'ライセンス属性に変化がない' do
249 r = OriginalLicense.store @attr
250 }.should_not change License.find(@lc.id), :name
256 describe '単体取得に於いて' do
258 @ol = Factory.build :original_license
262 l = OriginalLicense.show @ol.id
265 context '関連テーブルオプションがないとき' do
266 it 'ライセンスだけを含んでいる' do
267 r = OriginalLicense.show_include_opt
268 r.should eq [:license]
271 context '関連テーブルオプションで作家を含ませたとき' do
272 it 'ライセンスと作家を含んでいる' do
273 r = OriginalLicense.show_include_opt(:include => :author)
274 r.should eq [:license, :author]
278 describe '一覧取得に於いて' do
280 @ol = Factory.build :original_license
283 context 'page補正について' do
284 it '文字列から数値に変換される' do
285 OriginalLicense.page('8').should eq 8
288 OriginalLicense.page().should eq 1
291 OriginalLicense.page('0').should eq 1
294 context 'page_size補正について' do
295 it '文字列から数値に変換される' do
296 OriginalLicense.page_size('7').should eq 7
298 it 'nilの場合はOriginalLicense.default_page_sizeになる' do
299 OriginalLicense.page_size().should eq OriginalLicense.default_page_size
301 it '0以下の場合はOriginalLicense.default_page_sizeになる' do
302 OriginalLicense.page_size('0').should eq OriginalLicense.default_page_size
304 it 'OriginalLicense.max_page_sizeを超えた場合はOriginalLicense.max_page_sizeになる' do
305 OriginalLicense.page_size('1000').should eq OriginalLicense.max_page_size
309 l = OriginalLicense.list
313 n = Factory.build :original_license, :url => 'http://tes.to', :name => 'peta2.2'
315 l = OriginalLicense.list
318 context 'DBに5件あって1ページの件数を2件に変えたとして' do
320 @license2 = Factory.build :original_license, :url => 'http://tes.to2', :name => 'peta2.2'
322 @license3 = Factory.build :original_license, :url => 'http://tes.to3', :name => 'peta2.3'
324 @license4 = Factory.build :original_license, :url => 'http://tes.to4', :name => 'peta2.4'
326 @license5 = Factory.build :original_license, :url => 'http://tes.to5', :name => 'peta2.5'
328 OriginalLicense.stub(:default_page_size).and_return(2)
331 l = OriginalLicense.list
332 l.should have(2).items
334 it 'page=1なら末尾2件を返す' do
336 l = OriginalLicense.list({}, 1)
337 l.should eq [@ol, @license2]
339 it 'page=2なら中間2件を返す' do
340 l = OriginalLicense.list({}, 2)
341 l.should eq [@license3, @license4]
343 it 'page=3なら先頭1件を返す' do
344 l = OriginalLicense.list({}, 3)
345 l.should eq [@license5]
350 describe 'Json解析に於いて' do
353 context 'テキストを渡されたとき' do
355 JSON.should_receive(:parse).with(@t).exactly(1)
356 r = OriginalLicense.parse @t
358 it '単数データならHashで返す' do
359 r = OriginalLicense.parse @t
360 r.is_a?(Hash).should be_true
362 it '複数データならArrayで返す' do
363 r = OriginalLicense.parse @ts
364 r.is_a?(Array).should be_true
367 context 'パース失敗したとき' do
369 JSON.should_receive(:parse).with(any_args).and_raise('StandardError')
370 r = OriginalLicense.parse @t
376 describe 'Jsonの繰り返し処理に於いて' do
379 context '単体データを渡されたとき' do
382 OriginalLicense.each_license @j do |i|
388 context '複数を渡されたとき' do
391 OriginalLicense.each_license @js do |i|
399 describe 'テキスト取り込みに於いて' do
400 #成功でTrue、パース失敗でFalse、失敗は保存エラーのモデルを配列で返す
401 #Licenseとの連動が完成していること
404 context 'つつがなく終わるとき' do
406 OriginalLicense.should_receive(:parse).with(any_args).exactly(1)
407 OriginalLicense.stub(:parse).with(any_args).and_return(@j)
408 OriginalLicense.import(@t)
411 OriginalLicense.should_receive(:each_license).with(any_args).exactly(1)
412 OriginalLicense.import(@t)
414 it 'ライセンス更新を一回依頼する' do
415 OriginalLicense.stub(:store).with(any_args).and_return(OriginalLicense.new)
416 OriginalLicense.any_instance.stub(:valid?).with(any_args).and_return(true)
417 OriginalLicense.should_receive(:store).with(any_args).exactly(1)
418 OriginalLicense.import(@t)
420 it 'オリジナルライセンスが追加される' do
422 OriginalLicense.import(@t)
423 }.should change OriginalLicense, :count
426 OriginalLicense.import(@t).should eq []
429 context '複数データがつつがなく終わるとき' do
430 it 'ライセンス更新を二回依頼する' do
431 OriginalLicense.stub(:store).with(any_args).and_return(OriginalLicense.new)
432 OriginalLicense.any_instance.stub(:valid?).with(any_args).and_return(true)
433 OriginalLicense.should_receive(:store).with(any_args).exactly(2)
434 OriginalLicense.import(@ts)
436 it 'オリジナルライセンスが二個追加される' do
438 OriginalLicense.import(@ts)
439 }.should change(OriginalLicense, :count).by 2
442 OriginalLicense.import(@ts).should eq []
446 context 'Json解析に失敗したとき' do
448 OriginalLicense.stub(:parse).with(any_args).and_return(false)
450 it 'オリジナルライセンスの数に変化がない' do
452 OriginalLicense.import(@t)
453 }.should_not change OriginalLicense, :count
456 OriginalLicense.import(@t).should be_false
459 context 'オリジナルライセンス作成に失敗したとき' do
461 OriginalLicense.any_instance.stub(:save).with(any_args).and_return(false)
462 OriginalLicense.any_instance.stub(:valid?).with(any_args).and_return(false)
464 it 'オリジナルライセンスの数に変化がない' do
466 OriginalLicense.import(@t)
467 }.should_not change OriginalLicense, :count
470 r = OriginalLicense.import(@t)
471 r.is_a?(Array).should be_true
474 r = OriginalLicense.import(@t)
475 r.should have(1).items
477 it 'オリジナルライセンスオブジェクトが入っている' do
478 r = OriginalLicense.import(@t)
479 r.first.is_a?(OriginalLicense).should be_true
482 context '複数のオリジナルライセンス作成に失敗したとき' do
483 #三件中、二件の失敗、一件を成功させ、成功データは戻り値に含まないことを確認する
484 it 'オリジナルライセンスの数に変化がない' do
486 OriginalLicense.import(@tes)
487 }.should_not change OriginalLicense, :count
489 it '途中で保存に失敗しても全件更新依頼する' do
490 OriginalLicense.stub(:store).with(any_args).and_return(OriginalLicense.new)
491 OriginalLicense.should_receive(:store).with(any_args).exactly(3)
492 OriginalLicense.import(@tes)
495 r = OriginalLicense.import(@tes)
496 r.is_a?(Array).should be_true
499 r = OriginalLicense.import(@tes)
500 r.should have(2).items
502 it '配列の中身は失敗したオリジナルライセンスオブジェクトが入っている' do
503 r = OriginalLicense.import(@tes)
504 r[0].is_a?(OriginalLicense).should be_true
505 r[0]["name"].should eq 'fail1'
506 r[1].is_a?(OriginalLicense).should be_true
507 r[1]["name"].should eq 'fail2'
512 describe 'ファイル取り込みに於いて' do
514 OriginalLicense.stub(:import).with(any_args).and_return(true)
516 context 'つつがなく終わるとき' do
518 OriginalLicense.stub(:import).with(any_args).and_return(true)
520 it 'ファイルを開いてテキストを読む' do
521 File.should_receive(:open).with(@f, 'r').exactly(1)
522 OriginalLicense.import_file(@f)
524 it 'テキスト取り込みを依頼する' do
525 OriginalLicense.should_receive(:import).with(any_args).exactly(1)
526 OriginalLicense.import_file(@f)
530 OriginalLicense.import_file(@f).should be_true
533 context 'ファイルが開けないとき' do
535 File.stub(:open).with(any_args).and_raise('StandardError')
537 it 'ファイルエラーのメッセージを出力する' do
541 OriginalLicense.import_file(@f).should be_false
544 #失敗したときは、失敗したライセンスが配列で返る
545 context 'テキスト取り込みが失敗したとき' do
547 OriginalLicense.stub(:import).with(any_args).and_return(false)
549 it '各オリジナルライセンスのエラーメッセージを出力する' do
553 OriginalLicense.import_file(@f).should be_false