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 ProviderStatus.stub(:licenses_import).with(any_args).and_return(LicenseImportResult.new([]))
374 it '借受状況モデルに単体取得を問い合わせている' do
375 ProviderStatus.should_receive(:show).exactly(1)
376 get :licenses_import, :id => @ps.id
379 ProviderStatus.any_instance.should_receive(:licenses_import).exactly(1)
380 get :licenses_import, :id => @ps.id
383 context 'つつがなく終わるとき' do
385 ProviderStatus.any_instance.stub(:status).with(any_args).and_return(1)
386 ProviderStatus.any_instance.stub(:licenses_import).with(any_args).and_return(LicenseImportResult.new([]))
388 it 'ステータスコード200 OKを返す' do
389 get :licenses_import, :id => @ps.id
390 response.should be_success
392 it '@provider_statusに借受状況を取得している' do
393 get :licenses_import, :id => @ps.id
394 assigns(:provider_status).should eq(@ps)
396 it '@import_resultにインポート結果を取得している' do
397 get :licenses_import, :id => @ps.id
398 assigns(:import_result).is_a?(ImportResult).should be_true
401 it 'licenses_importテンプレートを描画する' do
402 get :licenses_import, :id => @ps.id
403 response.should render_template("licenses_import")
408 get :licenses_import, :id => @ps.id, :format => :json
409 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
413 context '管理者権限がないとき' do
418 it 'ステータスコード302 Foundを返す' do
419 get :licenses_import, :id => @ps.id
420 response.status.should eq 302
422 it 'サインインページへ遷移する' do
423 get :licenses_import, :id => @ps.id
424 response.body.should redirect_to '/admins/sign_in'
428 it 'ステータスコード401 Unauthorizedを返す' do
429 get :licenses_import, :id => @ps.id, :format => :json
430 response.status.should eq 401
432 it '応答メッセージにUnauthorizedを返す' do
433 get :licenses_import, :id => @ps.id, :format => :json
434 response.message.should match(/Unauthorized/)
438 context '借受権限がないとき' do
440 ProviderStatus.any_instance.stub(:status).and_return(0)
443 it '例外403 forbiddenを返す' do
445 get :licenses_import, :id => @ps.id
446 }.should raise_error(ActiveRecord::Forbidden)
450 it '例外403 forbiddenを返す' do
452 get :licenses_import, :id => @ps.id, :format => :json
453 }.should raise_error(ActiveRecord::Forbidden)
459 describe '絵師インポートに於いて' do
461 @ps = FactoryGirl.create :provider_status, :token => 'aaaaaaaaaaaaaaaaa'
462 @provider = FactoryGirl.create :provider, :provider_status_id => @ps.id
463 ProviderStatus.stub(:show).and_return(@ps)
466 context '事前チェックしておく' do
468 ProviderStatus.any_instance.stub(:status).with(any_args).and_return(1)
469 ProviderStatus.any_instance.stub(:artists_import).with(any_args).and_return(ArtistImportResult.new([]))
471 it '借受状況モデルに単体取得を問い合わせている' do
472 ProviderStatus.should_receive(:show).exactly(1)
473 get :artists_import, :id => @ps.id
476 ProviderStatus.any_instance.should_receive(:artists_import).exactly(1)
477 get :artists_import, :id => @ps.id
480 context 'つつがなく終わるとき' do
482 ProviderStatus.any_instance.stub(:status).with(any_args).and_return(1)
483 ProviderStatus.any_instance.stub(:artists_import).with(any_args).and_return(ArtistImportResult.new([]))
485 it 'ステータスコード200 OKを返す' do
486 get :artists_import, :id => @ps.id
487 response.should be_success
489 it '@provider_statusに借受状況を取得している' do
490 get :artists_import, :id => @ps.id
491 assigns(:provider_status).should eq(@ps)
493 it '@import_resultにインポート結果を取得している' do
494 get :artists_import, :id => @ps.id
495 assigns(:import_result).is_a?(ImportResult).should be_true
498 it 'artists_importテンプレートを描画する' do
499 get :artists_import, :id => @ps.id
500 response.should render_template("artists_import")
505 get :artists_import, :id => @ps.id, :format => :json
506 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
510 context '管理者権限がないとき' do
515 it 'ステータスコード302 Foundを返す' do
516 get :artists_import, :id => @ps.id
517 response.status.should eq 302
519 it 'サインインページへ遷移する' do
520 get :artists_import, :id => @ps.id
521 response.body.should redirect_to '/admins/sign_in'
525 it 'ステータスコード401 Unauthorizedを返す' do
526 get :artists_import, :id => @ps.id, :format => :json
527 response.status.should eq 401
529 it '応答メッセージにUnauthorizedを返す' do
530 get :artists_import, :id => @ps.id, :format => :json
531 response.message.should match(/Unauthorized/)
535 context '借受権限がないとき' do
537 ProviderStatus.any_instance.stub(:status).and_return(0)
540 it '例外403 forbiddenを返す' do
542 get :artists_import, :id => @ps.id
543 }.should raise_error(ActiveRecord::Forbidden)
547 it '例外403 forbiddenを返す' do
549 get :artists_import, :id => @ps.id, :format => :json
550 }.should raise_error(ActiveRecord::Forbidden)
556 describe '素材インポートに於いて' do
558 @ps = FactoryGirl.create :provider_status, :token => 'aaaaaaaaaaaaaaaaa'
559 @provider = FactoryGirl.create :provider, :provider_status_id => @ps.id
560 ProviderStatus.stub(:show).and_return(@ps)
562 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
563 @p = FactoryGirl.create :picture, :artist_id => @artist.id, :original_picture_id => @op.id, :license_id => @license.id, :revision => 0
564 @opattr = @op.attributes
565 @pattr = @p.attributes
566 @pattr['picture_data'] = "abc\ndef\nghi"
567 @rpattr = {:original_picture_id => @op.id, :picture_id => @p.id, :license_id => @license.id, :artist_id => @artist.id, :artist_name => 'tester',
568 :credit => '{}', :settings => {:reverse => 1, :gif_convert => 1}.to_json.to_s}
569 @opattr['resource_picture'] = @rpattr
570 @opattr['resource_picture']['picture_data'] = "abc\ndef\nghi"
572 context '事前チェックしておく' do
574 ProviderStatus.any_instance.stub(:status).with(any_args).and_return(1)
575 ProviderStatus.any_instance.stub(:original_pictures_import).with(any_args).and_return(OriginalPictureImportResult.new([]))
577 it '借受状況モデルに単体取得を問い合わせている' do
578 ProviderStatus.should_receive(:show).exactly(1)
579 get :original_pictures_import, :id => @ps.id
582 ProviderStatus.any_instance.should_receive(:original_pictures_import).exactly(1)
583 get :original_pictures_import, :id => @ps.id
586 context 'つつがなく終わるとき' do
588 ProviderStatus.any_instance.stub(:status).with(any_args).and_return(1)
589 ProviderStatus.any_instance.stub(:original_pictures_import).with(any_args).and_return(OriginalPictureImportResult.new([]))
591 it 'ステータスコード200 OKを返す' do
592 get :original_pictures_import, :id => @ps.id
593 response.should be_success
595 it '@provider_statusに借受状況を取得している' do
596 get :original_pictures_import, :id => @ps.id
597 assigns(:provider_status).should eq(@ps)
599 it '@import_resultにインポート結果を取得している' do
600 get :original_pictures_import, :id => @ps.id
601 assigns(:import_result).is_a?(ImportResult).should be_true
604 it 'artists_importテンプレートを描画する' do
605 get :original_pictures_import, :id => @ps.id
606 response.should render_template("original_pictures_import")
611 get :original_pictures_import, :id => @ps.id, :format => :json
612 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
616 context '管理者権限がないとき' do
621 it 'ステータスコード302 Foundを返す' do
622 get :original_pictures_import, :id => @ps.id
623 response.status.should eq 302
625 it 'サインインページへ遷移する' do
626 get :original_pictures_import, :id => @ps.id
627 response.body.should redirect_to '/admins/sign_in'
631 it 'ステータスコード401 Unauthorizedを返す' do
632 get :original_pictures_import, :id => @ps.id, :format => :json
633 response.status.should eq 401
635 it '応答メッセージにUnauthorizedを返す' do
636 get :original_pictures_import, :id => @ps.id, :format => :json
637 response.message.should match(/Unauthorized/)
641 context '借受権限がないとき' do
643 ProviderStatus.any_instance.stub(:status).and_return(0)
646 it '例外403 forbiddenを返す' do
648 get :original_pictures_import, :id => @ps.id
649 }.should raise_error(ActiveRecord::Forbidden)
653 it '例外403 forbiddenを返す' do
655 get :original_pictures_import, :id => @ps.id, :format => :json
656 }.should raise_error(ActiveRecord::Forbidden)