1 # -*- encoding: utf-8 -*-
5 describe DemanderStatus 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 = @user.author #ユーザ作成時に連動して作成される
13 @demand_user = FactoryGirl.create :demand_user
17 @ds = FactoryGirl.build :demander_status
20 context 'オーソドックスなデータのとき' do
22 @ds.receive_hour1 = -99999
23 @ds.receive_hour2 = -99999
27 @ds.receive_hour1 = 99999
28 @ds.receive_hour2 = 99999
32 context 'requested_atを検証するとき' do
34 context 'rejected_atを検証するとき' do
36 context 'approved_atを検証するとき' do
38 context 'tokenを検証するとき' do
40 context 'receive_hour1を検証するとき' do
42 @ds.receive_hour1 = 'a'
43 @ds.should_not be_valid
46 context 'receive_hour2を検証するとき' do
48 @ds.receive_hour2 = 'a'
49 @ds.should_not be_valid
54 describe 'デフォルト値補充に於いて' do
56 @ds = FactoryGirl.build :demander_status
61 describe '上書き補充に於いて' do
63 @ds = FactoryGirl.build :demander_status
68 describe '所持判定に於いて' do
70 @ds = FactoryGirl.create :demander_status
73 @ds.own?(@admin).should == true
76 @ds.own?(@author).should == false
78 it 'パラメータが管理者でないならno' do
79 @ds.own?(nil).should == false
83 describe '閲覧許可に於いて' do
85 @ds = FactoryGirl.create :demander_status
88 r = @ds.visible?(@admin)
92 r = @ds.visible?(@author)
95 it 'それ以外のとき不許可を返す。' do
104 context '申請日時がセットされていないとき' do
106 @ds = FactoryGirl.create :demander_status, :requested_at => nil, :approved_at => Time.now
113 context '申請日時と否決日時がセットされているとき' do
115 @ds = FactoryGirl.create :demander_status, :requested_at => Time.now, :rejected_at => Time.now
122 context '申請日時がセットされていて、可決日時と否決日時がセットされていないとき' do
124 @ds = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => nil, :rejected_at => nil
131 context '申請日時と可決日時がセットされているとき' do
133 @ds = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => Time.now
142 describe '一覧取得に於いて' do
144 @ds = FactoryGirl.create :demander_status
145 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id, :name => "6"
147 context 'page補正について' do
148 it '文字列から数値に変換される' do
149 DemanderStatus.page('8').should eq 8
152 DemanderStatus.page().should eq 1
155 DemanderStatus.page('0').should eq 1
158 context 'page_size補正について' do
159 it '文字列から数値に変換される' do
160 DemanderStatus.page_size('7').should eq 7
162 it 'nilの場合はDemanderStatus.default_page_sizeになる' do
163 DemanderStatus.page_size().should eq DemanderStatus.default_page_size
165 it '0以下の場合はDemanderStatus.default_page_sizeになる' do
166 DemanderStatus.page_size('0').should eq DemanderStatus.default_page_size
168 it 'DemanderStatus.max_page_sizeを超えた場合はDemanderStatus.max_page_sizeになる' do
169 DemanderStatus.page_size('1000').should eq DemanderStatus.max_page_size
172 context 'つつがなく終わるとき' do
173 it '一覧取得オプションを利用している' do
174 DemanderStatus.stub(:list_opt).with(any_args).and_return({:include => {:demander => {}} })
175 DemanderStatus.should_receive(:list_opt).with(any_args).exactly(1)
176 r = DemanderStatus.list
180 r = DemanderStatus.list
184 v = FactoryGirl.create :demander_status
185 vd = FactoryGirl.create :demander, :demander_status_id => v.id, :demand_user_id => @demand_user.id, :name => "0"
186 r = DemanderStatus.list
189 context 'DBに5件あって1ページの件数を2件に変えたとして' do
191 @ds2 = FactoryGirl.create :demander_status
192 @demander2 = FactoryGirl.create :demander, :demander_status_id => @ds2.id, :demand_user_id => @demand_user.id, :name => "5"
193 @ds3 = FactoryGirl.create :demander_status
194 @demander3 = FactoryGirl.create :demander, :demander_status_id => @ds3.id, :demand_user_id => @demand_user.id, :name => "4"
195 @ds4 = FactoryGirl.create :demander_status
196 @demander4 = FactoryGirl.create :demander, :demander_status_id => @ds4.id, :demand_user_id => @demand_user.id, :name => "3"
197 @ds5 = FactoryGirl.create :demander_status
198 @demander5 = FactoryGirl.create :demander, :demander_status_id => @ds5.id, :demand_user_id => @demand_user.id, :name => "2"
199 DemanderStatus.stub(:default_page_size).and_return(2)
202 r = DemanderStatus.list
203 r.should have(2).items
205 it 'page=1なら末尾2件を返す' do
207 r = DemanderStatus.list(1)
208 r.should eq [@ds5, @ds4]
210 it 'page=2なら中間2件を返す' do
211 r = DemanderStatus.list(2)
212 r.should eq [@ds3, @ds2]
214 it 'page=3なら先頭1件を返す' do
215 r = DemanderStatus.list(3)
219 context 'DBに5件あって1ページの件数を2件に変えたとして' do
221 @ds2 = FactoryGirl.create :demander_status
222 @demander2 = FactoryGirl.create :demander, :demander_status_id => @ds2.id, :demand_user_id => @demand_user.id, :name => "5"
223 @ds3 = FactoryGirl.create :demander_status
224 @demander3 = FactoryGirl.create :demander, :demander_status_id => @ds3.id, :demand_user_id => @demand_user.id, :name => "4"
225 @ds4 = FactoryGirl.create :demander_status
226 @demander4 = FactoryGirl.create :demander, :demander_status_id => @ds4.id, :demand_user_id => @demand_user.id, :name => "3"
227 @ds5 = FactoryGirl.create :demander_status
228 @demander5 = FactoryGirl.create :demander, :demander_status_id => @ds5.id, :demand_user_id => @demand_user.id, :name => "2"
229 DemanderStatus.stub(:default_page_size).and_return(2)
231 it '件数0は全件(5件)を返す' do
232 r = DemanderStatus.list 5, 0
233 r.should have(5).items
237 describe '申請中一覧取得に於いて' do
239 @ds = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => nil, :rejected_at => nil
240 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id, :name => "6"
242 context 'つつがなく終わるとき' do
243 it '一覧取得オプションを利用している' do
244 DemanderStatus.stub(:list_opt).with(any_args).and_return({:include => {:demander => {}} })
245 DemanderStatus.should_receive(:list_opt).with(any_args).exactly(1)
246 r = DemanderStatus.requested_list
250 r = DemanderStatus.requested_list
254 v = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => nil, :rejected_at => nil
255 vd = FactoryGirl.create :demander, :demander_status_id => v.id, :demand_user_id => @demand_user.id, :name => "0"
256 r = DemanderStatus.requested_list
259 context 'DBに5件あって1ページの件数を2件に変えたとして' do
261 @ds2 = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => nil, :rejected_at => nil
262 @demander2 = FactoryGirl.create :demander, :demander_status_id => @ds2.id, :demand_user_id => @demand_user.id, :name => "5"
263 @ds3 = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => nil, :rejected_at => nil
264 @demander3 = FactoryGirl.create :demander, :demander_status_id => @ds3.id, :demand_user_id => @demand_user.id, :name => "4"
265 @ds4 = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => nil, :rejected_at => nil
266 @demander4 = FactoryGirl.create :demander, :demander_status_id => @ds4.id, :demand_user_id => @demand_user.id, :name => "3"
267 @ds5 = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => nil, :rejected_at => nil
268 @demander5 = FactoryGirl.create :demander, :demander_status_id => @ds5.id, :demand_user_id => @demand_user.id, :name => "2"
269 DemanderStatus.stub(:default_page_size).and_return(2)
272 r = DemanderStatus.requested_list
273 r.should have(2).items
275 it 'page=1なら末尾2件を返す' do
277 r = DemanderStatus.requested_list(1)
278 r.should eq [@ds5, @ds4]
280 it 'page=2なら中間2件を返す' do
281 r = DemanderStatus.requested_list(2)
282 r.should eq [@ds3, @ds2]
284 it 'page=3なら先頭1件を返す' do
285 r = DemanderStatus.requested_list(3)
289 context 'DBに5件あって1ページの件数を2件に変えたとして' do
291 @ds2 = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => nil, :rejected_at => nil
292 @demander2 = FactoryGirl.create :demander, :demander_status_id => @ds2.id, :demand_user_id => @demand_user.id, :name => "5"
293 @ds3 = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => nil, :rejected_at => nil
294 @demander3 = FactoryGirl.create :demander, :demander_status_id => @ds3.id, :demand_user_id => @demand_user.id, :name => "4"
295 @ds4 = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => nil, :rejected_at => nil
296 @demander4 = FactoryGirl.create :demander, :demander_status_id => @ds4.id, :demand_user_id => @demand_user.id, :name => "3"
297 @ds5 = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => nil, :rejected_at => nil
298 @demander5 = FactoryGirl.create :demander, :demander_status_id => @ds5.id, :demand_user_id => @demand_user.id, :name => "2"
299 DemanderStatus.stub(:default_page_size).and_return(2)
301 it '件数0は全件(5件)を返す' do
302 r = DemanderStatus.requested_list 5, 0
303 r.should have(5).items
307 describe '一覧取得オプションに於いて' do
308 it 'includeキーを含んでいる' do
309 r = DemanderStatus.list_opt
310 r.has_key?(:include).should be_true
313 r = DemanderStatus.list_opt[:include]
314 r.should have(1).items
317 r = DemanderStatus.list_opt[:include]
318 r.has_key?(:demander).should be_true
321 describe 'json一覧出力オプションに於いて' do
323 @ds = FactoryGirl.create :demander_status
324 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
327 r = DemanderStatus.list.to_json DemanderStatus.list_json_opt
330 i.has_key?('demander').should be_true
334 describe '単体取得に於いて' do
336 @ds = FactoryGirl.create :demander_status
337 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id
339 context 'つつがなく終わるとき' do
340 it '単体取得オプションを利用している' do
341 DemanderStatus.stub(:show_opt).with(any_args).and_return({})
342 DemanderStatus.should_receive(:show_opt).with(any_args).exactly(1)
343 r = DemanderStatus.show @ds.id, @admin
345 it '閲覧許可を問い合わせている' do
346 DemanderStatus.any_instance.stub(:visible?).with(any_args).and_return(true)
347 DemanderStatus.any_instance.should_receive(:visible?).with(any_args).exactly(1)
348 r = DemanderStatus.show @ds.id, @admin
352 r = DemanderStatus.show @ds.id, @admin
355 context '閲覧許可が出なかったとき' do
356 it '403Forbidden例外を返す' do
357 DemanderStatus.any_instance.stub(:visible?).and_return(false)
359 DemanderStatus.show @ds.id, @admin
360 }.should raise_error(ActiveRecord::Forbidden)
363 context '存在しない貸与状況を開こうとしたとき' do
364 it '404RecordNotFound例外を返す' do
366 DemanderStatus.show 110, @admin
367 }.should raise_error(ActiveRecord::RecordNotFound)
372 describe '編集取得に於いて' do
374 @ds = FactoryGirl.create :demander_status
375 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id
377 context 'つつがなく終わるとき' do
378 it '単体取得オプションを利用している' do
379 DemanderStatus.stub(:show_opt).with(any_args).and_return({})
380 DemanderStatus.should_receive(:show_opt).with(any_args).exactly(1)
381 r = DemanderStatus.edit @ds.id, @admin
383 it '所持判定を問い合わせている' do
384 DemanderStatus.any_instance.stub(:own?).with(any_args).and_return(true)
385 DemanderStatus.any_instance.should_receive(:own?).with(any_args).exactly(1)
386 r = DemanderStatus.edit @ds.id, @admin
390 DemanderStatus.any_instance.stub(:own?).and_return(true)
391 r = DemanderStatus.edit @ds.id, @admin
394 context '権限がなかったとき' do
395 it '403Forbidden例外を返す' do
396 DemanderStatus.any_instance.stub(:own?).and_return(false)
398 DemanderStatus.edit @ds.id, @admin
399 }.should raise_error(ActiveRecord::Forbidden)
402 context '存在しない貸与状況を開こうとしたとき' do
403 it '404RecordNotFound例外を返す' do
405 DemanderStatus.edit 110, @admin
406 }.should raise_error(ActiveRecord::RecordNotFound)
410 describe '単体取得オプションに於いて' do
411 it 'includeキーを含んでいる' do
412 r = DemanderStatus.show_opt
413 r.has_key?(:include).should be_true
416 r = DemanderStatus.show_opt[:include]
417 r.should have(1).items
420 r = DemanderStatus.show_opt[:include]
421 r.has_key?(:demander).should be_true
424 describe 'json単体出力オプションに於いて' do
426 @ds = FactoryGirl.create :demander_status
427 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
430 r = DemanderStatus.show(@ds.id, @admin).to_json DemanderStatus.show_json_opt
433 i.has_key?('demander').should be_true
437 describe '借受申請に於いて' do
440 context '待機中状態がつつがなく終わるとき' do
442 @ds = FactoryGirl.create :demander_status
443 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
447 @ds.rejected_at.should be_nil
451 @ds.approved_at.should be_nil
453 it '申請日時に現在時刻をセットする' do
455 @ds.requested_at.should_not be_nil
462 context '否決状態がつつがなく終わるとき' do
464 @ds = FactoryGirl.create :demander_status, :requested_at => Time.now, :rejected_at => Time.now
465 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
469 @ds.rejected_at.should be_nil
473 @ds.approved_at.should be_nil
475 it '申請日時に現在時刻をセットする' do
477 @ds.requested_at.should_not be_nil
484 context '状態が申請中のとき' do
486 @ds = FactoryGirl.create :demander_status, :requested_at => Time.now
487 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
495 @ds.status.should eq 2
498 context '状態が貸与中のとき' do
500 @ds = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => Time.now
501 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
509 @ds.status.should eq 3
514 describe '貸与停止に於いて' do
517 context '状態が待機中のとき' do
519 @ds = FactoryGirl.create :demander_status
520 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
528 @ds.status.should eq 0
531 context '状態が否決中のとき' do
533 @ds = FactoryGirl.create :demander_status, :requested_at => Time.now, :rejected_at => Time.now
534 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
542 @ds.status.should eq 1
545 context '申請中の状態がつつがなく終わるとき' do
547 @ds = FactoryGirl.create :demander_status, :requested_at => Time.now
548 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
552 @ds.rejected_at.should_not be_nil
556 @ds.approved_at.should be_nil
558 it '借手の認証トークンをクリアする' do
559 DemandUser.any_instance.stub(:delete_token).with(any_args).and_return(true)
560 DemandUser.any_instance.should_receive(:delete_token).with(any_args).exactly(1)
568 context '状態が貸与中のとき' do
570 @ds = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => Time.now
571 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
575 @ds.rejected_at.should_not be_nil
579 @ds.approved_at.should be_nil
581 it '借手の認証トークンをクリアする' do
582 DemandUser.any_instance.stub(:delete_token).with(any_args).and_return(true)
583 DemandUser.any_instance.should_receive(:delete_token).with(any_args).exactly(1)
593 describe '貸与承認に於いて' do
596 context '状態が待機中のとき' do
598 @ds = FactoryGirl.create :demander_status
599 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
607 @ds.status.should eq 0
610 context '状態が否決中のとき' do
612 @ds = FactoryGirl.create :demander_status, :requested_at => Time.now, :rejected_at => Time.now
613 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
617 @ds.approved_at.should_not be_nil
619 it '巡回時1と巡回時2をセットする' do
621 @ds.receive_hour1.should_not be_nil
622 @ds.receive_hour2.should_not be_nil
626 @ds.rejected_at.should be_nil
628 it '借手の認証トークンをセットする' do
629 DemandUser.any_instance.stub(:create_token).with(any_args).and_return(true)
630 DemandUser.any_instance.should_receive(:create_token).with(any_args).exactly(1)
638 context '申請中の状態がつつがなく終わるとき' do
640 @ds = FactoryGirl.create :demander_status, :requested_at => Time.now
641 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
645 @ds.approved_at.should_not be_nil
647 it '巡回時1と巡回時2をセットする' do
649 @ds.receive_hour1.should_not be_nil
650 @ds.receive_hour2.should_not be_nil
654 @ds.rejected_at.should be_nil
656 it '借手の認証トークンをセットする' do
657 DemandUser.any_instance.stub(:create_token).with(any_args).and_return(true)
658 DemandUser.any_instance.should_receive(:create_token).with(any_args).exactly(1)
666 context '状態が貸与中のとき' do
668 @ds = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => Time.now
669 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
677 @ds.status.should eq 3
682 describe '借受停止に於いて' do
684 @ds = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => Time.now, :rejected_at => Time.now, :receive_hour1 => 0, :receive_hour2 => 0
685 @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
687 context '事前チェックする' do
688 it '借手の認証トークンにクリアを依頼している' do
689 DemandUser.any_instance.stub(:delete_token).with(any_args).and_return(true)
690 DemandUser.any_instance.should_receive(:delete_token).with(any_args).exactly(1)
694 context 'つつがなく終わるとき' do
696 DemandUser.any_instance.stub(:delete_token).with(any_args).and_return(true)
700 @ds.approved_at.should be_nil
704 @ds.approved_at.should be_nil
708 @ds.rejected_at.should be_nil
710 it '巡回時1と巡回時2をクリアする' do
712 @ds.receive_hour1.should be_nil
713 @ds.receive_hour2.should be_nil
720 context '自身の保存に失敗したとき' do
722 DemanderStatus.any_instance.stub(:save).with(any_args).and_return(false)
727 @ds.requested_at.should_not be_nil
728 @ds.approved_at.should_not be_nil
729 @ds.receive_hour2.should_not be_nil
736 context '借手アカウントの保存に失敗したとき' do
738 DemandUser.any_instance.stub(:delete_token).with(any_args).and_return(false)
743 @ds.requested_at.should_not be_nil
744 @ds.approved_at.should_not be_nil
745 @ds.receive_hour2.should_not be_nil