OSDN Git Service

fix: any
[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         ProviderStatus.stub(:licenses_import).with(any_args).and_return(LicenseImportResult.new([]))
373       end
374       it '借受状況モデルに単体取得を問い合わせている' do
375         ProviderStatus.should_receive(:show).exactly(1)
376         get :licenses_import, :id => @ps.id
377       end
378       it 'インポートを依頼している' do
379         ProviderStatus.any_instance.should_receive(:licenses_import).exactly(1)
380         get :licenses_import, :id => @ps.id
381       end
382     end
383     context 'つつがなく終わるとき' do
384       before 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([]))
387       end
388       it 'ステータスコード200 OKを返す' do
389         get :licenses_import, :id => @ps.id
390         response.should be_success
391       end
392       it '@provider_statusに借受状況を取得している' do
393         get :licenses_import, :id => @ps.id
394         assigns(:provider_status).should eq(@ps)
395       end
396       it '@import_resultにインポート結果を取得している' do
397         get :licenses_import, :id => @ps.id
398         assigns(:import_result).is_a?(ImportResult).should be_true
399       end
400       context 'html形式' do
401         it 'licenses_importテンプレートを描画する' do
402           get :licenses_import, :id => @ps.id
403           response.should render_template("licenses_import")
404         end
405       end
406       context 'json形式' do
407         it 'jsonデータを返す' do
408           get :licenses_import, :id => @ps.id, :format => :json
409           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
410         end
411       end
412     end
413     context '管理者権限がないとき' do
414       before do
415         sign_out @admin
416       end
417       context 'html形式' do
418         it 'ステータスコード302 Foundを返す' do
419           get :licenses_import, :id => @ps.id
420           response.status.should eq 302
421         end
422         it 'サインインページへ遷移する' do
423           get :licenses_import, :id => @ps.id
424           response.body.should redirect_to '/admins/sign_in'
425         end
426       end
427       context 'json形式' do
428         it 'ステータスコード401 Unauthorizedを返す' do
429           get :licenses_import, :id => @ps.id, :format => :json
430           response.status.should eq 401
431         end
432         it '応答メッセージにUnauthorizedを返す' do
433           get :licenses_import, :id => @ps.id, :format => :json
434           response.message.should match(/Unauthorized/)
435         end
436       end
437     end
438     context '借受権限がないとき' do
439       before do
440         ProviderStatus.any_instance.stub(:status).and_return(0)
441       end
442       context 'html形式' do
443         it '例外403 forbiddenを返す' do
444           lambda{
445             get :licenses_import, :id => @ps.id
446           }.should raise_error(ActiveRecord::Forbidden)
447         end
448       end
449       context 'json形式' do
450         it '例外403 forbiddenを返す' do
451           lambda{
452             get :licenses_import, :id => @ps.id, :format => :json
453           }.should raise_error(ActiveRecord::Forbidden)
454         end
455       end
456     end
457   end
458   
459   describe '絵師インポートに於いて' do
460     before 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)
464       sign_in @admin
465     end
466     context '事前チェックしておく' do
467       before 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([]))
470       end
471       it '借受状況モデルに単体取得を問い合わせている' do
472         ProviderStatus.should_receive(:show).exactly(1)
473         get :artists_import, :id => @ps.id
474       end
475       it 'インポートを依頼している' do
476         ProviderStatus.any_instance.should_receive(:artists_import).exactly(1)
477         get :artists_import, :id => @ps.id
478       end
479     end
480     context 'つつがなく終わるとき' do
481       before 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([]))
484       end
485       it 'ステータスコード200 OKを返す' do
486         get :artists_import, :id => @ps.id
487         response.should be_success
488       end
489       it '@provider_statusに借受状況を取得している' do
490         get :artists_import, :id => @ps.id
491         assigns(:provider_status).should eq(@ps)
492       end
493       it '@import_resultにインポート結果を取得している' do
494         get :artists_import, :id => @ps.id
495         assigns(:import_result).is_a?(ImportResult).should be_true
496       end
497       context 'html形式' do
498         it 'artists_importテンプレートを描画する' do
499           get :artists_import, :id => @ps.id
500           response.should render_template("artists_import")
501         end
502       end
503       context 'json形式' do
504         it 'jsonデータを返す' do
505           get :artists_import, :id => @ps.id, :format => :json
506           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
507         end
508       end
509     end
510     context '管理者権限がないとき' do
511       before do
512         sign_out @admin
513       end
514       context 'html形式' do
515         it 'ステータスコード302 Foundを返す' do
516           get :artists_import, :id => @ps.id
517           response.status.should eq 302
518         end
519         it 'サインインページへ遷移する' do
520           get :artists_import, :id => @ps.id
521           response.body.should redirect_to '/admins/sign_in'
522         end
523       end
524       context 'json形式' do
525         it 'ステータスコード401 Unauthorizedを返す' do
526           get :artists_import, :id => @ps.id, :format => :json
527           response.status.should eq 401
528         end
529         it '応答メッセージにUnauthorizedを返す' do
530           get :artists_import, :id => @ps.id, :format => :json
531           response.message.should match(/Unauthorized/)
532         end
533       end
534     end
535     context '借受権限がないとき' do
536       before do
537         ProviderStatus.any_instance.stub(:status).and_return(0)
538       end
539       context 'html形式' do
540         it '例外403 forbiddenを返す' do
541           lambda{
542             get :artists_import, :id => @ps.id
543           }.should raise_error(ActiveRecord::Forbidden)
544         end
545       end
546       context 'json形式' do
547         it '例外403 forbiddenを返す' do
548           lambda{
549             get :artists_import, :id => @ps.id, :format => :json
550           }.should raise_error(ActiveRecord::Forbidden)
551         end
552       end
553     end
554   end
555   
556   describe '素材インポートに於いて' do
557     before 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)
561       sign_in @admin
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"
571     end
572     context '事前チェックしておく' do
573       before 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([]))
576       end
577       it '借受状況モデルに単体取得を問い合わせている' do
578         ProviderStatus.should_receive(:show).exactly(1)
579         get :original_pictures_import, :id => @ps.id
580       end
581       it 'インポートを依頼している' do
582         ProviderStatus.any_instance.should_receive(:original_pictures_import).exactly(1)
583         get :original_pictures_import, :id => @ps.id
584       end
585     end
586     context 'つつがなく終わるとき' do
587       before 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([]))
590       end
591       it 'ステータスコード200 OKを返す' do
592         get :original_pictures_import, :id => @ps.id
593         response.should be_success
594       end
595       it '@provider_statusに借受状況を取得している' do
596         get :original_pictures_import, :id => @ps.id
597         assigns(:provider_status).should eq(@ps)
598       end
599       it '@import_resultにインポート結果を取得している' do
600         get :original_pictures_import, :id => @ps.id
601         assigns(:import_result).is_a?(ImportResult).should be_true
602       end
603       context 'html形式' do
604         it 'artists_importテンプレートを描画する' do
605           get :original_pictures_import, :id => @ps.id
606           response.should render_template("original_pictures_import")
607         end
608       end
609       context 'json形式' do
610         it 'jsonデータを返す' do
611           get :original_pictures_import, :id => @ps.id, :format => :json
612           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
613         end
614       end
615     end
616     context '管理者権限がないとき' do
617       before do
618         sign_out @admin
619       end
620       context 'html形式' do
621         it 'ステータスコード302 Foundを返す' do
622           get :original_pictures_import, :id => @ps.id
623           response.status.should eq 302
624         end
625         it 'サインインページへ遷移する' do
626           get :original_pictures_import, :id => @ps.id
627           response.body.should redirect_to '/admins/sign_in'
628         end
629       end
630       context 'json形式' do
631         it 'ステータスコード401 Unauthorizedを返す' do
632           get :original_pictures_import, :id => @ps.id, :format => :json
633           response.status.should eq 401
634         end
635         it '応答メッセージにUnauthorizedを返す' do
636           get :original_pictures_import, :id => @ps.id, :format => :json
637           response.message.should match(/Unauthorized/)
638         end
639       end
640     end
641     context '借受権限がないとき' do
642       before do
643         ProviderStatus.any_instance.stub(:status).and_return(0)
644       end
645       context 'html形式' do
646         it '例外403 forbiddenを返す' do
647           lambda{
648             get :original_pictures_import, :id => @ps.id
649           }.should raise_error(ActiveRecord::Forbidden)
650         end
651       end
652       context 'json形式' do
653         it '例外403 forbiddenを返す' do
654           lambda{
655             get :original_pictures_import, :id => @ps.id, :format => :json
656           }.should raise_error(ActiveRecord::Forbidden)
657         end
658       end
659     end
660   end
661   
662 end