OSDN Git Service

add comic story
[pettanr/pettanr.git] / spec / models / demander_status_spec.rb
1 # -*- encoding: utf-8 -*-
2 #貸与状況
3 require 'spec_helper'
4
5 describe DemanderStatus 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 = @user.author    #ユーザ作成時に連動して作成される
13     @demand_user = FactoryGirl.create :demand_user
14   end
15   describe '検証に於いて' do
16     before do
17       @ds = FactoryGirl.build :demander_status
18     end
19     
20     context 'オーソドックスなデータのとき' do
21       it '下限データが通る' do
22         @ds.receive_hour1 = -99999
23         @ds.receive_hour2 = -99999
24         @ds.should be_valid
25       end
26       it '上限データが通る' do
27         @ds.receive_hour1 = 99999
28         @ds.receive_hour2 = 99999
29         @ds.should be_valid
30       end
31     end
32     context 'requested_atを検証するとき' do
33     end
34     context 'rejected_atを検証するとき' do
35     end
36     context 'approved_atを検証するとき' do
37     end
38     context 'tokenを検証するとき' do
39     end
40     context 'receive_hour1を検証するとき' do
41       it '数値でなければ失敗する' do
42         @ds.receive_hour1 = 'a'
43         @ds.should_not be_valid
44       end
45     end
46     context 'receive_hour2を検証するとき' do
47       it '数値でなければ失敗する' do
48         @ds.receive_hour2 = 'a'
49         @ds.should_not be_valid
50       end
51     end
52   end
53   
54   describe 'デフォルト値補充に於いて' do
55     it 'defined' do
56       @ds = FactoryGirl.build :demander_status
57       @ds.supply_default
58     end
59   end
60   
61   describe '上書き補充に於いて' do
62     it 'defined' do
63       @ds = FactoryGirl.build :demander_status
64       @ds.overwrite
65     end
66   end
67   
68   describe '所持判定に於いて' do
69     before do
70       @ds = FactoryGirl.create :demander_status
71     end
72     it '管理者ならyes' do
73       @ds.own?(@admin).should == true
74     end
75     it '作家ならno' do
76       @ds.own?(@author).should == false
77     end
78     it 'パラメータが管理者でないならno' do
79       @ds.own?(nil).should == false
80     end
81   end
82   
83   describe '閲覧許可に於いて' do
84     before do
85       @ds = FactoryGirl.create :demander_status
86     end
87     it '管理者なら許可する' do
88       r = @ds.visible?(@admin)
89       r.should == true
90     end
91     it '作家なら許可しない' do
92       r = @ds.visible?(@author)
93       r.should == false
94     end
95     it 'それ以外のとき不許可を返す。' do
96       r = @ds.visible?(nil)
97       r.should be_false
98     end
99   end
100   
101   describe '状態に於いて' do
102     before do
103     end
104     context '申請日時がセットされていないとき' do
105       before do
106         @ds = FactoryGirl.create :demander_status, :requested_at => nil, :approved_at => Time.now
107       end
108       it '待機中0を返す' do
109         r = @ds.status
110         r.should eq 0
111       end
112     end
113     context '申請日時と否決日時がセットされているとき' do
114       before do
115         @ds = FactoryGirl.create :demander_status, :requested_at => Time.now, :rejected_at => Time.now
116       end
117       it '否決 1を返す' do
118         r = @ds.status
119         r.should eq 1
120       end
121     end
122     context '申請日時がセットされていて、可決日時と否決日時がセットされていないとき' do
123       before do
124         @ds = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => nil, :rejected_at => nil
125       end
126       it '申請中 2を返す' do
127         r = @ds.status
128         r.should eq 2
129       end
130     end
131     context '申請日時と可決日時がセットされているとき' do
132       before do
133         @ds = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => Time.now
134       end
135       it '貸与中 3を返す' do
136         r = @ds.status
137         r.should eq 3
138       end
139     end
140   end
141   
142   describe '一覧取得に於いて' do
143     before 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"
146     end
147     context 'page補正について' do
148       it '文字列から数値に変換される' do
149         DemanderStatus.page('8').should eq 8
150       end
151       it 'nilの場合は1になる' do
152         DemanderStatus.page().should eq 1
153       end
154       it '0以下の場合は1になる' do
155         DemanderStatus.page('0').should eq 1
156       end
157     end
158     context 'page_size補正について' do
159       it '文字列から数値に変換される' do
160         DemanderStatus.page_size('7').should eq 7
161       end
162       it 'nilの場合はDemanderStatus.default_page_sizeになる' do
163         DemanderStatus.page_size().should eq DemanderStatus.default_page_size
164       end
165       it '0以下の場合はDemanderStatus.default_page_sizeになる' do
166         DemanderStatus.page_size('0').should eq DemanderStatus.default_page_size
167       end
168       it 'DemanderStatus.max_page_sizeを超えた場合はDemanderStatus.max_page_sizeになる' do
169         DemanderStatus.page_size('1000').should eq DemanderStatus.max_page_size
170       end
171     end
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
177       end
178     end
179     it 'リストを返す' do
180       r = DemanderStatus.list
181       r.should eq [@ds]
182     end
183     it '管理名で並んでいる' do
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
187       r.should eq [v, @ds]
188     end
189     context 'DBに5件あって1ページの件数を2件に変えたとして' do
190       before 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)
200       end
201       it '通常は2件を返す' do
202         r = DemanderStatus.list
203         r.should have(2).items 
204       end
205       it 'page=1なら末尾2件を返す' do
206         #管理名で並んでいる
207         r = DemanderStatus.list(1)
208         r.should eq [@ds5, @ds4]
209       end
210       it 'page=2なら中間2件を返す' do
211         r = DemanderStatus.list(2)
212         r.should eq [@ds3, @ds2]
213       end
214       it 'page=3なら先頭1件を返す' do
215         r = DemanderStatus.list(3)
216         r.should eq [@ds]
217       end
218     end
219     context 'DBに5件あって1ページの件数を2件に変えたとして' do
220       before 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)
230       end
231       it '件数0は全件(5件)を返す' do
232         r = DemanderStatus.list 5, 0
233         r.should have(5).items 
234       end
235     end
236   end
237   describe '申請中一覧取得に於いて' do
238     before 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"
241     end
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
247       end
248     end
249     it 'リストを返す' do
250       r = DemanderStatus.requested_list
251       r.should eq [@ds]
252     end
253     it '管理名で並んでいる' do
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
257       r.should eq [v, @ds]
258     end
259     context 'DBに5件あって1ページの件数を2件に変えたとして' do
260       before 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)
270       end
271       it '通常は2件を返す' do
272         r = DemanderStatus.requested_list
273         r.should have(2).items 
274       end
275       it 'page=1なら末尾2件を返す' do
276         #管理名で並んでいる
277         r = DemanderStatus.requested_list(1)
278         r.should eq [@ds5, @ds4]
279       end
280       it 'page=2なら中間2件を返す' do
281         r = DemanderStatus.requested_list(2)
282         r.should eq [@ds3, @ds2]
283       end
284       it 'page=3なら先頭1件を返す' do
285         r = DemanderStatus.requested_list(3)
286         r.should eq [@ds]
287       end
288     end
289     context 'DBに5件あって1ページの件数を2件に変えたとして' do
290       before 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)
300       end
301       it '件数0は全件(5件)を返す' do
302         r = DemanderStatus.requested_list 5, 0
303         r.should have(5).items 
304       end
305     end
306   end
307   describe '一覧取得オプションに於いて' do
308     it 'includeキーを含んでいる' do
309       r = DemanderStatus.list_opt
310       r.has_key?(:include).should be_true
311     end
312     it '1つの項目を含んでいる' do
313       r = DemanderStatus.list_opt[:include]
314       r.should have(1).items
315     end
316     it '借手を含んでいる' do
317       r = DemanderStatus.list_opt[:include]
318       r.has_key?(:demander).should be_true
319     end
320   end
321   describe 'json一覧出力オプションに於いて' do
322     before do
323       @ds = FactoryGirl.create :demander_status
324       @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
325     end
326     it '借手を含んでいる' do
327       r = DemanderStatus.list.to_json DemanderStatus.list_json_opt
328       j = JSON.parse r
329       i = j.first
330       i.has_key?('demander').should be_true
331     end
332   end
333   
334   describe '単体取得に於いて' do
335     before do
336       @ds = FactoryGirl.create :demander_status
337       @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id
338     end
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
344       end
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
349       end
350     end
351     it '指定の貸与状況を返す' do
352       r = DemanderStatus.show @ds.id, @admin
353       r.should eq @ds
354     end
355     context '閲覧許可が出なかったとき' do
356       it '403Forbidden例外を返す' do
357         DemanderStatus.any_instance.stub(:visible?).and_return(false)
358         lambda{
359           DemanderStatus.show @ds.id, @admin
360         }.should raise_error(ActiveRecord::Forbidden)
361       end
362     end
363     context '存在しない貸与状況を開こうとしたとき' do
364       it '404RecordNotFound例外を返す' do
365         lambda{
366           DemanderStatus.show 110, @admin
367         }.should raise_error(ActiveRecord::RecordNotFound)
368       end
369     end
370   end
371   
372   describe '編集取得に於いて' do
373     before do
374       @ds = FactoryGirl.create :demander_status
375       @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id
376     end
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
382       end
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
387       end
388     end
389     it '指定の貸与状況を返す' do
390       DemanderStatus.any_instance.stub(:own?).and_return(true)
391       r = DemanderStatus.edit @ds.id, @admin
392       r.should eq @ds
393     end
394     context '権限がなかったとき' do
395       it '403Forbidden例外を返す' do
396         DemanderStatus.any_instance.stub(:own?).and_return(false)
397         lambda{
398           DemanderStatus.edit @ds.id, @admin
399         }.should raise_error(ActiveRecord::Forbidden)
400       end
401     end
402     context '存在しない貸与状況を開こうとしたとき' do
403       it '404RecordNotFound例外を返す' do
404         lambda{
405           DemanderStatus.edit 110, @admin
406         }.should raise_error(ActiveRecord::RecordNotFound)
407       end
408     end
409   end
410   describe '単体取得オプションに於いて' do
411     it 'includeキーを含んでいる' do
412       r = DemanderStatus.show_opt
413       r.has_key?(:include).should be_true
414     end
415     it '1つの項目を含んでいる' do
416       r = DemanderStatus.show_opt[:include]
417       r.should have(1).items
418     end
419     it '借手を含んでいる' do
420       r = DemanderStatus.show_opt[:include]
421       r.has_key?(:demander).should be_true
422     end
423   end
424   describe 'json単体出力オプションに於いて' do
425     before do
426       @ds = FactoryGirl.create :demander_status
427       @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
428     end
429     it '借手を含んでいる' do
430       r = DemanderStatus.show(@ds.id, @admin).to_json DemanderStatus.show_json_opt
431       j = JSON.parse r
432       i = j
433       i.has_key?('demander').should be_true
434     end
435   end
436   
437   describe '借受申請に於いて' do
438     before do
439     end
440     context '待機中状態がつつがなく終わるとき' do
441       before do
442         @ds = FactoryGirl.create :demander_status
443         @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
444       end
445       it '否決日時をクリアする' do
446         r = @ds.request
447         @ds.rejected_at.should be_nil
448       end
449       it '可決日時をクリアする' do
450         r = @ds.request
451         @ds.approved_at.should be_nil
452       end
453       it '申請日時に現在時刻をセットする' do
454         r = @ds.request
455         @ds.requested_at.should_not be_nil
456       end
457       it 'Trueを返す' do
458         r = @ds.request
459         r.should be_true
460       end
461     end
462     context '否決状態がつつがなく終わるとき' do
463       before 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
466       end
467       it '否決日時をクリアする' do
468         r = @ds.request
469         @ds.rejected_at.should be_nil
470       end
471       it '可決日時をクリアする' do
472         r = @ds.request
473         @ds.approved_at.should be_nil
474       end
475       it '申請日時に現在時刻をセットする' do
476         r = @ds.request
477         @ds.requested_at.should_not be_nil
478       end
479       it 'Trueを返す' do
480         r = @ds.request
481         r.should be_true
482       end
483     end
484     context '状態が申請中のとき' do
485       before do
486         @ds = FactoryGirl.create :demander_status, :requested_at => Time.now
487         @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
488       end
489       it 'Falseを返す' do
490         r = @ds.request
491         r.should be_false
492       end
493       it '申請中2を返す' do
494         r = @ds.request
495         @ds.status.should eq 2
496       end
497     end
498     context '状態が貸与中のとき' do
499       before 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
502       end
503       it 'Falseを返す' do
504         r = @ds.request
505         r.should be_false
506       end
507       it '貸与中3を返す' do
508         r = @ds.request
509         @ds.status.should eq 3
510       end
511     end
512   end
513   
514   describe '貸与停止に於いて' do
515     before do
516     end
517     context '状態が待機中のとき' do
518       before do
519         @ds = FactoryGirl.create :demander_status
520         @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
521       end
522       it 'Falseを返す' do
523         r = @ds.reject
524         r.should be_false
525       end
526       it '待機中0を返す' do
527         r = @ds.reject
528         @ds.status.should eq 0
529       end
530     end
531     context '状態が否決中のとき' do
532       before 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
535       end
536       it 'Falseを返す' do
537         r = @ds.reject
538         r.should be_false
539       end
540       it '否決中1を返す' do
541         r = @ds.reject
542         @ds.status.should eq 1
543       end
544     end
545     context '申請中の状態がつつがなく終わるとき' do
546       before do
547         @ds = FactoryGirl.create :demander_status, :requested_at => Time.now
548         @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
549       end
550       it '否決日時をセットする' do
551         r = @ds.reject
552         @ds.rejected_at.should_not be_nil
553       end
554       it '可決日時をクリアする' do
555         r = @ds.reject
556         @ds.approved_at.should be_nil
557       end
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)
561         r = @ds.reject
562       end
563       it 'Trueを返す' do
564         r = @ds.reject
565         r.should be_true
566       end
567     end
568     context '状態が貸与中のとき' do
569       before 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
572       end
573       it '否決日時をセットする' do
574         r = @ds.reject
575         @ds.rejected_at.should_not be_nil
576       end
577       it '可決日時をクリアする' do
578         r = @ds.reject
579         @ds.approved_at.should be_nil
580       end
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)
584         r = @ds.reject
585       end
586       it 'Trueを返す' do
587         r = @ds.reject
588         r.should be_true
589       end
590     end
591   end
592   
593   describe '貸与承認に於いて' do
594     before do
595     end
596     context '状態が待機中のとき' do
597       before do
598         @ds = FactoryGirl.create :demander_status
599         @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
600       end
601       it 'Falseを返す' do
602         r = @ds.approve 1,13
603         r.should be_false
604       end
605       it '待機中0を返す' do
606         r = @ds.approve 1,13
607         @ds.status.should eq 0
608       end
609     end
610     context '状態が否決中のとき' do
611       before 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
614       end
615       it '可決日時をセットする' do
616         r = @ds.approve 1,13
617         @ds.approved_at.should_not be_nil
618       end
619       it '巡回時1と巡回時2をセットする' do
620         r = @ds.approve 1,13
621         @ds.receive_hour1.should_not be_nil
622         @ds.receive_hour2.should_not be_nil
623       end
624       it '否決日時をクリアする' do
625         r = @ds.approve 1,13
626         @ds.rejected_at.should be_nil
627       end
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)
631         r = @ds.approve 1,13
632       end
633       it 'Trueを返す' do
634         r = @ds.approve 1,13
635         r.should be_true
636       end
637     end
638     context '申請中の状態がつつがなく終わるとき' do
639       before do
640         @ds = FactoryGirl.create :demander_status, :requested_at => Time.now
641         @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
642       end
643       it '可決日時をセットする' do
644         r = @ds.approve 1,13
645         @ds.approved_at.should_not be_nil
646       end
647       it '巡回時1と巡回時2をセットする' do
648         r = @ds.approve 1,13
649         @ds.receive_hour1.should_not be_nil
650         @ds.receive_hour2.should_not be_nil
651       end
652       it '否決日時をクリアする' do
653         r = @ds.approve 1,13
654         @ds.rejected_at.should be_nil
655       end
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)
659         r = @ds.approve 1,13
660       end
661       it 'Trueを返す' do
662         r = @ds.approve 1,13
663         r.should be_true
664       end
665     end
666     context '状態が貸与中のとき' do
667       before 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
670       end
671       it 'Falseを返す' do
672         r = @ds.approve 1,13
673         r.should be_false
674       end
675       it '貸与中3を返す' do
676         r = @ds.approve 1,13
677         @ds.status.should eq 3
678       end
679     end
680   end
681   
682   describe '借受停止に於いて' do
683     before 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
686     end
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)
691         r = @ds.stop
692       end
693     end
694     context 'つつがなく終わるとき' do
695       before do
696         DemandUser.any_instance.stub(:delete_token).with(any_args).and_return(true)
697       end
698       it '申請日時をクリアする' do
699         r = @ds.stop
700         @ds.approved_at.should be_nil
701       end
702       it '可決日時をクリアする' do
703         r = @ds.stop
704         @ds.approved_at.should be_nil
705       end
706       it '否決日時をクリアする' do
707         r = @ds.stop
708         @ds.rejected_at.should be_nil
709       end
710       it '巡回時1と巡回時2をクリアする' do
711         r = @ds.stop
712         @ds.receive_hour1.should be_nil
713         @ds.receive_hour2.should be_nil
714       end
715       it 'Trueを返す' do
716         r = @ds.stop
717         r.should be_true
718       end
719     end
720     context '自身の保存に失敗したとき' do
721       before do
722         DemanderStatus.any_instance.stub(:save).with(any_args).and_return(false)
723       end
724       it 'ロールバックする' do
725         r = @ds.stop
726         @ds.reload
727         @ds.requested_at.should_not be_nil
728         @ds.approved_at.should_not be_nil
729         @ds.receive_hour2.should_not be_nil
730       end
731       it 'Falseを返す' do
732         r = @ds.stop
733         r.should be_false
734       end
735     end
736     context '借手アカウントの保存に失敗したとき' do
737       before do
738         DemandUser.any_instance.stub(:delete_token).with(any_args).and_return(false)
739       end
740       it 'ロールバックする' do
741         r = @ds.stop
742         @ds.reload
743         @ds.requested_at.should_not be_nil
744         @ds.approved_at.should_not be_nil
745         @ds.receive_hour2.should_not be_nil
746       end
747       it 'Falseを返す' do
748         r = @ds.stop
749         r.should be_false
750       end
751     end
752   end
753 end
754