1 # -*- encoding: utf-8 -*-
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 = @user.author #ユーザ作成時に連動して作成される
15 @f = Rails.root + 'spec/json/provider_source.json'
16 @t = File.open(@f, 'r').read
21 @ps = FactoryGirl.create :provider_status
22 @pd = FactoryGirl.build :provider, :provider_status_id => @ps.id
25 context 'オーソドックスなデータのとき' do
29 @pd.url = 'http://test.jp/'
31 @pd.demander_url = 'http://test.jp/'
37 @pd.url = 'http://test.jp/aaaaa' + 'a' * 180
38 @pd.description = 'a' * 99999
39 @pd.demander_url = 'http://test.jp/aaaaa' + 'a' * 180
44 context 'provider_status_idを検証するとき' do
46 @pd.provider_status_id = nil
47 @pd.should_not be_valid
50 @pd.provider_status_id = 'a'
51 @pd.should_not be_valid
53 it '存在する借受状況でなければ失敗する' do
54 @pd.provider_status_id = 0
55 @pd.should_not be_valid
58 context 'nameを検証するとき' do
61 @pd.should_not be_valid
65 @pd.should_not be_valid
68 l = FactoryGirl.create :provider
69 @pd.should_not be_valid
72 context 'captionを検証するとき' do
75 @pd.should_not be_valid
79 @pd.should_not be_valid
82 context 'urlを検証するとき' do
85 @pd.should_not be_valid
88 @pd.url = 'http://test.jp/aaaaa' + 'a' * 181
89 @pd.should_not be_valid
91 it 'url形式でないなら失敗する' do
93 @pd.should_not be_valid
96 context 'descriptionを検証するとき' do
99 @pd.should_not be_valid
102 context 'demander_urlを検証するとき' do
104 @pd.demander_url = ''
105 @pd.should_not be_valid
107 it '201文字以上なら失敗する' do
108 @pd.demander_url = 'http://test.jp/aaaaa' + 'a' * 181
109 @pd.should_not be_valid
111 it 'url形式でないなら失敗する' do
112 @pd.demander_url = 'aaaaaaa'
113 @pd.should_not be_valid
118 describe 'デフォルト値補充に於いて' do
120 @ps = FactoryGirl.create :provider_status
121 @pd = FactoryGirl.build :provider, :provider_status_id => @ps.id
126 describe '上書き補充に於いて' do
128 @ps = FactoryGirl.create :provider_status
129 @pd = FactoryGirl.build :provider, :provider_status_id => @ps.id
134 describe '所持判定に於いて' do
136 @ps = FactoryGirl.create :provider_status
137 @pd = FactoryGirl.build :provider, :provider_status_id => @ps.id
140 @pd.own?(@admin).should == true
143 @pd.own?(@author).should == false
145 it 'パラメータが管理者でないならno' do
146 @pd.own?(nil).should == false
150 describe '閲覧許可に於いて' do
152 @ps = FactoryGirl.create :provider_status
153 @pd = FactoryGirl.build :provider, :provider_status_id => @ps.id
156 r = @pd.visible?(@admin)
160 r = @pd.visible?(@author)
163 it 'それ以外のとき不許可を返す。' do
164 r = @pd.visible?(nil)
171 @ps = FactoryGirl.create :provider_status
172 @pd = FactoryGirl.create :provider, :provider_status_id => @ps.id
174 it '借り受けしていないのとき0を返す' do
175 ProviderStatus.any_instance.stub(:token).with(any_args).and_return(nil)
179 it '借り受けしているのとき1を返す' do
180 ProviderStatus.any_instance.stub(:token).with(any_args).and_return('a')
186 describe '一覧取得に於いて' do
188 @ps = FactoryGirl.create :provider_status
189 @pd = FactoryGirl.create :provider, :provider_status_id => @ps.id, :name => "6"
191 context 'page補正について' do
192 it '文字列から数値に変換される' do
193 Provider.page('8').should eq 8
196 Provider.page().should eq 1
199 Provider.page('0').should eq 1
202 context 'page_size補正について' do
203 it '文字列から数値に変換される' do
204 Provider.page_size('7').should eq 7
206 it 'nilの場合はProvider.default_page_sizeになる' do
207 Provider.page_size().should eq Provider.default_page_size
209 it '0以下の場合はProvider.default_page_sizeになる' do
210 Provider.page_size('0').should eq Provider.default_page_size
212 it 'Provider.max_page_sizeを超えた場合はProvider.max_page_sizeになる' do
213 Provider.page_size('1000').should eq Provider.max_page_size
216 context 'つつがなく終わるとき' do
217 it '一覧取得オプションを利用している' do
218 Provider.stub(:list_opt).with(any_args).and_return({})
219 Provider.should_receive(:list_opt).with(any_args).exactly(1)
228 v = FactoryGirl.create :provider, :name => "0"
232 context 'DBに5件あって1ページの件数を2件に変えたとして' do
234 @ps2 = FactoryGirl.create :provider_status
235 @pd2 = FactoryGirl.create :provider, :provider_status_id => @ps2.id, :name => "5"
236 @ps3 = FactoryGirl.create :provider_status
237 @pd3 = FactoryGirl.create :provider, :provider_status_id => @ps3.id, :name => "4"
238 @ps4 = FactoryGirl.create :provider_status
239 @pd4 = FactoryGirl.create :provider, :provider_status_id => @ps4.id, :name => "3"
240 @ps5 = FactoryGirl.create :provider_status
241 @pd5 = FactoryGirl.create :provider, :provider_status_id => @ps5.id, :name => "2"
242 Provider.stub(:default_page_size).and_return(2)
246 r.should have(2).items
248 it 'page=1なら末尾2件を返す' do
251 r.should eq [@pd5, @pd4]
253 it 'page=2なら中間2件を返す' do
255 r.should eq [@pd3, @pd2]
257 it 'page=3なら先頭1件を返す' do
262 context 'DBに5件あって1ページの件数を2件に変えたとして' do
264 @ps2 = FactoryGirl.create :provider_status
265 @pd2 = FactoryGirl.create :provider, :provider_status_id => @ps2.id, :name => "5"
266 @ps3 = FactoryGirl.create :provider_status
267 @pd3 = FactoryGirl.create :provider, :provider_status_id => @ps3.id, :name => "4"
268 @ps4 = FactoryGirl.create :provider_status
269 @pd4 = FactoryGirl.create :provider, :provider_status_id => @ps4.id, :name => "3"
270 @ps5 = FactoryGirl.create :provider_status
271 @pd5 = FactoryGirl.create :provider, :provider_status_id => @ps5.id, :name => "2"
272 Provider.stub(:default_page_size).and_return(2)
274 it '件数0は全件(5件)を返す' do
275 r = Provider.list 5, 0
276 r.should have(5).items
280 describe '待機中一覧取得に於いて' do
282 @ps = FactoryGirl.create :provider_status
283 @pd = FactoryGirl.create :provider, :provider_status_id => @ps.id, :name => "6"
285 context 'つつがなく終わるとき' do
286 it '一覧取得オプションを利用している' do
287 Provider.stub(:list_opt).with(any_args).and_return({:include => {:provider_status => {}} })
288 Provider.should_receive(:list_opt).with(any_args).exactly(1)
289 r = Provider.available_list
293 r = Provider.available_list
297 @ps2 = FactoryGirl.create :provider_status
298 v = FactoryGirl.create :provider, :name => "0", :provider_status_id => @ps2.id
299 r = Provider.available_list
302 it '借受状況のトークンが設定されていない貸手に限る' do
303 @ps2 = FactoryGirl.create :provider_status, :token => 'aaaaa'
304 v = FactoryGirl.create :provider, :name => "0", :provider_status_id => @ps2.id
305 r = Provider.available_list
308 context 'DBに5件あって1ページの件数を2件に変えたとして' do
310 @ps2 = FactoryGirl.create :provider_status
311 @pd2 = FactoryGirl.create :provider, :provider_status_id => @ps2.id, :name => "5"
312 @ps3 = FactoryGirl.create :provider_status
313 @pd3 = FactoryGirl.create :provider, :provider_status_id => @ps3.id, :name => "4"
314 @ps4 = FactoryGirl.create :provider_status
315 @pd4 = FactoryGirl.create :provider, :provider_status_id => @ps4.id, :name => "3"
316 @ps5 = FactoryGirl.create :provider_status
317 @pd5 = FactoryGirl.create :provider, :provider_status_id => @ps5.id, :name => "2"
318 Provider.stub(:default_page_size).and_return(2)
321 r = Provider.available_list
322 r.should have(2).items
324 it 'page=1なら末尾2件を返す' do
326 r = Provider.available_list(1)
327 r.should eq [@pd5, @pd4]
329 it 'page=2なら中間2件を返す' do
330 r = Provider.available_list(2)
331 r.should eq [@pd3, @pd2]
333 it 'page=3なら先頭1件を返す' do
334 r = Provider.available_list(3)
338 context 'DBに5件あって1ページの件数を2件に変えたとして' do
340 @ps2 = FactoryGirl.create :provider_status
341 @pd2 = FactoryGirl.create :provider, :provider_status_id => @ps2.id, :name => "5"
342 @ps3 = FactoryGirl.create :provider_status
343 @pd3 = FactoryGirl.create :provider, :provider_status_id => @ps3.id, :name => "4"
344 @ps4 = FactoryGirl.create :provider_status
345 @pd4 = FactoryGirl.create :provider, :provider_status_id => @ps4.id, :name => "3"
346 @ps5 = FactoryGirl.create :provider_status
347 @pd5 = FactoryGirl.create :provider, :provider_status_id => @ps5.id, :name => "2"
348 Provider.stub(:default_page_size).and_return(2)
350 it '件数0は全件(5件)を返す' do
351 r = Provider.available_list 5, 0
352 r.should have(5).items
356 describe '一覧取得オプションに於いて' do
357 it 'includeキーを含んでいる' do
358 r = Provider.list_opt
359 r.has_key?(:include).should be_true
362 r = Provider.list_opt[:include]
363 r.should have(1).items
366 r = Provider.list_opt[:include]
367 r.has_key?(:provider_status).should be_true
370 describe 'json一覧出力オプションに於いて' do
372 @ps = FactoryGirl.create :provider_status
373 @pd = FactoryGirl.create :provider, :provider_status_id => @ps.id
376 r = Provider.list.to_json Provider.list_json_opt
379 i.has_key?('provider_status').should be_true
383 describe '単体取得に於いて' do
385 @ps = FactoryGirl.create :provider_status
386 @pd = FactoryGirl.create :provider, :provider_status_id => @ps.id
388 context 'つつがなく終わるとき' do
389 it '単体取得オプションを利用している' do
390 Provider.stub(:show_opt).with(any_args).and_return({})
391 Provider.should_receive(:show_opt).with(any_args).exactly(1)
392 r = Provider.show @pd.id, @admin
394 it '閲覧許可を問い合わせている' do
395 Provider.any_instance.stub(:visible?).with(any_args).and_return(true)
396 Provider.any_instance.should_receive(:visible?).with(any_args).exactly(1)
397 r = Provider.show @pd.id, @admin
401 r = Provider.show @pd.id, @admin
404 context '閲覧許可が出なかったとき' do
405 it '403Forbidden例外を返す' do
406 Provider.any_instance.stub(:visible?).and_return(false)
408 Provider.show @pd.id, @admin
409 }.should raise_error(ActiveRecord::Forbidden)
412 context '存在しない貸手を開こうとしたとき' do
413 it '404RecordNotFound例外を返す' do
415 Provider.show 110, @admin
416 }.should raise_error(ActiveRecord::RecordNotFound)
421 describe '編集取得に於いて' do
423 @ps = FactoryGirl.create :provider_status
424 @pd = FactoryGirl.create :provider, :provider_status_id => @ps.id
426 context 'つつがなく終わるとき' do
427 it '単体取得オプションを利用している' do
428 Provider.stub(:show_opt).with(any_args).and_return({})
429 Provider.should_receive(:show_opt).with(any_args).exactly(1)
430 r = Provider.edit @pd.id, @admin
432 it '所持判定を問い合わせている' do
433 Provider.any_instance.stub(:own?).with(any_args).and_return(true)
434 Provider.any_instance.should_receive(:own?).with(any_args).exactly(1)
435 r = Provider.edit @pd.id, @admin
439 Provider.any_instance.stub(:own?).and_return(true)
440 r = Provider.edit @pd.id, @admin
443 context '権限がなかったとき' do
444 it '403Forbidden例外を返す' do
445 Provider.any_instance.stub(:own?).and_return(false)
447 Provider.edit @pd.id, @admin
448 }.should raise_error(ActiveRecord::Forbidden)
451 context '存在しない貸手を開こうとしたとき' do
452 it '404RecordNotFound例外を返す' do
454 Provider.edit 110, @admin
455 }.should raise_error(ActiveRecord::RecordNotFound)
459 describe '単体取得オプションに於いて' do
460 it 'includeキーを含んでいる' do
461 r = Provider.show_opt
462 r.has_key?(:include).should be_true
465 r = Provider.show_opt[:include]
466 r.should have(1).items
469 r = Provider.show_opt[:include]
470 r.has_key?(:provider_status).should be_true
473 describe 'json単体出力オプションに於いて' do
475 @ps = FactoryGirl.create :provider_status
476 @pd = FactoryGirl.create :provider, :provider_status_id => @ps.id
479 r = Provider.show(@pd.id, @admin).to_json Provider.show_json_opt
482 i.has_key?('provider_status').should be_true
486 describe '更新作成に於いて' do
488 @ps = FactoryGirl.create :provider_status
489 @pd = FactoryGirl.build :provider, :provider_status_id => @ps.id
491 @attr = @pd.attributes
493 context 'つつがなく終わるとき' do
498 r = Provider.store(@name, @attr)
499 }.should change Provider, :count
503 r = Provider.store(@name, @attr)
504 }.should change ProviderStatus, :count
507 r = Provider.store(@name, @attr)
508 r.is_a?(Provider).should be_true
509 r.valid?.should be_true
512 context '借受状況があるとき' do
514 @pd = FactoryGirl.create :provider, :provider_status_id => @ps.id
516 @attr = @pd.attributes
520 r = Provider.store(@name, @attr)
521 }.should_not change Provider, :count
525 r = Provider.store(@name, @attr)
526 }.should_not change ProviderStatus, :count
529 context '借受状況の作成に失敗したとき' do
531 ProviderStatus.any_instance.stub(:save).with(any_args).and_return(false)
535 r = Provider.store(@name, @attr)
536 }.should_not change Provider, :count
540 r = Provider.store(@name, @attr)
541 }.should_not change ProviderStatus, :count
544 r = Provider.store(@name, @attr)
545 r.valid?.should be_false
550 describe 'インポートに於いて' do
552 @urls = ['http://pettan.net/provider_source.json']
556 WebMock.stub_request(:get, @urls.first).to_return(:body => @t)
558 it '貸手文献インポートを依頼する' do
559 Provider.should_receive(:import_urls).with(@urls).exactly(1)
560 Provider.stub(:import_urls).with(@urls).and_return({@urls.first => {:validations => []}})
561 Provider.import(@urls)
564 Provider.stub(:store).with(any_args).and_return(Provider.new)
565 Provider.should_receive(:store).with(any_args).exactly(1)
566 Provider.import(@urls)
569 context 'つつがなく終わるとき' do
571 WebMock.stub_request(:get, @urls.first).to_return(:body => @t)
575 Provider.import(@urls)
576 }.should change Provider, :count
578 it '借受状況がなかったら、借受状況を作成される' do
580 Provider.import(@urls)
581 }.should change ProviderStatus, :count
583 it '借受状況があるなら、借受状況は作成しない' do
584 Provider.import(@urls)
585 ProviderStatus.any_instance.should_not_receive(:save).exactly(1)
586 Provider.import(@urls)
589 r = Provider.import(@urls)
590 r.is_a?(Hash).should be_true
593 context '貸手作成に失敗したとき' do
595 WebMock.stub_request(:get, @urls.first).to_return(:status => 404)
599 Provider.import(@urls)
600 }.should_not change Provider, :count
603 r = Provider.import(@urls)
604 r.is_a?(Hash).should be_true