OSDN Git Service

fix: any
[pettanr/pettanr.git] / spec / controllers / demanders_controller_spec.rb
1 # -*- encoding: utf-8 -*-
2 require 'spec_helper'
3 #借手
4
5 describe DemandersController 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     @demand_user = FactoryGirl.create :demand_user
14   end
15   
16   describe '借手メニューに於いて' do
17     before do
18       sign_in @demand_user
19     end
20     context 'つつがなく終わるとき' do
21       before do
22         @ds = FactoryGirl.create :demander_status
23         @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id
24       end
25       it 'ステータスコード200 OKを返す' do
26         get :index
27         response.should be_success
28       end
29       it '借手アカウントから@demanderに借手を取得している' do
30         get :index
31         assigns(:demander).should eq(@demander)
32       end
33       context 'html形式' do
34         it 'indexテンプレートを描画する' do
35           get :index
36           response.should render_template("index")
37         end
38       end
39       context 'json形式' do
40       end
41     end
42     context '借手が存在しなかったとき' do
43       context 'html形式' do
44         it 'ステータスコード302 Foundを返す' do
45           get :index
46           response.status.should eq 302
47         end
48         it 'プロフィール登録ページへ遷移する' do
49           get :index
50           response.body.should redirect_to new_demander_path
51         end
52       end
53     end
54     context '借手権限がないとき' do
55       before do
56         sign_out @demand_user
57       end
58       context 'html形式' do
59         it 'ステータスコード302 Foundを返す' do
60           get :index
61           response.status.should eq 302
62         end
63         it 'サインインページへ遷移する' do
64           get :index
65           response.body.should redirect_to '/demand_users/sign_in'
66         end
67       end
68       context 'json形式' do
69       end
70     end
71   end
72   
73   describe '新規作成フォーム表示に於いて' do
74     before do
75       sign_in @demand_user
76     end
77     context 'つつがなく終わるとき' do
78       it 'ステータスコード200 OKを返す' do
79         get :new
80         response.should be_success 
81       end
82       it '@demanderに新規データを用意している' do
83         get :new
84         assigns(:demander).should be_a_new(Demander)
85       end
86       it '借手モデルにデフォルト値補充を依頼している' do
87         Demander.any_instance.should_receive(:supply_default).exactly(1)
88         get :new
89       end
90       context 'html形式' do
91         it 'newテンプレートを描画する' do
92           get :new
93           response.should render_template("new")
94         end
95       end
96       context 'json形式' do
97         it 'jsonデータを返す' do
98           get :new, :format => :json
99           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
100         end
101         it '借手モデルにjson単体出力オプションを問い合わせている' do
102           Demander.should_receive(:show_json_opt).exactly(1)
103           get :new, :format => :json
104         end
105       end
106     end
107     context '借手権限がないとき' do
108       before do
109         sign_out @demand_user
110       end
111       context 'html形式' do
112         it 'ステータスコード302 Foundを返す' do
113           get :new
114           response.status.should eq 302
115         end
116         it 'サインインページへ遷移する' do
117           get :new
118           response.body.should redirect_to '/demand_users/sign_in'
119         end
120       end
121       context 'json形式' do
122         it 'ステータスコード401 Unauthorizedを返す' do
123           get :new, :format => :json
124           response.status.should eq 401
125         end
126         it '応答メッセージにUnauthorizedを返す' do
127           get :new, :format => :json
128           response.message.should match(/Unauthorized/)
129         end
130       end
131     end
132   end
133
134   describe '新規作成に於いて' do
135     before do
136       sign_in @demand_user
137       @attr = FactoryGirl.attributes_for(:demander, :demand_user_id => @demand_user.id, :caption => 'normal')
138     end
139     context '事前チェックしておく' do
140       it '借手モデルにデフォルト値補充を依頼している' do
141         Demander.any_instance.should_receive(:supply_default).exactly(1)
142         post :create, :demander => @attr
143       end
144       it '借手モデルにカラム値復元を依頼している' do
145         Demander.any_instance.should_receive(:attributes=).exactly(1)
146         post :create, :demander => @attr
147       end
148       it '借手モデルに上書き補充を依頼している' do
149         Demander.any_instance.should_receive(:overwrite).exactly(1)
150         post :create, :demander => @attr
151       end
152       it 'モデルに保存依頼する' do
153         Demander.any_instance.should_receive(:store).exactly(1)
154         post :create, :demander => @attr
155       end
156     end
157     context 'つつがなく終わるとき' do
158       it "@demanderに作成された借手を保持していて、それがDBにある" do
159         post :create, :demander => @attr
160         assigns(:demander).should be_a(Demander)
161         assigns(:demander).should be_persisted
162       end
163       context 'html形式' do
164         it 'ステータスコード302 Foundを返す' do
165           Demander.any_instance.stub(:store).and_return(true)
166           post :create, :demander => @attr
167           response.status.should eq 302
168         end
169         it '作成された借手の表示ページへ遷移する' do
170 #          Demander.any_instance.stub(:save).and_return(true)
171           post :create, :demander => @attr
172           response.should redirect_to(Demander.last)
173         end
174       end
175       context 'json形式' do
176         it 'ステータスコード200 OKを返す' do
177 #          Demander.any_instance.stub(:save).and_return(true)
178           post :create, :demander => @attr, :format => :json
179           response.should be_success 
180         end
181         it '作成された借手をjsonデータで返す' do
182           post :create, :demander => @attr, :format => :json
183           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
184         end
185         it 'データがアレになっている' do
186           post :create, :demander => @attr, :format => :json
187           json = JSON.parse response.body
188           json["caption"].should match(/normal/)
189         end
190       end
191     end
192     context '借手権限がないとき' do
193       before do
194         sign_out @demand_user
195       end
196       context 'html形式' do
197         it 'ステータスコード302 Foundを返す' do
198           post :create, :demander => @attr
199           response.status.should eq 302
200         end
201         it 'サインインページへ遷移する' do
202           post :create, :demander => @attr
203           response.body.should redirect_to '/demand_users/sign_in'
204         end
205       end
206       context 'json形式' do
207         it 'ステータスコード401 Unauthorizedを返す' do
208           post :create, :demander => @attr, :format => :json
209           response.status.should eq 401
210         end
211         it '応答メッセージにUnauthorizedを返す' do
212           post :create, :demander => @attr, :format => :json
213           response.message.should match(/Unauthorized/)
214         end
215       end
216     end
217     context '検証、保存に失敗した' do
218       before do
219         Demander.any_instance.stub(:store).and_return(false)
220       end
221       it "未保存の借手を保持している" do
222         post :create, :demander => @attr
223         assigns(:demander).should be_a_new(Demander)
224       end
225       context 'html形式' do
226         it 'ステータスコード200 OKを返す' do
227           post :create, :demander => @attr
228           response.status.should eq 200
229         end
230         it '新規ページを描画する' do
231           post :create, :demander => @attr
232           response.should render_template("new")
233         end
234       end
235       context 'json形式' do
236         it 'ステータスコード422 unprocessable_entity を返す' do
237           post :create, :demander => @attr, :format => :json
238           response.status.should eq 422
239         end
240         it '応答メッセージUnprocessable Entityを返す' do
241           post :create, :demander => @attr, :format => :json
242           response.message.should match(/Unprocessable/)
243         end
244       end
245     end
246   end
247
248   describe '編集フォーム表示に於いて' do
249     before do
250       @ds = FactoryGirl.create :demander_status
251       @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id
252       sign_in @demand_user
253       Demander.stub(:edit).and_return(@demander)
254     end
255     context 'つつがなく終わるとき' do
256       it 'ステータスコード200 OKを返す' do
257         get :edit, :id => @demander.id
258         response.should be_success 
259       end
260       it '借手モデルに編集取得を問い合わせている' do
261         Demander.should_receive(:edit).exactly(1)
262         get :edit, :id => @demander.id
263       end
264       it '@demanderにデータを用意している' do
265         get :edit, :id => @demander.id
266         assigns(:demander).should eq @demander
267       end
268       context 'html形式' do
269         it 'editテンプレートを描画する' do
270           get :edit, :id => @demander.id
271           response.should render_template("edit")
272         end
273       end
274     end
275     context '借手権限がないとき' do
276       before do
277         sign_out @demand_user
278       end
279       context 'html形式' do
280         it 'ステータスコード302 Foundを返す' do
281           get :edit, :id => @demander.id
282           response.status.should eq 302
283         end
284         it 'サインインページへ遷移する' do
285           get :edit, :id => @demander.id
286           response.body.should redirect_to '/demand_users/sign_in'
287         end
288       end
289     end
290   end
291
292   describe '更新に於いて' do
293     before do
294       @ds = FactoryGirl.create :demander_status
295       @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id
296       @attr = FactoryGirl.attributes_for(:demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id, :caption => 'updated caption')
297       sign_in @demand_user
298     end
299     context '事前チェックしておく' do
300       it '借手モデルに編集取得を問い合わせている' do
301         Demander.stub(:edit).with(any_args()).and_return @demander
302         Demander.should_receive(:edit).exactly(1)
303         put :update, :id => @demander.id, :demander => @attr
304       end
305       it '借手モデルにカラム値復元を依頼している' do
306         Demander.any_instance.should_receive(:attributes=).exactly(1)
307         put :update, :id => @demander.id, :demander => @attr
308       end
309       it '借手モデルに上書き補充を依頼している' do
310         Demander.any_instance.should_receive(:overwrite).exactly(1)
311         put :update, :id => @demander.id, :demander => @attr
312       end
313       it 'モデルに更新を依頼する' do
314         Demander.any_instance.stub(:store).with(any_args).and_return true
315         Demander.any_instance.should_receive(:store).exactly(1)
316         put :update, :id => @demander.id, :demander => @attr
317       end
318       it '@demanderにアレを取得している' do
319         put :update, :id => @demander.id, :demander => @attr
320         assigns(:demander).id.should eq(@demander.id)
321       end
322     end
323     context 'つつがなく終わるとき' do
324       it '更新される' do
325         put :update, :id => @demander.id, :demander => @attr
326         Demander.find(@demander.id).caption.should match /updated/
327       end
328       context 'html形式' do
329         before do
330           Demander.any_instance.stub(:store).with(any_args()).and_return(true)
331         end
332         it 'ステータスコード302 Foundを返す' do
333           put :update, :id => @demander.id, :demander => @attr
334           response.status.should eq 302
335         end
336         it '更新された借手の表示ページへ遷移する' do
337           put :update, :id => @demander.id, :demander => @attr
338           response.should redirect_to(@demander)
339         end
340       end
341       context 'json形式' do
342         before do
343           Demander.any_instance.stub(:store).with(any_args()).and_return(true)
344         end
345         it 'ステータスコード200 OKを返す' do
346           put :update, :id => @demander.id, :demander => @attr, :format => :json
347           response.should be_success 
348         end
349         it 'ページ本体は特に返さない' do
350           put :update, :id => @demander.id, :demander => @attr, :format => :json
351           response.body.should match /./
352         end
353       end
354     end
355     context '借手権限がないとき' do
356       before do
357         sign_out @demand_user
358       end
359       it 'ステータスコード302 Foundを返す' do
360         put :update, :id => @demander.id, :demander => @attr
361         response.status.should eq 302
362       end
363       context 'html形式' do
364         it 'サインインページへ遷移する' do
365           put :update, :id => @demander.id, :demander => @attr
366           response.body.should redirect_to '/demand_users/sign_in'
367         end
368       end
369       context 'json形式' do
370         it '応答メッセージにUnauthorizedを返す' do
371           put :update, :id => @demander.id, :demander => @attr, :format => :json
372           response.message.should match(/Unauthorized/)
373         end
374       end
375     end
376     context '検証、保存に失敗したとき' do
377       before do
378         Demander.any_instance.stub(:store).and_return(false)
379       end
380       context 'html形式' do
381         it 'ステータスコード200 Okを返す' do
382           put :update, :id => @demander.id, :demander => @attr
383           response.status.should eq 200
384         end
385         it '編集ページを描画する' do
386           put :update, :id => @demander.id, :demander => @attr
387           response.should render_template("edit")
388         end
389       end
390       context 'json形式' do
391         it 'ステータスコード422 unprocessable_entity を返す' do
392           Demander.any_instance.stub(:save).and_return(false)
393           put :update, :id => @demander.id, :demander => @attr, :format => :json
394           response.status.should eq 422
395         end
396         it '応答メッセージUnprocessable Entityを返す' do
397           put :update, :id => @demander.id, :demander => @attr, :format => :json
398           response.message.should match(/Unprocessable/)
399         end
400       end
401     end
402   end
403   
404   describe '借受申請に於いて' do
405     before do
406       @ds = FactoryGirl.create :demander_status
407       @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id
408       @attr = FactoryGirl.attributes_for(:demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id, :caption => 'updated caption')
409       sign_in @demand_user
410     end
411     context '事前チェックしておく' do
412       it '借手モデルの貸与状況に借受申請を依頼している' do
413         DemanderStatus.stub(:request).with(any_args()).and_return true
414         DemanderStatus.any_instance.should_receive(:request).exactly(1)
415         post :req
416       end
417     end
418     context 'つつがなく終わるとき' do
419       context 'html形式' do
420         before do
421           DemanderStatus.any_instance.stub(:request).with(any_args()).and_return(true)
422         end
423         it 'ステータスコード302 Foundを返す' do
424           post :req
425           response.status.should eq 302
426         end
427         it '借手ホーム(index)ページへ遷移する' do
428           post :req
429           response.should redirect_to(demanders_path)
430         end
431         it '一時的メッセージに処理成功を設定する' do
432           post :req
433           flash[:notice].should eq I18n.t('demanders.flash.notice.requested')
434         end
435       end
436       context 'json形式' do
437         before do
438           DemanderStatus.any_instance.stub(:request).with(any_args()).and_return(true)
439         end
440         it 'ステータスコード200 OKを返す' do
441           post :req, :format => :json
442           response.should be_success 
443         end
444         it 'ページ本体は特に返さない' do
445           post :req, :format => :json
446           response.body.should match /./
447         end
448       end
449     end
450     context '借手権限がないとき' do
451       before do
452         sign_out @demand_user
453       end
454       it 'ステータスコード302 Foundを返す' do
455         post :req
456         response.status.should eq 302
457       end
458       context 'html形式' do
459         it 'サインインページへ遷移する' do
460           post :req
461           response.body.should redirect_to '/demand_users/sign_in'
462         end
463       end
464       context 'json形式' do
465         it '応答メッセージにUnauthorizedを返す' do
466           post :req, :format => :json
467           response.message.should match(/Unauthorized/)
468         end
469       end
470     end
471     context '検証、保存に失敗したとき' do
472       before do
473         DemanderStatus.any_instance.stub(:request).with(any_args()).and_return(false)
474       end
475       context 'html形式' do
476         it 'ステータスコード302 Foundを返す' do
477           post :req
478           response.status.should eq 302
479         end
480         it '借手ホーム(index)ページへ遷移する' do
481           post :req
482           response.should redirect_to(demanders_path)
483         end
484         it '一時的メッセージに処理失敗を設定する' do
485           post :req
486           flash[:notice].should eq I18n.t('demanders.flash.notice.not_requested')
487         end
488       end
489       context 'json形式' do
490         it 'ステータスコード422 unprocessable_entity を返す' do
491           post :req, :format => :json
492           response.status.should eq 422
493         end
494         it '応答メッセージUnprocessable Entityを返す' do
495           post :req, :format => :json
496           response.message.should match(/Unprocessable/)
497         end
498       end
499     end
500   end
501   
502   describe '借受停止に於いて' do
503     before do
504       @ds = FactoryGirl.create :demander_status, :requested_at => Time.now, :approved_at => Time.now
505       @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id
506       sign_in @demand_user
507     end
508     context '事前チェックしておく' do
509       it '借手モデルに編集取得を問い合わせている' do
510         Demander.stub(:edit).with(any_args()).and_return @demander
511         Demander.should_receive(:edit).exactly(1)
512         delete :destroy, :id => @demander.id
513       end
514       it '借手モデルに借受停止を依頼する' do
515         Demander.any_instance.stub(:stop).with(any_args).and_return true
516         Demander.any_instance.should_receive(:stop).exactly(1)
517         delete :destroy, :id => @demander.id
518       end
519       it '@demanderにアレを取得している' do
520         delete :destroy, :id => @demander.id
521         assigns(:demander).should eq(@demander)
522       end
523     end
524     context 'つつがなく終わるとき' do
525       before do
526         Demander.any_instance.stub(:stop).with(any_args()).and_return(true)
527       end
528       context 'html形式' do
529         it 'ステータスコード302 Foundを返す' do
530           delete :destroy, :id => @demander.id
531           response.status.should eq 302
532         end
533         it '借手ホーム(index)ページに遷移する' do
534           delete :destroy, :id => @demander.id
535           response.should redirect_to(demanders_path)
536         end
537         it '一時的メッセージに処理成功を設定する' do
538           delete :destroy, :id => @demander.id
539           flash[:notice].should eq I18n.t('demanders.flash.notice.stopped')
540         end
541       end
542       context 'json形式' do
543         it 'ステータスコード200 OKを返す' do
544           delete :destroy, :id => @demander.id, :format => :json
545           response.should be_success 
546         end
547         it 'ページ本体は特に返さない' do
548           delete :destroy, :id => @demander.id, :format => :json
549           response.body.should match /./
550         end
551       end
552     end
553     context '借手権限がないとき' do
554       before do
555         sign_out @demand_user
556       end
557       it 'ステータスコード302 Foundを返す' do
558         delete :destroy, :id => @demander.id
559         response.status.should eq 302
560       end
561       context 'html形式' do
562         it 'サインインページへ遷移する' do
563           delete :destroy, :id => @demander.id
564           response.body.should redirect_to '/demand_users/sign_in'
565         end
566       end
567       context 'json形式' do
568         it '応答メッセージにUnauthorizedを返す' do
569           delete :destroy, :id => @demander.id, :format => :json
570           response.message.should match(/Unauthorized/)
571         end
572       end
573     end
574     context '借受停止に失敗したとき' do
575       before do
576         Demander.any_instance.stub(:stop).with(any_args).and_return(false)
577       end
578       context 'html形式' do
579         it 'ステータスコード302 Foundを返す' do
580           delete :destroy, :id => @demander.id
581           response.status.should eq 302
582         end
583         it '借手ホーム(index)ページに遷移する' do
584           delete :destroy, :id => @demander.id
585           response.should redirect_to(demanders_path)
586         end
587         it '一時的メッセージに処理失敗を設定する' do
588           delete :destroy, :id => @demander.id
589           flash[:notice].should eq I18n.t('demanders.flash.notice.not_stopped')
590         end
591       end
592       context 'json形式' do
593         it 'ステータスコード422 unprocessable_entity を返す' do
594           delete :destroy, :id => @demander.id, :format => :json
595           response.status.should eq 422
596         end
597         it '応答メッセージUnprocessable Entityを返す' do
598           delete :destroy, :id => @demander.id, :format => :json
599           response.message.should match(/Unprocessable/)
600         end
601       end
602     end
603   end
604   
605   describe 'ライセンスエクスポートに於いて' do
606     before do
607       @ds = FactoryGirl.create :demander_status
608       @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id
609       sign_in @demand_user
610     end
611     context 'つつがなく終わるとき' do
612       before do
613         Demander.any_instance.stub(:licenses_export).with(any_args).and_return([@license, @license, @license])
614       end
615       it 'ステータスコード200 OKを返す' do
616         get :licenses_export, :format => :json
617         response.should be_success 
618       end
619       it '日付文字列変換を依頼している' do
620         DemandersController.any_instance.should_receive(:ymd_to_time).with('20111010').exactly(1)
621         get :licenses_export, :date => '20111010', :format => :json
622       end
623       it '借手モデルにライセンスエクスポートを問い合わせている' do
624         Demander.any_instance.should_receive(:licenses_export).with(Time.parse('2011/10/10')).exactly(1)
625         get :licenses_export, :date => '20111010', :format => :json
626       end
627       it '@licensesにリストを取得している' do
628         get :licenses_export, :format => :json
629         assigns(:licenses).should have_at_least(3).items
630       end
631       context 'html形式' do
632       end
633       context 'json形式' do
634         it 'jsonデータを返す' do
635           get :licenses_export, :format => :json
636           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
637         end
638         it 'データがリスト構造になっている' do
639           get :licenses_export, :format => :json
640           json = JSON.parse response.body
641           json.should have_at_least(3).items
642         end
643         it 'リストの先頭くらいはライセンスっぽいものであって欲しい' do
644           get :licenses_export, :format => :json
645           json = JSON.parse response.body
646           json.first.has_key?("name").should be_true
647           json.first.has_key?("caption").should be_true
648           json.first.has_key?("url").should be_true
649         end
650       end
651     end
652     context '借手権限がないとき' do
653       before do
654         sign_out @demand_user
655       end
656       context 'html形式' do
657         it 'ステータスコード302 Foundを返す' do
658           get :licenses_export
659           response.status.should eq 302
660         end
661         it 'サインインページへ遷移する' do
662           get :licenses_export
663           response.body.should redirect_to '/demand_users/sign_in'
664         end
665       end
666       context 'json形式' do
667         it 'ステータスコード401を返す' do
668           get :licenses_export, :format => :json
669           response.status.should eq 401
670         end
671         it '応答メッセージにUnauthorizedを返す' do
672           get :licenses_export, :format => :json
673           response.message.should match(/Unauthorized/)
674         end
675       end
676     end
677     context '借受権限がないとき' do
678       before do
679         Demander.any_instance.stub(:status).and_return(1)
680       end
681       context 'html形式' do
682       end
683       context 'json形式' do
684         it 'ステータスコード403 forbiddenを返す' do
685           lambda{
686             get :licenses_export, :format => :json
687           }.should raise_error(ActiveRecord::Forbidden)
688         end
689       end
690     end
691   end
692   
693   describe '絵師エクスポートに於いて' do
694     before do
695       @ds = FactoryGirl.create :demander_status
696       @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id
697       @artist = FactoryGirl.create :artist, :author_id => @author.id
698       sign_in @demand_user
699     end
700     context 'つつがなく終わるとき' do
701       before do
702         Demander.any_instance.stub(:artists_export).with(any_args).and_return([@artist, @artist, @artist])
703       end
704       it 'ステータスコード200 OKを返す' do
705         get :artists_export, :format => :json
706         response.should be_success 
707       end
708       it '日付文字列変換を依頼している' do
709         DemandersController.any_instance.should_receive(:ymd_to_time).with('20111010').exactly(1)
710         get :artists_export, :date => '20111010', :format => :json
711       end
712       it '借手モデルに絵師エクスポートを問い合わせている' do
713         Demander.any_instance.should_receive(:artists_export).with(Time.parse('2011/10/10')).exactly(1)
714         get :artists_export, :date => '20111010', :format => :json
715       end
716       it '@artistsにリストを取得している' do
717         get :artists_export, :format => :json
718         assigns(:artists).should have_at_least(3).items
719       end
720       context 'html形式' do
721       end
722       context 'json形式' do
723         it 'jsonデータを返す' do
724           get :artists_export, :format => :json
725           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
726         end
727         it 'データがリスト構造になっている' do
728           get :artists_export, :format => :json
729           json = JSON.parse response.body
730           json.should have_at_least(3).items
731         end
732         it 'リストの先頭くらいは絵師っぽいものであって欲しい' do
733           get :artists_export, :format => :json
734           json = JSON.parse response.body
735           json.first.has_key?("name").should be_true
736           json.first.has_key?("author_id").should be_true
737         end
738       end
739     end
740     context '借手権限がないとき' do
741       before do
742         sign_out @demand_user
743       end
744       context 'html形式' do
745         it 'ステータスコード302 Foundを返す' do
746           get :artists_export
747           response.status.should eq 302
748         end
749         it 'サインインページへ遷移する' do
750           get :artists_export
751           response.body.should redirect_to '/demand_users/sign_in'
752         end
753       end
754       context 'json形式' do
755         it 'ステータスコード401を返す' do
756           get :artists_export, :format => :json
757           response.status.should eq 401
758         end
759         it '応答メッセージにUnauthorizedを返す' do
760           get :artists_export, :format => :json
761           response.message.should match(/Unauthorized/)
762         end
763       end
764     end
765     context '借受権限がないとき' do
766       before do
767         Demander.any_instance.stub(:status).and_return(1)
768       end
769       context 'html形式' do
770       end
771       context 'json形式' do
772         it 'ステータスコード403 forbiddenを返す' do
773           lambda{
774             get :artists_export, :format => :json
775           }.should raise_error(ActiveRecord::Forbidden)
776         end
777       end
778     end
779   end
780   
781   describe '原画エクスポートに於いて' do
782     before do
783       @ds = FactoryGirl.create :demander_status
784       @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id
785       @artist = FactoryGirl.create :artist, :author_id => @author.id
786       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
787       sign_in @demand_user
788     end
789     context 'つつがなく終わるとき' do
790       before do
791         Demander.any_instance.stub(:original_pictures_export).with(any_args).and_return([@op, @op, @op])
792       end
793       it 'ステータスコード200 OKを返す' do
794         get :original_pictures_export, :format => :json
795         response.should be_success 
796       end
797       it '日付文字列変換を依頼している' do
798         DemandersController.any_instance.should_receive(:ymd_to_time).with('20111010').exactly(1)
799         get :original_pictures_export, :date => '20111010', :format => :json
800       end
801       it '借手モデルに原画エクスポートを問い合わせている' do
802         Demander.any_instance.should_receive(:original_pictures_export).with(Time.parse('2011/10/10')).exactly(1)
803         get :original_pictures_export, :date => '20111010', :format => :json
804       end
805       it '@original_picturesにリストを取得している' do
806         get :original_pictures_export, :format => :json
807         assigns(:original_pictures).should have_at_least(3).items
808       end
809       context 'html形式' do
810       end
811       context 'json形式' do
812         it '原画モデルにリストのjson化を依頼している' do
813           OriginalPicture.should_receive(:list_as_json_text).with(any_args).exactly(1)
814           OriginalPicture.stub(:list_as_json_text).with(any_args).and_return('[]')
815           get :original_pictures_export, :format => :json
816         end
817         it 'jsonデータを返す' do
818           get :original_pictures_export, :format => :json
819           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
820         end
821         it 'データがリスト構造になっている' do
822           get :original_pictures_export, :format => :json
823           json = JSON.parse response.body
824           json.should have_at_least(3).items
825         end
826         it 'リストの先頭くらいは原画っぽいものであって欲しい' do
827           get :original_pictures_export, :format => :json
828           json = JSON.parse response.body
829           json.first.has_key?("ext").should be_true
830           json.first.has_key?("md5").should be_true
831         end
832       end
833     end
834     context '借手権限がないとき' do
835       before do
836         sign_out @demand_user
837       end
838       context 'html形式' do
839         it 'ステータスコード302 Foundを返す' do
840           get :original_pictures_export
841           response.status.should eq 302
842         end
843         it 'サインインページへ遷移する' do
844           get :original_pictures_export
845           response.body.should redirect_to '/demand_users/sign_in'
846         end
847       end
848       context 'json形式' do
849         it 'ステータスコード401を返す' do
850           get :original_pictures_export, :format => :json
851           response.status.should eq 401
852         end
853         it '応答メッセージにUnauthorizedを返す' do
854           get :original_pictures_export, :format => :json
855           response.message.should match(/Unauthorized/)
856         end
857       end
858     end
859     context '借受権限がないとき' do
860       before do
861         Demander.any_instance.stub(:status).and_return(1)
862       end
863       context 'html形式' do
864       end
865       context 'json形式' do
866         it 'ステータスコード403 forbiddenを返す' do
867           lambda{
868             get :original_pictures_export, :format => :json
869           }.should raise_error(ActiveRecord::Forbidden)
870         end
871       end
872     end
873   end
874   
875   describe '実素材エクスポートに於いて' do
876     before do
877       @ds = FactoryGirl.create :demander_status
878       @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id
879       @artist = FactoryGirl.create :artist, :author_id => @author.id
880       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
881       @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
882       @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
883       sign_in @demand_user
884       Picture.any_instance.stub(:restore).with(any_args).and_return('picture binary data')
885     end
886     context 'つつがなく終わるとき' do
887       before do
888         Demander.any_instance.stub(:pictures_export).with(any_args).and_return([@p, @p, @p])
889       end
890       it 'ステータスコード200 OKを返す' do
891         get :pictures_export, :format => :json
892         response.should be_success 
893       end
894       it '日付文字列変換を依頼している' do
895         DemandersController.any_instance.should_receive(:ymd_to_time).with('20111010').exactly(1)
896         get :pictures_export, :date => '20111010', :format => :json
897       end
898       it '借手モデルに実素材エクスポートを問い合わせている' do
899         Demander.any_instance.should_receive(:pictures_export).with(Time.parse('2011/10/10')).exactly(1)
900         get :pictures_export, :date => '20111010', :format => :json
901       end
902       it '@picturesにリストを取得している' do
903         get :pictures_export, :format => :json
904         assigns(:pictures).should have_at_least(3).items
905       end
906       context 'html形式' do
907       end
908       context 'json形式' do
909         it '実素材モデルにリストのjson化を依頼している' do
910           Picture.should_receive(:list_as_json_text).with(any_args).exactly(1)
911           Picture.stub(:list_as_json_text).with(any_args).and_return('[]')
912           get :pictures_export, :format => :json
913         end
914         it 'jsonデータを返す' do
915           get :pictures_export, :format => :json
916           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
917         end
918         it 'データがリスト構造になっている' do
919           get :pictures_export, :format => :json
920           json = JSON.parse response.body
921           json.should have_at_least(3).items
922         end
923         it 'リストの先頭くらいは実素材っぽいものであって欲しい' do
924           get :pictures_export, :format => :json
925           json = JSON.parse response.body
926           json.first.has_key?("ext").should be_true
927           json.first.has_key?("revision").should be_true
928         end
929       end
930     end
931     context '借手権限がないとき' do
932       before do
933         sign_out @demand_user
934       end
935       context 'html形式' do
936         it 'ステータスコード302 Foundを返す' do
937           get :pictures_export
938           response.status.should eq 302
939         end
940         it 'サインインページへ遷移する' do
941           get :pictures_export
942           response.body.should redirect_to '/demand_users/sign_in'
943         end
944       end
945       context 'json形式' do
946         it 'ステータスコード401を返す' do
947           get :pictures_export, :format => :json
948           response.status.should eq 401
949         end
950         it '応答メッセージにUnauthorizedを返す' do
951           get :pictures_export, :format => :json
952           response.message.should match(/Unauthorized/)
953         end
954       end
955     end
956     context '借受権限がないとき' do
957       before do
958         Demander.any_instance.stub(:status).and_return(1)
959       end
960       context 'html形式' do
961       end
962       context 'json形式' do
963         it 'ステータスコード403 forbiddenを返す' do
964           lambda{
965             get :pictures_export, :format => :json
966           }.should raise_error(ActiveRecord::Forbidden)
967         end
968       end
969     end
970   end
971   
972   describe 'エクスポートに於いて' do
973     before do
974       @ds = FactoryGirl.create :demander_status
975       @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id
976       @artist = FactoryGirl.create :artist, :author_id => @author.id
977       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
978       @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
979       @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
980       sign_in @demand_user
981     end
982     context 'つつがなく終わるとき' do
983       before do
984         Demander.any_instance.stub(:export).with(any_args).and_return({:licenses => [@license], :artists => [@artist], :original_pictures => [@op], :pictures => [@p]})
985         OriginalPicture.stub(:list_as_json_text).with(any_args).and_return('[]')
986         Picture.stub(:list_as_json_text).with(any_args).and_return('[]')
987       end
988       it 'ステータスコード200 OKを返す' do
989         get :export, :format => :json
990         response.should be_success 
991       end
992       it '日付文字列変換を依頼している' do
993         DemandersController.any_instance.should_receive(:ymd_to_time).with('20111010').exactly(1)
994         get :export, :date => '20111010', :format => :json
995       end
996       it '借手モデルにエクスポートを問い合わせている' do
997         Demander.any_instance.should_receive(:export).with(Time.parse('2011/10/10')).exactly(1)
998         get :export, :date => '20111010', :format => :json
999       end
1000       it '@exportsにリストを取得している' do
1001         get :export, :format => :json
1002         assigns(:exports).is_a?(Hash).should be_true
1003       end
1004       context 'html形式' do
1005       end
1006       context 'json形式' do
1007         it '原画モデルにリストのjson化を依頼している' do
1008           OriginalPicture.should_receive(:list_as_json_text).with(any_args).exactly(1)
1009           OriginalPicture.stub(:list_as_json_text).with(any_args).and_return('[]')
1010           get :export, :format => :json
1011         end
1012         it '実素材モデルにリストのjson化を依頼している' do
1013           Picture.should_receive(:list_as_json_text).with(any_args).exactly(1)
1014           Picture.stub(:list_as_json_text).with(any_args).and_return('[]')
1015           get :export, :format => :json
1016         end
1017         it 'jsonデータを返す' do
1018           get :export, :format => :json
1019           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1020         end
1021         it 'データがHash構造になっている' do
1022           get :export, :format => :json
1023           json = JSON.parse response.body
1024           json.is_a?(Hash).should be_true
1025         end
1026         it 'Hashっぽいものであって欲しい' do
1027           get :export, :format => :json
1028           json = JSON.parse response.body
1029           json.has_key?("licenses").should be_true
1030           json.has_key?("artists").should be_true
1031           json.has_key?("original_pictures").should be_true
1032           json.has_key?("pictures").should be_true
1033         end
1034       end
1035     end
1036     context '借手権限がないとき' do
1037       before do
1038         sign_out @demand_user
1039       end
1040       context 'html形式' do
1041         it 'ステータスコード302 Foundを返す' do
1042           get :export
1043           response.status.should eq 302
1044         end
1045         it 'サインインページへ遷移する' do
1046           get :export
1047           response.body.should redirect_to '/demand_users/sign_in'
1048         end
1049       end
1050       context 'json形式' do
1051         it 'ステータスコード401を返す' do
1052           get :export, :format => :json
1053           response.status.should eq 401
1054         end
1055         it '応答メッセージにUnauthorizedを返す' do
1056           get :export, :format => :json
1057           response.message.should match(/Unauthorized/)
1058         end
1059       end
1060     end
1061     context '借受権限がないとき' do
1062       before do
1063         Demander.any_instance.stub(:status).and_return(1)
1064       end
1065       context 'html形式' do
1066       end
1067       context 'json形式' do
1068         it 'ステータスコード403 forbiddenを返す' do
1069           lambda{
1070             get :export, :format => :json
1071           }.should raise_error(ActiveRecord::Forbidden)
1072         end
1073       end
1074     end
1075   end
1076   
1077 end