OSDN Git Service

Merge branch 'v05' of git.sourceforge.jp:/gitroot/pettanr/pettanr into v05client
[pettanr/pettanr.git] / spec / controllers / provider_statuses_controller_spec.rb
1 # -*- encoding: utf-8 -*-
2 #借受状況
3 require 'spec_helper'
4
5 describe ProviderStatusesController 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     @artist = FactoryGirl.create :artist, :author_id => @author.id
14   end
15   
16   describe '一覧表示に於いて' do
17     before do
18       @ps = FactoryGirl.create :provider_status
19       @provider = FactoryGirl.create :provider, :provider_status_id => @ps.id
20       ProviderStatus.stub(:list).and_return([@ps, @ps, @ps])
21       ProviderStatus.stub(:available_list).and_return([@ps, @ps])
22       sign_in @admin
23     end
24     context '事前チェックする' do
25       it '与えられたpageがセットされている' do
26         get :index, :page => 5
27         assigns(:page).should eq 5
28       end
29       it '省略されると@pageに1値が入る' do
30         get :index
31         assigns(:page).should eq 1
32       end
33       it '与えられたpage_sizeがセットされている' do
34         get :index, :page_size => 15
35         assigns(:page_size).should eq 15
36       end
37       it '省略されると@page_sizeにデフォルト値が入る' do
38         get :index
39         assigns(:page_size).should eq ProviderStatus.default_page_size
40       end
41       it '最大を超えると@page_sizeにデフォルト最大値が入る' do
42         get :index, :page_size => 1500
43         assigns(:page_size).should eq ProviderStatus.max_page_size
44       end
45       it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
46         get :index, :page_size => 0
47         assigns(:page_size).should eq ProviderStatus.default_page_size
48       end
49     end
50     context 'つつがなく終わるとき' do
51       it 'ステータスコード200 OKを返す' do
52         get :index
53         response.should be_success 
54       end
55       it '@hideが空になっている' do
56         get :index
57         assigns(:hide).should be_blank
58       end
59       it '借受状況モデルに全一覧取得を問い合わせている' do
60         ProviderStatus.should_receive(:list).exactly(1)
61         get :index
62       end
63       it '@provider_statusesにリストを取得している' do
64         get :index
65         assigns(:provider_statuses).should have_at_least(3).items
66       end
67       context 'html形式' do
68         it 'indexテンプレートを描画する' do
69           get :index
70           response.should render_template("index")
71         end
72       end
73       context 'json形式' do
74         it 'jsonデータを返す' do
75           get :index, :format => :json
76           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
77         end
78         it '借受状況モデルにjson一覧出力オプションを問い合わせている' do
79           ProviderStatus.should_receive(:list_json_opt).exactly(1)
80           get :index, :format => :json
81         end
82         it 'データがリスト構造になっている' do
83           get :index, :format => :json
84           json = JSON.parse response.body
85           json.should have_at_least(3).items
86         end
87         it 'リストの先頭くらいは借受状況っぽいものであって欲しい' do
88           get :index, :format => :json
89           json = JSON.parse response.body
90           json.first.has_key?("token").should be_true
91           json.first.has_key?("receive_hour1").should be_true
92           json.first.has_key?("receive_hour2").should be_true
93           json.first.has_key?("received_at").should be_true
94         end
95       end
96     end
97     context '除外フラグが除外のとき' do
98       it '@hideが設定されている' do
99         get :index, :hide => 1
100         assigns(:hide).should_not be_blank
101       end
102       it '借受状況モデルに待機中一覧取得を問い合わせている' do
103         ProviderStatus.should_receive(:available_list).exactly(1)
104         get :index, :hide => 1
105       end
106       it '@provider_statusesにリストを取得している' do
107         get :index, :hide => 1
108         assigns(:provider_statuses).should have_at_least(2).items
109       end
110     end
111     context '管理者権限がないとき' do
112       before do
113         sign_out @admin
114       end
115       context 'html形式' do
116         it 'ステータスコード302 Foundを返す' do
117           get :index
118           response.status.should eq 302
119         end
120         it 'サインインページへ遷移する' do
121           get :index
122           response.should redirect_to '/admins/sign_in'
123         end
124       end
125       context 'json形式' do
126         it 'ステータスコード401 Unauthorizedを返す' do
127           get :index, :format => :json
128           response.status.should eq 401
129         end
130         it '応答メッセージにUnauthorizedを返す' do
131           get :index, :format => :json
132           response.message.should match(/Unauthorized/)
133         end
134       end
135     end
136   end
137   
138   describe '単体表示に於いて' do
139     before do
140       @ps = FactoryGirl.create :provider_status
141       @provider = FactoryGirl.create :provider, :provider_status_id => @ps.id
142       ProviderStatus.stub(:show).and_return(@ps)
143       sign_in @admin
144     end
145     context 'つつがなく終わるとき' do
146       it 'ステータスコード200 OKを返す' do
147         get :show, :id => @ps.id
148         response.should be_success
149       end
150       it '借受状況モデルに単体取得を問い合わせている' do
151         ProviderStatus.should_receive(:show).exactly(1)
152         get :show
153       end
154       it '@provider_statusにアレを取得している' do
155         get :show, :id => @ps.id
156         assigns(:provider_status).should eq(@ps)
157       end
158       context 'html形式' do
159         it 'showテンプレートを描画する' do
160           get :show, :id => @ps.id
161           response.should render_template("show")
162         end
163       end
164       context 'json形式' do
165         it 'jsonデータを返す' do
166           get :show, :id => @ps.id, :format => :json
167           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
168         end
169         it '借受状況モデルにjson単体出力オプションを問い合わせている' do
170           ProviderStatus.should_receive(:show_json_opt).exactly(1)
171           get :show, :id => @ps.id, :format => :json
172         end
173         it 'データがアレになっている' do
174           get :show, :id => @ps.id, :format => :json
175           json = JSON.parse response.body
176           json.has_key?("token").should be_true
177           json.has_key?("receive_hour1").should be_true
178           json.has_key?("receive_hour2").should be_true
179           json.has_key?("received_at").should be_true
180         end
181       end
182     end
183     context '管理者権限がないとき' do
184       before do
185         sign_out @admin
186       end
187       context 'html形式' do
188         it 'ステータスコード302 Foundを返す' do
189           get :show, :id => @ps.id
190           response.status.should eq 302
191         end
192         it 'サインインページへ遷移する' do
193           get :show, :id => @ps.id
194           response.body.should redirect_to '/admins/sign_in'
195         end
196       end
197       context 'json形式' do
198         it 'ステータスコード401 Unauthorizedを返す' do
199           get :show, :id => @ps.id, :format => :json
200           response.status.should eq 401
201         end
202         it '応答メッセージにUnauthorizedを返す' do
203           get :show, :id => @ps.id, :format => :json
204           response.message.should match(/Unauthorized/)
205         end
206       end
207     end
208   end
209   
210   describe '編集フォーム表示に於いて' do
211     before do
212       @ps = FactoryGirl.create :provider_status
213       @provider = FactoryGirl.create :provider, :provider_status_id => @ps.id
214       sign_in @admin
215       ProviderStatus.stub(:edit).with(@ps.id.to_s, @admin).and_return(@ps)
216     end
217     context 'つつがなく終わるとき' do
218       it 'ステータスコード200 OKを返す' do
219         get :edit, :id => @ps.id
220         response.should be_success 
221       end
222       it '借受状況モデルに編集取得を問い合わせている' do
223         ProviderStatus.should_receive(:edit).exactly(1)
224         get :edit, :id => @ps.id
225       end
226       it '@provider_statusにデータを用意している' do
227         get :edit, :id => @ps.id
228         assigns(:provider_status).should eq @ps
229       end
230       context 'html形式' do
231         it 'editテンプレートを描画する' do
232           get :edit, :id => @ps.id
233           response.should render_template("edit")
234         end
235       end
236     end
237     context '管理者権限がないとき' do
238       before do
239         sign_out @admin
240       end
241       context 'html形式' do
242         it 'ステータスコード302 Foundを返す' do
243           get :edit, :id => @ps.id
244           response.status.should eq 302
245         end
246         it 'サインインページへ遷移する' do
247           get :edit, :id => @ps.id
248           response.body.should redirect_to '/admins/sign_in'
249         end
250       end
251     end
252   end
253
254   describe '更新に於いて' do
255     before do
256       @ps = FactoryGirl.create :provider_status
257       @attr = FactoryGirl.attributes_for(:provider_status, :receive_hour1 => 22)
258       sign_in @admin
259     end
260     context '事前チェックしておく' do
261       it '借受状況モデルに編集取得を問い合わせている' do
262         ProviderStatus.stub(:edit).with(any_args()).and_return @ps
263         ProviderStatus.should_receive(:edit).exactly(1)
264         put :update, :id => @ps.id, :provider_status => @attr
265       end
266       it '借受状況モデルにカラム値復元を依頼している' do
267         ProviderStatus.any_instance.should_receive(:attributes=).exactly(1)
268         put :update, :id => @ps.id, :provider_status => @attr
269       end
270       it '借受状況モデルに上書き補充を依頼している' do
271         ProviderStatus.any_instance.should_receive(:overwrite).exactly(1)
272         put :update, :id => @ps.id, :provider_status => @attr
273       end
274       it 'モデルに更新を依頼する' do
275         ProviderStatus.any_instance.stub(:save).with(any_args).and_return true
276         ProviderStatus.any_instance.should_receive(:save).exactly(1)
277         put :update, :id => @ps.id, :provider_status => @attr
278       end
279       it '@provider_statusにアレを取得している' do
280         put :update, :id => @ps.id, :provider_status => @attr
281         assigns(:provider_status).id.should eq(@ps.id)
282       end
283     end
284     context 'つつがなく終わるとき' do
285       it '更新される' do
286         put :update, :id => @ps.id, :provider_status => @attr
287         ProviderStatus.find(@ps.id).receive_hour1.should eq 22
288       end
289       context 'html形式' do
290         it 'ステータスコード302 Foundを返す' do
291           ProviderStatus.any_instance.stub(:save).with(any_args()).and_return(true)
292           put :update, :id => @ps.id, :provider_status => @attr
293           response.status.should eq 302
294         end
295         it '更新された借受状況の表示ページへ遷移する' do
296           put :update, :id => @ps.id, :provider_status => @attr
297           response.should redirect_to(@ps)
298         end
299       end
300       context 'json形式' do
301         it 'ステータスコード200 OKを返す' do
302           ProviderStatus.any_instance.stub(:save).with(any_args()).and_return(true)
303           put :update, :id => @ps.id, :provider_status => @attr, :format => :json
304           response.should be_success 
305         end
306         it 'ページ本体は特に返さない' do
307           ProviderStatus.any_instance.stub(:save).with(any_args()).and_return(true)
308           put :update, :id => @ps.id, :provider_status => @attr, :format => :json
309           response.body.should match /./
310         end
311       end
312     end
313     context '管理者権限がないとき' do
314       before do
315         sign_out @admin
316       end
317       it 'ステータスコード302 Foundを返す' do
318         put :update, :id => @ps.id, :provider_status => @attr
319         response.status.should eq 302
320       end
321       context 'html形式' do
322         it 'サインインページへ遷移する' do
323           put :update, :id => @ps.id, :provider_status => @attr
324           response.body.should redirect_to '/admins/sign_in'
325         end
326       end
327       context 'json形式' do
328         it '応答メッセージにUnauthorizedを返す' do
329           put :update, :id => @ps.id, :provider_status => @attr, :format => :json
330           response.message.should match(/Unauthorized/)
331         end
332       end
333     end
334     context '検証、保存に失敗したとき' do
335       before do
336         ProviderStatus.any_instance.stub(:save).and_return(false)
337       end
338       context 'html形式' do
339         it 'ステータスコード200 Okを返す' do
340           put :update, :id => @ps.id, :provider_status => @attr
341           response.status.should eq 200
342         end
343         it '編集ページを描画する' do
344           put :update, :id => @ps.id, :provider_status => @attr
345           response.should render_template("edit")
346         end
347       end
348       context 'json形式' do
349         it 'ステータスコード422 unprocessable_entity を返す' do
350           ProviderStatus.any_instance.stub(:save).and_return(false)
351           put :update, :id => @ps.id, :provider_status => @attr, :format => :json
352           response.status.should eq 422
353         end
354         it '応答メッセージUnprocessable Entityを返す' do
355           put :update, :id => @ps.id, :provider_status => @attr, :format => :json
356           response.message.should match(/Unprocessable/)
357         end
358       end
359     end
360   end
361   
362   describe 'ライセンスインポートに於いて' do
363     before do
364       @ps = FactoryGirl.create :provider_status, :token => 'aaaaaaaaaaaaaaaaa'
365       @provider = FactoryGirl.create :provider, :provider_status_id => @ps.id
366       ProviderStatus.stub(:show).and_return(@ps)
367       sign_in @admin
368     end
369     context '事前チェックしておく' do
370       before do
371         ProviderStatus.any_instance.stub(:status).with(any_args).and_return(1)
372         ProviderStatusesController.any_instance.stub(:ymd_to_time).with(any_args).and_return(nil)
373         ProviderStatusesController.any_instance.stub(:export_url).with(any_args).and_return('http://localhost:3000/demanders/licenses_export/1.json')
374         ProviderStatusesController.any_instance.stub(:export_from_provider).with(any_args).and_return([@license.attributes])
375         ProviderLicense.stub(:import).with(any_args).and_return([])
376       end
377       it '借受状況モデルに単体取得を問い合わせている' do
378         ProviderStatus.should_receive(:show).exactly(1)
379         get :licenses_import, :id => @ps.id
380       end
381       it '日付文字列変換を依頼している' do
382         ProviderStatusesController.any_instance.should_receive(:ymd_to_time).with('20111010').exactly(1)
383         get :licenses_import, :id => @ps.id, :date => '20111010'
384       end
385       it 'エクスポートurl取得を依頼している' do
386         ProviderStatusesController.any_instance.stub(:ymd_to_time).with('20111010').and_return(Time.parse('2011/10/10'))
387         ProviderStatusesController.any_instance.should_receive(:export_url).with(@provider.demander_url, 'licenses_export', @ps.token, Time.parse('2011/10/10')).exactly(1)
388         get :licenses_import, :id => @ps.id, :date => '20111010'
389       end
390       it '貸手からのエクスポートを依頼している' do
391         ProviderStatusesController.any_instance.should_receive(:export_from_provider).exactly(1)
392         get :licenses_import, :id => @ps.id
393       end
394       it 'ライセンス対照表モデルにインポートを依頼している' do
395         ProviderLicense.should_receive(:import).exactly(1)
396         get :licenses_import, :id => @ps.id
397       end
398     end
399     context 'つつがなく終わるとき' do
400       before do
401         ProviderStatus.any_instance.stub(:status).with(any_args).and_return(1)
402         ProviderStatusesController.any_instance.stub(:ymd_to_time).with('20111010').and_return(Time.parse('2011/10/10'))
403         ProviderStatusesController.any_instance.stub(:ymd_to_time).with(any_args).and_return(nil)
404         ProviderStatusesController.any_instance.stub(:export_url).with(any_args).and_return('http://localhost:3000/demanders/licenses_export/1.json')
405         ProviderStatusesController.any_instance.stub(:export_from_provider).with(any_args).and_return([@license.attributes])
406         ProviderLicense.stub(:import).with(any_args).and_return([])
407       end
408       it 'ステータスコード200 OKを返す' do
409         get :licenses_import, :id => @ps.id
410         response.should be_success
411       end
412       it '@provider_statusに借受状況を取得している' do
413         get :licenses_import, :id => @ps.id
414         assigns(:provider_status).should eq(@ps)
415       end
416       it '@failuresにインポート失敗リストを取得している' do
417         get :licenses_import, :id => @ps.id
418         assigns(:failures).should eq([])
419       end
420       context 'html形式' do
421         it 'licenses_importテンプレートを描画する' do
422           get :licenses_import, :id => @ps.id
423           response.should render_template("licenses_import")
424         end
425       end
426       context 'json形式' do
427         it 'jsonデータを返す' do
428           get :licenses_import, :id => @ps.id, :format => :json
429           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
430         end
431       end
432     end
433     context '管理者権限がないとき' do
434       before do
435         sign_out @admin
436       end
437       context 'html形式' do
438         it 'ステータスコード302 Foundを返す' do
439           get :licenses_import, :id => @ps.id
440           response.status.should eq 302
441         end
442         it 'サインインページへ遷移する' do
443           get :licenses_import, :id => @ps.id
444           response.body.should redirect_to '/admins/sign_in'
445         end
446       end
447       context 'json形式' do
448         it 'ステータスコード401 Unauthorizedを返す' do
449           get :licenses_import, :id => @ps.id, :format => :json
450           response.status.should eq 401
451         end
452         it '応答メッセージにUnauthorizedを返す' do
453           get :licenses_import, :id => @ps.id, :format => :json
454           response.message.should match(/Unauthorized/)
455         end
456       end
457     end
458     context '借受権限がないとき' do
459       before do
460         ProviderStatus.any_instance.stub(:status).and_return(0)
461       end
462       context 'html形式' do
463         it '例外403 forbiddenを返す' do
464           lambda{
465             get :licenses_import, :id => @ps.id
466           }.should raise_error(ActiveRecord::Forbidden)
467         end
468       end
469       context 'json形式' do
470         it '例外403 forbiddenを返す' do
471           lambda{
472             get :licenses_import, :id => @ps.id, :format => :json
473           }.should raise_error(ActiveRecord::Forbidden)
474         end
475       end
476     end
477   end
478   
479   describe '絵師インポートに於いて' do
480     before do
481       @ps = FactoryGirl.create :provider_status, :token => 'aaaaaaaaaaaaaaaaa'
482       @provider = FactoryGirl.create :provider, :provider_status_id => @ps.id
483       ProviderStatus.stub(:show).and_return(@ps)
484       sign_in @admin
485     end
486     context '事前チェックしておく' do
487       before do
488         ProviderStatus.any_instance.stub(:status).with(any_args).and_return(1)
489         ProviderStatusesController.any_instance.stub(:ymd_to_time).with(any_args).and_return(nil)
490         ProviderStatusesController.any_instance.stub(:export_url).with(any_args).and_return('http://localhost:3000/demanders/artists_export/1.json')
491         ProviderStatusesController.any_instance.stub(:export_from_provider).with(any_args).and_return([@artist.attributes])
492         ProviderArtist.stub(:import).with(any_args).and_return([])
493       end
494       it '借受状況モデルに単体取得を問い合わせている' do
495         ProviderStatus.should_receive(:show).exactly(1)
496         get :artists_import, :id => @ps.id
497       end
498       it '日付文字列変換を依頼している' do
499         ProviderStatusesController.any_instance.should_receive(:ymd_to_time).with('20111010').exactly(1)
500         get :licenses_import, :id => @ps.id, :date => '20111010'
501       end
502       it 'エクスポートurl取得を依頼している' do
503         ProviderStatusesController.any_instance.stub(:ymd_to_time).with('20111010').and_return(Time.parse('2011/10/10'))
504         ProviderStatusesController.any_instance.should_receive(:export_url).with(@provider.demander_url, 'artists_export', @ps.token, Time.parse('2011/10/10')).exactly(1)
505         get :artists_import, :id => @ps.id, :date => '20111010'
506       end
507       it '貸手からのエクスポートを依頼している' do
508         ProviderStatusesController.any_instance.should_receive(:export_from_provider).exactly(1)
509         get :artists_import, :id => @ps.id
510       end
511       it '絵師対照表モデルにインポートを依頼している' do
512         ProviderArtist.should_receive(:import).exactly(1)
513         get :artists_import, :id => @ps.id
514       end
515     end
516     context 'つつがなく終わるとき' do
517       before do
518         ProviderStatus.any_instance.stub(:status).with(any_args).and_return(1)
519         ProviderStatusesController.any_instance.stub(:ymd_to_time).with('20111010').and_return(Time.parse('2011/10/10'))
520         ProviderStatusesController.any_instance.stub(:ymd_to_time).with(any_args).and_return(nil)
521         ProviderStatusesController.any_instance.stub(:export_url).with(any_args).and_return('http://localhost:3000/demanders/artists_export/1.json')
522         ProviderStatusesController.any_instance.stub(:export_from_provider).with(any_args).and_return([@artist.attributes])
523         ProviderArtist.stub(:import).with(any_args).and_return([])
524       end
525       it 'ステータスコード200 OKを返す' do
526         get :artists_import, :id => @ps.id
527         response.should be_success
528       end
529       it '@provider_statusに借受状況を取得している' do
530         get :artists_import, :id => @ps.id
531         assigns(:provider_status).should eq(@ps)
532       end
533       it '@failuresにインポート失敗リストを取得している' do
534         get :artists_import, :id => @ps.id
535         assigns(:failures).should eq([])
536       end
537       context 'html形式' do
538         it 'artists_importテンプレートを描画する' do
539           get :artists_import, :id => @ps.id
540           response.should render_template("artists_import")
541         end
542       end
543       context 'json形式' do
544         it 'jsonデータを返す' do
545           get :artists_import, :id => @ps.id, :format => :json
546           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
547         end
548       end
549     end
550     context '管理者権限がないとき' do
551       before do
552         sign_out @admin
553       end
554       context 'html形式' do
555         it 'ステータスコード302 Foundを返す' do
556           get :artists_import, :id => @ps.id
557           response.status.should eq 302
558         end
559         it 'サインインページへ遷移する' do
560           get :artists_import, :id => @ps.id
561           response.body.should redirect_to '/admins/sign_in'
562         end
563       end
564       context 'json形式' do
565         it 'ステータスコード401 Unauthorizedを返す' do
566           get :artists_import, :id => @ps.id, :format => :json
567           response.status.should eq 401
568         end
569         it '応答メッセージにUnauthorizedを返す' do
570           get :artists_import, :id => @ps.id, :format => :json
571           response.message.should match(/Unauthorized/)
572         end
573       end
574     end
575     context '借受権限がないとき' do
576       before do
577         ProviderStatus.any_instance.stub(:status).and_return(0)
578       end
579       context 'html形式' do
580         it '例外403 forbiddenを返す' do
581           lambda{
582             get :artists_import, :id => @ps.id
583           }.should raise_error(ActiveRecord::Forbidden)
584         end
585       end
586       context 'json形式' do
587         it '例外403 forbiddenを返す' do
588           lambda{
589             get :artists_import, :id => @ps.id, :format => :json
590           }.should raise_error(ActiveRecord::Forbidden)
591         end
592       end
593     end
594   end
595   
596   describe '素材インポートに於いて' do
597     before do
598       @ps = FactoryGirl.create :provider_status, :token => 'aaaaaaaaaaaaaaaaa'
599       @provider = FactoryGirl.create :provider, :provider_status_id => @ps.id
600       ProviderStatus.stub(:show).and_return(@ps)
601       sign_in @admin
602       @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
603       @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
604       @opattr = @op.attributes
605       @pattr = @p.attributes
606       @pattr['picture_data'] =  "abc\ndef\nghi"
607       @rpattr = {:original_picture_id => @op.id, :picture_id => @p.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester', 
608         :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
609       @opattr['resource_picture'] =  @rpattr
610       @opattr['resource_picture']['picture_data'] =  "abc\ndef\nghi"
611     end
612     context '事前チェックしておく' do
613       before do
614         ProviderStatus.any_instance.stub(:status).with(any_args).and_return(1)
615         ProviderStatusesController.any_instance.stub(:export_by).with(any_args).and_return([])
616         ProviderOriginalPicture.stub(:import).with(any_args).and_return({:original_pictures => [], :pictures => [], :resource_pictures => []})
617       end
618       it '借受状況モデルに単体取得を問い合わせている' do
619         ProviderStatus.should_receive(:show).exactly(1)
620         get :original_pictures_import, :id => @ps.id
621       end
622       it '貸手からの原画エクスポート,実素材エクスポートを依頼している' do
623         ProviderStatusesController.any_instance.should_receive(:export_by).with(any_args).exactly(2)
624         get :original_pictures_import, :id => @ps.id
625       end
626       it '原画対照表モデルにインポートを依頼している' do
627         ProviderOriginalPicture.should_receive(:import).exactly(1)
628         get :original_pictures_import, :id => @ps.id
629       end
630     end
631     context 'つつがなく終わるとき' do
632       before do
633         ProviderStatus.any_instance.stub(:status).with(any_args).and_return(1)
634         ProviderStatusesController.any_instance.stub(:export_by).with(any_args).and_return([@opattr])
635         ProviderOriginalPicture.stub(:import).with(any_args).and_return({:original_pictures => [], :pictures => [], :resource_pictures => []})
636       end
637       it 'ステータスコード200 OKを返す' do
638         get :original_pictures_import, :id => @ps.id
639         response.should be_success
640       end
641       it '@provider_statusに借受状況を取得している' do
642         get :original_pictures_import, :id => @ps.id
643         assigns(:provider_status).should eq(@ps)
644       end
645       it '@failuresにインポート失敗リストを取得している' do
646         get :original_pictures_import, :id => @ps.id
647         assigns(:failures).should_not be_nil
648         assigns(:failures)[:original_pictures].should be_empty
649         assigns(:failures)[:pictures].should be_empty
650         assigns(:failures)[:resource_pictures].should be_empty
651       end
652       context 'html形式' do
653         it 'artists_importテンプレートを描画する' do
654           get :original_pictures_import, :id => @ps.id
655           response.should render_template("original_pictures_import")
656         end
657       end
658       context 'json形式' do
659         it 'jsonデータを返す' do
660           get :original_pictures_import, :id => @ps.id, :format => :json
661           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
662         end
663       end
664     end
665     context '管理者権限がないとき' do
666       before do
667         sign_out @admin
668       end
669       context 'html形式' do
670         it 'ステータスコード302 Foundを返す' do
671           get :original_pictures_import, :id => @ps.id
672           response.status.should eq 302
673         end
674         it 'サインインページへ遷移する' do
675           get :original_pictures_import, :id => @ps.id
676           response.body.should redirect_to '/admins/sign_in'
677         end
678       end
679       context 'json形式' do
680         it 'ステータスコード401 Unauthorizedを返す' do
681           get :original_pictures_import, :id => @ps.id, :format => :json
682           response.status.should eq 401
683         end
684         it '応答メッセージにUnauthorizedを返す' do
685           get :original_pictures_import, :id => @ps.id, :format => :json
686           response.message.should match(/Unauthorized/)
687         end
688       end
689     end
690     context '借受権限がないとき' do
691       before do
692         ProviderStatus.any_instance.stub(:status).and_return(0)
693       end
694       context 'html形式' do
695         it '例外403 forbiddenを返す' do
696           lambda{
697             get :original_pictures_import, :id => @ps.id
698           }.should raise_error(ActiveRecord::Forbidden)
699         end
700       end
701       context 'json形式' do
702         it '例外403 forbiddenを返す' do
703           lambda{
704             get :original_pictures_import, :id => @ps.id, :format => :json
705           }.should raise_error(ActiveRecord::Forbidden)
706         end
707       end
708     end
709   end
710   
711 end