1 # -*- encoding: utf-8 -*-
5 describe ProviderStatusesController 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
16 describe '一覧表示に於いて' 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])
25 it '与えられたpageがセットされている' do
26 get :index, :page => 5
27 assigns(:page).should eq 5
29 it '省略されると@pageに1値が入る' do
31 assigns(:page).should eq 1
33 it '与えられたpage_sizeがセットされている' do
34 get :index, :page_size => 15
35 assigns(:page_size).should eq 15
37 it '省略されると@page_sizeにデフォルト値が入る' do
39 assigns(:page_size).should eq ProviderStatus.default_page_size
41 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
42 get :index, :page_size => 1500
43 assigns(:page_size).should eq ProviderStatus.max_page_size
45 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
46 get :index, :page_size => 0
47 assigns(:page_size).should eq ProviderStatus.default_page_size
50 context 'つつがなく終わるとき' do
51 it 'ステータスコード200 OKを返す' do
53 response.should be_success
57 assigns(:hide).should be_blank
59 it '借受状況モデルに全一覧取得を問い合わせている' do
60 ProviderStatus.should_receive(:list).exactly(1)
63 it '@provider_statusesにリストを取得している' do
65 assigns(:provider_statuses).should have_at_least(3).items
68 it 'indexテンプレートを描画する' do
70 response.should render_template("index")
75 get :index, :format => :json
76 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
78 it '借受状況モデルにjson一覧出力オプションを問い合わせている' do
79 ProviderStatus.should_receive(:list_json_opt).exactly(1)
80 get :index, :format => :json
82 it 'データがリスト構造になっている' do
83 get :index, :format => :json
84 json = JSON.parse response.body
85 json.should have_at_least(3).items
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
97 context '除外フラグが除外のとき' do
99 get :index, :hide => 1
100 assigns(:hide).should_not be_blank
102 it '借受状況モデルに待機中一覧取得を問い合わせている' do
103 ProviderStatus.should_receive(:available_list).exactly(1)
104 get :index, :hide => 1
106 it '@provider_statusesにリストを取得している' do
107 get :index, :hide => 1
108 assigns(:provider_statuses).should have_at_least(2).items
111 context '管理者権限がないとき' do
116 it 'ステータスコード302 Foundを返す' do
118 response.status.should eq 302
120 it 'サインインページへ遷移する' do
122 response.should redirect_to '/admins/sign_in'
126 it 'ステータスコード401 Unauthorizedを返す' do
127 get :index, :format => :json
128 response.status.should eq 401
130 it '応答メッセージにUnauthorizedを返す' do
131 get :index, :format => :json
132 response.message.should match(/Unauthorized/)
138 describe '単体表示に於いて' do
140 @ps = FactoryGirl.create :provider_status
141 @provider = FactoryGirl.create :provider, :provider_status_id => @ps.id
142 ProviderStatus.stub(:show).and_return(@ps)
145 context 'つつがなく終わるとき' do
146 it 'ステータスコード200 OKを返す' do
147 get :show, :id => @ps.id
148 response.should be_success
150 it '借受状況モデルに単体取得を問い合わせている' do
151 ProviderStatus.should_receive(:show).exactly(1)
154 it '@provider_statusにアレを取得している' do
155 get :show, :id => @ps.id
156 assigns(:provider_status).should eq(@ps)
159 it 'showテンプレートを描画する' do
160 get :show, :id => @ps.id
161 response.should render_template("show")
166 get :show, :id => @ps.id, :format => :json
167 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
169 it '借受状況モデルにjson単体出力オプションを問い合わせている' do
170 ProviderStatus.should_receive(:show_json_opt).exactly(1)
171 get :show, :id => @ps.id, :format => :json
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
183 context '管理者権限がないとき' do
188 it 'ステータスコード302 Foundを返す' do
189 get :show, :id => @ps.id
190 response.status.should eq 302
192 it 'サインインページへ遷移する' do
193 get :show, :id => @ps.id
194 response.body.should redirect_to '/admins/sign_in'
198 it 'ステータスコード401 Unauthorizedを返す' do
199 get :show, :id => @ps.id, :format => :json
200 response.status.should eq 401
202 it '応答メッセージにUnauthorizedを返す' do
203 get :show, :id => @ps.id, :format => :json
204 response.message.should match(/Unauthorized/)
210 describe '編集フォーム表示に於いて' do
212 @ps = FactoryGirl.create :provider_status
213 @provider = FactoryGirl.create :provider, :provider_status_id => @ps.id
215 ProviderStatus.stub(:edit).with(@ps.id.to_s, @admin).and_return(@ps)
217 context 'つつがなく終わるとき' do
218 it 'ステータスコード200 OKを返す' do
219 get :edit, :id => @ps.id
220 response.should be_success
222 it '借受状況モデルに編集取得を問い合わせている' do
223 ProviderStatus.should_receive(:edit).exactly(1)
224 get :edit, :id => @ps.id
226 it '@provider_statusにデータを用意している' do
227 get :edit, :id => @ps.id
228 assigns(:provider_status).should eq @ps
231 it 'editテンプレートを描画する' do
232 get :edit, :id => @ps.id
233 response.should render_template("edit")
237 context '管理者権限がないとき' do
242 it 'ステータスコード302 Foundを返す' do
243 get :edit, :id => @ps.id
244 response.status.should eq 302
246 it 'サインインページへ遷移する' do
247 get :edit, :id => @ps.id
248 response.body.should redirect_to '/admins/sign_in'
256 @ps = FactoryGirl.create :provider_status
257 @attr = FactoryGirl.attributes_for(:provider_status, :receive_hour1 => 22)
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
266 it '借受状況モデルにカラム値復元を依頼している' do
267 ProviderStatus.any_instance.should_receive(:attributes=).exactly(1)
268 put :update, :id => @ps.id, :provider_status => @attr
270 it '借受状況モデルに上書き補充を依頼している' do
271 ProviderStatus.any_instance.should_receive(:overwrite).exactly(1)
272 put :update, :id => @ps.id, :provider_status => @attr
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
279 it '@provider_statusにアレを取得している' do
280 put :update, :id => @ps.id, :provider_status => @attr
281 assigns(:provider_status).id.should eq(@ps.id)
284 context 'つつがなく終わるとき' do
286 put :update, :id => @ps.id, :provider_status => @attr
287 ProviderStatus.find(@ps.id).receive_hour1.should eq 22
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
295 it '更新された借受状況の表示ページへ遷移する' do
296 put :update, :id => @ps.id, :provider_status => @attr
297 response.should redirect_to(@ps)
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
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 /./
313 context '管理者権限がないとき' do
317 it 'ステータスコード302 Foundを返す' do
318 put :update, :id => @ps.id, :provider_status => @attr
319 response.status.should eq 302
322 it 'サインインページへ遷移する' do
323 put :update, :id => @ps.id, :provider_status => @attr
324 response.body.should redirect_to '/admins/sign_in'
328 it '応答メッセージにUnauthorizedを返す' do
329 put :update, :id => @ps.id, :provider_status => @attr, :format => :json
330 response.message.should match(/Unauthorized/)
334 context '検証、保存に失敗したとき' do
336 ProviderStatus.any_instance.stub(:save).and_return(false)
339 it 'ステータスコード200 Okを返す' do
340 put :update, :id => @ps.id, :provider_status => @attr
341 response.status.should eq 200
344 put :update, :id => @ps.id, :provider_status => @attr
345 response.should render_template("edit")
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
354 it '応答メッセージUnprocessable Entityを返す' do
355 put :update, :id => @ps.id, :provider_status => @attr, :format => :json
356 response.message.should match(/Unprocessable/)
362 describe 'ライセンスインポートに於いて' 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)
369 context '事前チェックしておく' 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([])
377 it '借受状況モデルに単体取得を問い合わせている' do
378 ProviderStatus.should_receive(:show).exactly(1)
379 get :licenses_import, :id => @ps.id
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'
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'
390 it '貸手からのエクスポートを依頼している' do
391 ProviderStatusesController.any_instance.should_receive(:export_from_provider).exactly(1)
392 get :licenses_import, :id => @ps.id
394 it 'ライセンス対照表モデルにインポートを依頼している' do
395 ProviderLicense.should_receive(:import).exactly(1)
396 get :licenses_import, :id => @ps.id
399 context 'つつがなく終わるとき' 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([])
408 it 'ステータスコード200 OKを返す' do
409 get :licenses_import, :id => @ps.id
410 response.should be_success
412 it '@provider_statusに借受状況を取得している' do
413 get :licenses_import, :id => @ps.id
414 assigns(:provider_status).should eq(@ps)
416 it '@failuresにインポート失敗リストを取得している' do
417 get :licenses_import, :id => @ps.id
418 assigns(:failures).should eq([])
421 it 'licenses_importテンプレートを描画する' do
422 get :licenses_import, :id => @ps.id
423 response.should render_template("licenses_import")
428 get :licenses_import, :id => @ps.id, :format => :json
429 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
433 context '管理者権限がないとき' do
438 it 'ステータスコード302 Foundを返す' do
439 get :licenses_import, :id => @ps.id
440 response.status.should eq 302
442 it 'サインインページへ遷移する' do
443 get :licenses_import, :id => @ps.id
444 response.body.should redirect_to '/admins/sign_in'
448 it 'ステータスコード401 Unauthorizedを返す' do
449 get :licenses_import, :id => @ps.id, :format => :json
450 response.status.should eq 401
452 it '応答メッセージにUnauthorizedを返す' do
453 get :licenses_import, :id => @ps.id, :format => :json
454 response.message.should match(/Unauthorized/)
458 context '借受権限がないとき' do
460 ProviderStatus.any_instance.stub(:status).and_return(0)
463 it '例外403 forbiddenを返す' do
465 get :licenses_import, :id => @ps.id
466 }.should raise_error(ActiveRecord::Forbidden)
470 it '例外403 forbiddenを返す' do
472 get :licenses_import, :id => @ps.id, :format => :json
473 }.should raise_error(ActiveRecord::Forbidden)
479 describe '絵師インポートに於いて' 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)
486 context '事前チェックしておく' 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([])
494 it '借受状況モデルに単体取得を問い合わせている' do
495 ProviderStatus.should_receive(:show).exactly(1)
496 get :artists_import, :id => @ps.id
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'
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'
507 it '貸手からのエクスポートを依頼している' do
508 ProviderStatusesController.any_instance.should_receive(:export_from_provider).exactly(1)
509 get :artists_import, :id => @ps.id
511 it '絵師対照表モデルにインポートを依頼している' do
512 ProviderArtist.should_receive(:import).exactly(1)
513 get :artists_import, :id => @ps.id
516 context 'つつがなく終わるとき' 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([])
525 it 'ステータスコード200 OKを返す' do
526 get :artists_import, :id => @ps.id
527 response.should be_success
529 it '@provider_statusに借受状況を取得している' do
530 get :artists_import, :id => @ps.id
531 assigns(:provider_status).should eq(@ps)
533 it '@failuresにインポート失敗リストを取得している' do
534 get :artists_import, :id => @ps.id
535 assigns(:failures).should eq([])
538 it 'artists_importテンプレートを描画する' do
539 get :artists_import, :id => @ps.id
540 response.should render_template("artists_import")
545 get :artists_import, :id => @ps.id, :format => :json
546 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
550 context '管理者権限がないとき' do
555 it 'ステータスコード302 Foundを返す' do
556 get :artists_import, :id => @ps.id
557 response.status.should eq 302
559 it 'サインインページへ遷移する' do
560 get :artists_import, :id => @ps.id
561 response.body.should redirect_to '/admins/sign_in'
565 it 'ステータスコード401 Unauthorizedを返す' do
566 get :artists_import, :id => @ps.id, :format => :json
567 response.status.should eq 401
569 it '応答メッセージにUnauthorizedを返す' do
570 get :artists_import, :id => @ps.id, :format => :json
571 response.message.should match(/Unauthorized/)
575 context '借受権限がないとき' do
577 ProviderStatus.any_instance.stub(:status).and_return(0)
580 it '例外403 forbiddenを返す' do
582 get :artists_import, :id => @ps.id
583 }.should raise_error(ActiveRecord::Forbidden)
587 it '例外403 forbiddenを返す' do
589 get :artists_import, :id => @ps.id, :format => :json
590 }.should raise_error(ActiveRecord::Forbidden)
596 describe '素材インポートに於いて' 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)
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"
612 context '事前チェックしておく' 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 => []})
618 it '借受状況モデルに単体取得を問い合わせている' do
619 ProviderStatus.should_receive(:show).exactly(1)
620 get :original_pictures_import, :id => @ps.id
622 it '貸手からの原画エクスポート,実素材エクスポートを依頼している' do
623 ProviderStatusesController.any_instance.should_receive(:export_by).with(any_args).exactly(2)
624 get :original_pictures_import, :id => @ps.id
626 it '原画対照表モデルにインポートを依頼している' do
627 ProviderOriginalPicture.should_receive(:import).exactly(1)
628 get :original_pictures_import, :id => @ps.id
631 context 'つつがなく終わるとき' 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 => []})
637 it 'ステータスコード200 OKを返す' do
638 get :original_pictures_import, :id => @ps.id
639 response.should be_success
641 it '@provider_statusに借受状況を取得している' do
642 get :original_pictures_import, :id => @ps.id
643 assigns(:provider_status).should eq(@ps)
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
653 it 'artists_importテンプレートを描画する' do
654 get :original_pictures_import, :id => @ps.id
655 response.should render_template("original_pictures_import")
660 get :original_pictures_import, :id => @ps.id, :format => :json
661 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
665 context '管理者権限がないとき' do
670 it 'ステータスコード302 Foundを返す' do
671 get :original_pictures_import, :id => @ps.id
672 response.status.should eq 302
674 it 'サインインページへ遷移する' do
675 get :original_pictures_import, :id => @ps.id
676 response.body.should redirect_to '/admins/sign_in'
680 it 'ステータスコード401 Unauthorizedを返す' do
681 get :original_pictures_import, :id => @ps.id, :format => :json
682 response.status.should eq 401
684 it '応答メッセージにUnauthorizedを返す' do
685 get :original_pictures_import, :id => @ps.id, :format => :json
686 response.message.should match(/Unauthorized/)
690 context '借受権限がないとき' do
692 ProviderStatus.any_instance.stub(:status).and_return(0)
695 it '例外403 forbiddenを返す' do
697 get :original_pictures_import, :id => @ps.id
698 }.should raise_error(ActiveRecord::Forbidden)
702 it '例外403 forbiddenを返す' do
704 get :original_pictures_import, :id => @ps.id, :format => :json
705 }.should raise_error(ActiveRecord::Forbidden)