OSDN Git Service

t#30328:add export
[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 match /success/
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 match /not/
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 match /success/
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 match /not/
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       it 'ステータスコード302 Foundを返す' do
657         get :licenses_export
658         response.status.should eq 302
659       end
660       context 'html形式' do
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 '応答メッセージにUnauthorizedを返す' do
668           get :licenses_export, :format => :json
669           response.message.should match(/Unauthorized/)
670         end
671       end
672     end
673     context '借受権限がないとき' do
674       before do
675         Demander.any_instance.stub(:status).and_return(1)
676       end
677       context 'html形式' do
678       end
679       context 'json形式' do
680         it 'ステータスコード403 forbiddenを返す' do
681           lambda{
682             get :licenses_export, :format => :json
683           }.should raise_error(ActiveRecord::Forbidden)
684         end
685       end
686     end
687   end
688   
689   describe '絵師エクスポートに於いて' do
690     before do
691       @ds = FactoryGirl.create :demander_status
692       @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id
693       @artist = FactoryGirl.create :artist, :author_id => @author.id
694       sign_in @demand_user
695     end
696     context 'つつがなく終わるとき' do
697       before do
698         Demander.any_instance.stub(:artists_export).with(any_args).and_return([@artist, @artist, @artist])
699       end
700       it 'ステータスコード200 OKを返す' do
701         get :artists_export, :format => :json
702         response.should be_success 
703       end
704       it '日付文字列変換を依頼している' do
705         DemandersController.any_instance.should_receive(:ymd_to_time).with('20111010').exactly(1)
706         get :artists_export, :date => '20111010', :format => :json
707       end
708       it '借手モデルに絵師エクスポートを問い合わせている' do
709         Demander.any_instance.should_receive(:artists_export).with(Time.parse('2011/10/10')).exactly(1)
710         get :artists_export, :date => '20111010', :format => :json
711       end
712       it '@artistsにリストを取得している' do
713         get :artists_export, :format => :json
714         assigns(:artists).should have_at_least(3).items
715       end
716       context 'html形式' do
717       end
718       context 'json形式' do
719         it 'jsonデータを返す' do
720           get :artists_export, :format => :json
721           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
722         end
723         it 'データがリスト構造になっている' do
724           get :artists_export, :format => :json
725           json = JSON.parse response.body
726           json.should have_at_least(3).items
727         end
728         it 'リストの先頭くらいは絵師っぽいものであって欲しい' do
729           get :artists_export, :format => :json
730           json = JSON.parse response.body
731           json.first.has_key?("name").should be_true
732           json.first.has_key?("author_id").should be_true
733         end
734       end
735     end
736     context '借手権限がないとき' do
737       before do
738         sign_out @demand_user
739       end
740       it 'ステータスコード302 Foundを返す' do
741         get :artists_export
742         response.status.should eq 302
743       end
744       context 'html形式' do
745         it 'サインインページへ遷移する' do
746           get :artists_export
747           response.body.should redirect_to '/demand_users/sign_in'
748         end
749       end
750       context 'json形式' do
751         it '応答メッセージにUnauthorizedを返す' do
752           get :artists_export, :format => :json
753           response.message.should match(/Unauthorized/)
754         end
755       end
756     end
757     context '借受権限がないとき' do
758       before do
759         Demander.any_instance.stub(:status).and_return(1)
760       end
761       context 'html形式' do
762       end
763       context 'json形式' do
764         it 'ステータスコード403 forbiddenを返す' do
765           lambda{
766             get :artists_export, :format => :json
767           }.should raise_error(ActiveRecord::Forbidden)
768         end
769       end
770     end
771   end
772   
773   describe '原画エクスポートに於いて' do
774     before do
775       @ds = FactoryGirl.create :demander_status
776       @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id
777       @artist = FactoryGirl.create :artist, :author_id => @author.id
778       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
779       sign_in @demand_user
780     end
781     context 'つつがなく終わるとき' do
782       before do
783         Demander.any_instance.stub(:original_pictures_export).with(any_args).and_return([@op, @op, @op])
784       end
785       it 'ステータスコード200 OKを返す' do
786         get :original_pictures_export, :format => :json
787         response.should be_success 
788       end
789       it '日付文字列変換を依頼している' do
790         DemandersController.any_instance.should_receive(:ymd_to_time).with('20111010').exactly(1)
791         get :original_pictures_export, :date => '20111010', :format => :json
792       end
793       it '借手モデルに原画エクスポートを問い合わせている' do
794         Demander.any_instance.should_receive(:original_pictures_export).with(Time.parse('2011/10/10')).exactly(1)
795         get :original_pictures_export, :date => '20111010', :format => :json
796       end
797       it '@original_picturesにリストを取得している' do
798         get :original_pictures_export, :format => :json
799         assigns(:original_pictures).should have_at_least(3).items
800       end
801       context 'html形式' do
802       end
803       context 'json形式' do
804         it '原画モデルにリストのjson化を依頼している' do
805           OriginalPicture.should_receive(:list_as_json_text).with(any_args).exactly(1)
806           OriginalPicture.stub(:list_as_json_text).with(any_args).and_return('[]')
807           get :original_pictures_export, :format => :json
808         end
809         it 'jsonデータを返す' do
810           get :original_pictures_export, :format => :json
811           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
812         end
813         it 'データがリスト構造になっている' do
814           get :original_pictures_export, :format => :json
815           json = JSON.parse response.body
816           json.should have_at_least(3).items
817         end
818         it 'リストの先頭くらいは原画っぽいものであって欲しい' do
819           get :original_pictures_export, :format => :json
820           json = JSON.parse response.body
821           json.first.has_key?("ext").should be_true
822           json.first.has_key?("md5").should be_true
823         end
824       end
825     end
826     context '借手権限がないとき' do
827       before do
828         sign_out @demand_user
829       end
830       it 'ステータスコード302 Foundを返す' do
831         get :original_pictures_export
832         response.status.should eq 302
833       end
834       context 'html形式' do
835         it 'サインインページへ遷移する' do
836           get :original_pictures_export
837           response.body.should redirect_to '/demand_users/sign_in'
838         end
839       end
840       context 'json形式' do
841         it '応答メッセージにUnauthorizedを返す' do
842           get :original_pictures_export, :format => :json
843           response.message.should match(/Unauthorized/)
844         end
845       end
846     end
847     context '借受権限がないとき' do
848       before do
849         Demander.any_instance.stub(:status).and_return(1)
850       end
851       context 'html形式' do
852       end
853       context 'json形式' do
854         it 'ステータスコード403 forbiddenを返す' do
855           lambda{
856             get :original_pictures_export, :format => :json
857           }.should raise_error(ActiveRecord::Forbidden)
858         end
859       end
860     end
861   end
862   
863   describe '実素材エクスポートに於いて' do
864     before do
865       @ds = FactoryGirl.create :demander_status
866       @demander = FactoryGirl.create :demander, :demander_status_id => @ds.id, :demand_user_id => @demand_user.id
867       @artist = FactoryGirl.create :artist, :author_id => @author.id
868       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
869       @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
870       @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :picture_id => @p.id
871       sign_in @demand_user
872       Picture.any_instance.stub(:restore).with(any_args).and_return('picture binary data')
873     end
874     context 'つつがなく終わるとき' do
875       before do
876         Demander.any_instance.stub(:pictures_export).with(any_args).and_return([@p, @p, @p])
877       end
878       it 'ステータスコード200 OKを返す' do
879         get :pictures_export, :format => :json
880         response.should be_success 
881       end
882       it '日付文字列変換を依頼している' do
883         DemandersController.any_instance.should_receive(:ymd_to_time).with('20111010').exactly(1)
884         get :pictures_export, :date => '20111010', :format => :json
885       end
886       it '借手モデルに実素材エクスポートを問い合わせている' do
887         Demander.any_instance.should_receive(:pictures_export).with(Time.parse('2011/10/10')).exactly(1)
888         get :pictures_export, :date => '20111010', :format => :json
889       end
890       it '@picturesにリストを取得している' do
891         get :pictures_export, :format => :json
892         assigns(:pictures).should have_at_least(3).items
893       end
894       context 'html形式' do
895       end
896       context 'json形式' do
897         it '実素材モデルにリストのjson化を依頼している' do
898           Picture.should_receive(:list_as_json_text).with(any_args).exactly(1)
899           Picture.stub(:list_as_json_text).with(any_args).and_return('[]')
900           get :pictures_export, :format => :json
901         end
902         it 'jsonデータを返す' do
903           get :pictures_export, :format => :json
904           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
905         end
906         it 'データがリスト構造になっている' do
907           get :pictures_export, :format => :json
908           json = JSON.parse response.body
909           json.should have_at_least(3).items
910         end
911         it 'リストの先頭くらいは実素材っぽいものであって欲しい' do
912           get :pictures_export, :format => :json
913           json = JSON.parse response.body
914           json.first.has_key?("ext").should be_true
915           json.first.has_key?("revision").should be_true
916         end
917       end
918     end
919     context '借手権限がないとき' do
920       before do
921         sign_out @demand_user
922       end
923       it 'ステータスコード302 Foundを返す' do
924         get :pictures_export
925         response.status.should eq 302
926       end
927       context 'html形式' do
928         it 'サインインページへ遷移する' do
929           get :pictures_export
930           response.body.should redirect_to '/demand_users/sign_in'
931         end
932       end
933       context 'json形式' do
934         it '応答メッセージにUnauthorizedを返す' do
935           get :pictures_export, :format => :json
936           response.message.should match(/Unauthorized/)
937         end
938       end
939     end
940     context '借受権限がないとき' do
941       before do
942         Demander.any_instance.stub(:status).and_return(1)
943       end
944       context 'html形式' do
945       end
946       context 'json形式' do
947         it 'ステータスコード403 forbiddenを返す' do
948           lambda{
949             get :pictures_export, :format => :json
950           }.should raise_error(ActiveRecord::Forbidden)
951         end
952       end
953     end
954   end
955   
956 end