1 # -*- encoding: utf-8 -*-
5 describe OriginalPicturesController do
7 @admin = FactoryGirl.create :admin
8 @user = FactoryGirl.create( :user_yas)
9 @author = FactoryGirl.create :author, :user_id => @user.id
10 @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
11 @sp = FactoryGirl.create :system_picture
12 @lg = FactoryGirl.create :license_group
13 @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
16 if MagicNumber['run_mode'] == 1
17 describe '一覧表示に於いて' do
19 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
21 OriginalPicture.stub(:mylist).and_return([@op, @op, @op])
23 context 'パラメータpageについて' do
25 get :index, :page => 5
26 assigns(:page).should eq 5
28 it '省略されると@pageに1値が入る' do
30 assigns(:page).should eq 1
32 it '与えられたpage_sizeがセットされている' do
33 get :index, :page_size => 15
34 assigns(:page_size).should eq 15
36 it '省略されると@page_sizeにデフォルト値が入る' do
38 assigns(:page_size).should eq OriginalPicture.default_page_size
40 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
41 get :index, :page_size => 1500
42 assigns(:page_size).should eq OriginalPicture.max_page_size
44 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
45 get :index, :page_size => 0
46 assigns(:page_size).should eq OriginalPicture.default_page_size
49 context 'つつがなく終わるとき' do
50 it 'ステータスコード200 OKを返す' do
52 response.should be_success
54 it '原画モデルにマイリストを問い合わせている' do
55 OriginalPicture.should_receive(:mylist).exactly(1)
58 it '@original_picturesにリストを取得している' do
60 assigns(:original_pictures).should have_at_least(3).items
63 it 'indexテンプレートを描画する' do
65 response.should render_template("index")
70 get :index, :format => :json
71 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
73 it '原画モデルにjson一覧出力オプションを問い合わせている' do
74 OriginalPicture.should_receive(:list_json_opt).exactly(1)
75 get :index, :format => :json
77 it 'データがリスト構造になっている' do
78 get :index, :format => :json
79 json = JSON.parse response.body
80 json.should have_at_least(3).items
82 it 'リストの先頭くらいは原画っぽいものであって欲しい' do
83 get :index, :format => :json
84 json = JSON.parse response.body
85 json.first.has_key?("ext").should be_true
86 json.first.has_key?("md5").should be_true
87 json.first.has_key?("artist_id").should be_true
88 json.first.has_key?("width").should be_true
92 context 'ユーザ権限がないとき' do
97 it 'ステータスコード302 Foundを返す' do
99 response.status.should eq 302
101 it 'サインインページへ遷移する' do
103 response.should redirect_to '/users/sign_in'
107 it 'ステータスコード401 Unauthorizedを返す' do
108 get :index, :format => :json
109 response.status.should eq 401
111 it '応答メッセージにUnauthorizedを返す' do
112 get :index, :format => :json
113 response.message.should match(/Unauthorized/)
117 context 'ユーザ権限はないが管理者権限があるとき' do
123 it 'ステータスコード302 Foundを返す' do
125 response.status.should eq 302
127 it 'サインインページへ遷移する' do
129 response.should redirect_to '/users/sign_in'
133 context 'ユーザが絵師でないとき' do
138 it 'ステータスコード302 Foundを返す' do
140 response.status.should eq 302
144 response.should redirect_to new_artist_path
148 it '例外403 forbiddenを返す' do
150 get :index, :format => :json
151 }.should raise_error(ActiveRecord::Forbidden)
157 describe '単体表示に於いて' do
159 @pic = FactoryGirl.create :original_picture, :artist_id => @artist.id
161 OriginalPicture.stub(:show).and_return(@pic)
163 context 'つつがなく終わるとき' do
164 it 'ステータスコード200 OKを返す' do
165 get :show, :id => @pic.id
166 response.should be_success
168 it '原画モデルに単体取得を問い合わせている' do
169 OriginalPicture.should_receive(:show).exactly(1)
172 it '@original_pictureにアレを取得している' do
173 get :show, :id => @pic.id
174 assigns(:original_picture).id.should eq(@pic.id)
177 it 'showテンプレートを描画する' do
178 get :show, :id => @pic.id
179 response.should render_template("show")
184 get :show, :id => @pic.id, :format => :json
185 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
187 it '原画モデルにjson単体出力オプションを問い合わせている' do
188 OriginalPicture.should_receive(:show_json_opt).exactly(1)
189 get :show, :id => @pic.id, :format => :json
192 get :show, :id => @pic.id, :format => :json
193 json = JSON.parse response.body
194 json["ext"].should match(/png/)
195 json["md5"].should be_true
196 json["artist_id"].should be_true
197 json["width"].should be_true
200 #画像送信では、send_dataにスタブをおいてテストしたいが、ここに噛ませると
201 #renderが働かず、エラーとなってしまう。そこで、原画のファイル取得部分に
202 #スタブをおいてsend_dataがデータを返す体裁でテストする。
205 OriginalPicture.any_instance.stub(:mime_type).and_return('image/png')
206 OriginalPicture.any_instance.stub(:restore).and_return('aaa')
208 it '画像モデルに画像データを問い合わせる' do
209 OriginalPicture.any_instance.should_receive(:restore).exactly(1)
210 get :show, :id => @pic.id, :format => :png
212 it '画像モデルにMimeTypeを問い合わせる' do
213 OriginalPicture.any_instance.should_receive(:mime_type).exactly(1)
214 get :show, :id => @pic.id, :format => :png
217 get :show, :id => @pic.id, :format => :png
218 response.body.should eq 'aaa'
223 OriginalPicture.any_instance.stub(:mime_type).and_return('image/gif')
224 OriginalPicture.any_instance.stub(:restore).and_return('bbb')
226 it '画像モデルに画像データを問い合わせる' do
227 OriginalPicture.any_instance.should_receive(:restore).exactly(1)
228 get :show, :id => @pic.id, :format => :gif
230 it '画像モデルにMimeTypeを問い合わせる' do
231 OriginalPicture.any_instance.should_receive(:mime_type).exactly(1)
232 get :show, :id => @pic.id, :format => :gif
235 get :show, :id => @pic.id, :format => :gif
236 response.body.should eq 'bbb'
241 OriginalPicture.any_instance.stub(:mime_type).and_return('image/jpeg')
242 OriginalPicture.any_instance.stub(:restore).and_return('ccc')
244 it '画像モデルに画像データを問い合わせる' do
245 OriginalPicture.any_instance.should_receive(:restore).exactly(1)
246 get :show, :id => @pic.id, :format => :jpeg
248 it '画像モデルにMimeTypeを問い合わせる' do
249 OriginalPicture.any_instance.should_receive(:mime_type).exactly(1)
250 get :show, :id => @pic.id, :format => :jpeg
253 get :show, :id => @pic.id, :format => :jpeg
254 response.body.should eq 'ccc'
258 context 'ユーザ権限がないとき' do
263 it 'ステータスコード302 Foundを返す' do
264 get :show, :id => @pic.id
265 response.status.should eq 302
267 it 'サインインページへ遷移する' do
268 get :show, :id => @pic.id
269 response.body.should redirect_to '/users/sign_in'
273 it 'ステータスコード401 Unauthorizedを返す' do
274 get :show, :id => @pic.id, :format => :json
275 response.status.should eq 401
277 it '応答メッセージにUnauthorizedを返す' do
278 get :show, :id => @pic.id, :format => :json
279 response.message.should match(/Unauthorized/)
283 context 'ユーザ権限はないが管理者権限があるとき' do
288 it 'ステータスコード200 OKを返す' do
289 get :show, :id => @pic.id
290 response.should be_success
293 context 'ユーザが絵師でないとき' do
297 it 'ステータスコード200 OKを返す' do
298 get :show, :id => @pic.id
299 response.should be_success
303 context '対象原画がないとき' do
305 OriginalPicture.unstub(:show)
308 it '例外404 not_foundを返す' do
311 }.should raise_error(ActiveRecord::RecordNotFound)
315 it '例外404 not_foundを返す' do
317 get :show, :id => 0, :format => :json
318 }.should raise_error(ActiveRecord::RecordNotFound)
322 context '他人の原画を見ようとしたとき' do
324 OriginalPicture.stub(:show).and_return(@pic)
325 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(false)
328 it '例外403 forbiddenを返す' do
330 get :show, :id => @pic.id
331 }.should raise_error(ActiveRecord::Forbidden)
335 it '例外403 forbiddenを返す' do
337 get :show, :id => @pic.id, :format => :json
338 }.should raise_error(ActiveRecord::Forbidden)
345 describe '履歴一覧表示に於いて' do
347 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
348 @p = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 0,
349 :original_picture_id => @op.id
351 OriginalPicture.stub(:show).and_return(@op)
352 OriginalPicture.any_instance.stub(:history).and_return([@p, @p, @p])
354 context 'つつがなく終わるとき' do
355 it 'ステータスコード200 OKを返す' do
356 get :history, :id => @op.id
357 response.should be_success
359 it '原画モデルに単体取得を問い合わせている' do
360 OriginalPicture.should_receive(:show).exactly(1)
361 get :history, :id => @op.id
363 it '自身に履歴一覧を問い合わせている' do
364 OriginalPicture.any_instance.should_receive(:history).exactly(1)
365 get :history, :id => @op.id
367 it '@historyにリストを取得している' do
368 get :history, :id => @op.id
369 assigns(:history).should have_at_least(3).items
372 it 'historyテンプレートを描画する' do
373 get :history, :id => @op.id
374 response.should render_template("history")
379 get :history, :id => @op.id, :format => :json
380 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
382 it 'データがリスト構造になっている' do
383 get :history, :id => @op.id, :format => :json
384 json = JSON.parse response.body
385 json.should have_at_least(3).items
387 it 'リストの先頭くらいは原画っぽいものであって欲しい' do
388 get :history, :id => @op.id, :format => :json
389 json = JSON.parse response.body
390 json.first.has_key?("ext").should be_true
394 context 'ユーザ権限がないとき' do
399 it 'ステータスコード302 Foundを返す' do
400 get :history, :id => @op.id
401 response.status.should eq 302
403 it 'サインインページへ遷移する' do
404 get :history, :id => @op.id
405 response.should redirect_to '/users/sign_in'
409 it 'ステータスコード401 Unauthorizedを返す' do
410 get :history, :id => @op.id, :format => :json
411 response.status.should eq 401
413 it '応答メッセージにUnauthorizedを返す' do
414 get :history, :id => @op.id, :format => :json
415 response.message.should match(/Unauthorized/)
419 context 'ユーザ権限はないが管理者権限があるとき' do
424 it 'ステータスコード200 OKを返す' do
425 get :history, :id => @op.id
426 response.should be_success
429 context 'ユーザが絵師でないとき' do
433 it 'ステータスコード200 OKを返す' do
434 get :history, :id => @op.id
435 response.should be_success
440 describe '新規作成フォーム表示に於いて' do
444 context 'つつがなく終わるとき' do
445 it '@original_pictureに新規データを用意している' do
447 assigns(:original_picture).should be_a_new(OriginalPicture)
449 it '原画モデルにデフォルト値補充を依頼している' do
450 OriginalPicture.any_instance.should_receive(:supply_default).exactly(1)
454 it 'ステータスコード200 OKを返す' do
456 response.should be_success
458 it 'ページテンプレートnewを描画する' do
460 response.should render_template("new")
464 it 'ステータスコード200 OKを返す' do
465 get :new, :format => :js
466 response.should be_success
468 it '部分テンプレートnew.jsを描画する' do
469 get :new, :format => :js
470 response.should render_template("new")
475 get :new, :format => :json
476 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
478 it '原画モデルにjson単体出力オプションを問い合わせている' do
479 OriginalPicture.should_receive(:show_json_opt).exactly(1)
480 get :new, :format => :json
484 context 'ユーザ権限がないとき' do
489 it 'ステータスコード302 Foundを返す' do
491 response.status.should eq 302
493 it 'サインインページへ遷移する' do
495 response.body.should redirect_to '/users/sign_in'
499 it 'ステータスコード401 Unauthorizedを返す' do
500 get :new, :format => :js
501 response.status.should eq 401
503 it '応答メッセージにUnauthorizedを返す' do
504 get :new, :format => :js
505 response.message.should match(/Unauthorized/)
509 context 'ユーザ権限はないが管理者権限があるとき' do
515 it 'ステータスコード302 Foundを返す' do
517 response.status.should eq 302
519 it 'サインインページへ遷移する' do
521 response.body.should redirect_to '/users/sign_in'
525 context 'ユーザが絵師でないとき' do
530 it 'ステータスコード302 Foundを返す' do
532 response.status.should eq 302
536 response.should redirect_to new_artist_path
540 it '例外403 forbiddenを返す' do
542 get :new, :format => :json
543 }.should raise_error(ActiveRecord::Forbidden)
549 describe '新規作成に於いて' do
552 @attr = {:original_picture => {:file => "abc\ndef\nghi"}}
553 @imager = ImagerTest.load("abc\ndef\nghi")
554 OriginalPicturesController.any_instance.stub(:set_image).with(any_args()).and_return("abc\ndef\nghi")
556 context '事前チェックしておく' do
558 PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
559 OriginalPicture.any_instance.stub(:store).with(@imager).and_return(true)
561 it '画像ライブラリをロードする' do
562 PettanImager.should_receive(:load).with(any_args()).exactly(1)
565 it '原画モデルにデフォルト値補充を依頼している' do
566 OriginalPicture.any_instance.should_receive(:supply_default).with(any_args()).exactly(1)
569 it '原画モデルに上書き補充を依頼している' do
570 OriginalPicture.any_instance.should_receive(:overwrite).with(@artist).exactly(1)
574 OriginalPicture.any_instance.should_receive(:store).with(@imager).exactly(1)
578 context 'つつがなく終わるとき' do
580 PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
582 it "@original_pictureに作成された原画を保持している" do
584 assigns(:original_picture).should be_a(OriginalPicture)
587 it 'ステータスコード302 Foundを返す' do
589 response.status.should eq 302
591 it '作成された原画の表示ページへ遷移する' do
593 response.should redirect_to(OriginalPicture.last)
598 @attr.merge!({:format => :json})
600 it 'ステータスコード200 OKを返す' do
602 response.should be_success
604 it '作成された原画をjsonデータで返す' do
606 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
608 it '原画モデルにjson単体出力オプションを問い合わせている' do
609 OriginalPicture.should_receive(:show_json_opt).exactly(1)
614 json = JSON.parse response.body
615 json["ext"].should match(/png/)
616 json["md5"].should be_true
617 json["artist_id"].should be_true
618 json["width"].should be_true
622 context 'ユーザ権限がないとき' do
627 it 'ステータスコード302 Foundを返す' do
629 response.status.should eq 302
631 it 'サインインページへ遷移する' do
633 response.body.should redirect_to '/users/sign_in'
638 @attr.merge!({:format => :json})
640 it 'ステータスコード401 Unauthorizedを返す' do
642 response.status.should eq 401
644 it '応答メッセージにUnauthorizedを返す' do
646 response.message.should match(/Unauthorized/)
650 context 'ユーザ権限はないが管理者権限があるとき' do
656 it 'ステータスコード302 Foundを返す' do
658 response.status.should eq 302
660 it 'サインインページへ遷移する' do
662 response.body.should redirect_to '/users/sign_in'
666 context 'ユーザが絵師でないとき' do
671 it 'ステータスコード302 Foundを返す' do
673 response.status.should eq 302
677 response.should redirect_to new_artist_path
682 @attr.merge!({:format => :json})
684 it '例外403 forbiddenを返す' do
685 @attr.merge!({:format => :json})
688 }.should raise_error(ActiveRecord::Forbidden)
692 context '検証、保存に失敗した' do
694 PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
695 OriginalPicture.any_instance.stub(:store).with(@imager).and_return(false)
697 it "未保存の原画を保持している" do
699 assigns(:original_picture).should be_a_new(OriginalPicture)
702 it 'ステータスコード200 OKを返す' do
704 response.status.should eq 200
708 response.should render_template("new")
713 @attr.merge!({:format => :json})
715 it 'ステータスコード422 unprocessable_entity を返す' do
717 response.status.should eq 422
719 it '応答メッセージUnprocessable Entityを返す' do
721 response.message.should match(/Unprocessable/)
725 context 'ファイルが指定されていないとき' do
728 PettanImager.stub(:load).and_return(nil)
730 it "未保存の原画を保持している" do
732 assigns(:original_picture).should be_a_new(OriginalPicture)
735 it 'ステータスコード200 OKを返す' do
737 response.status.should eq 200
741 response.should render_template("new")
746 @attr.merge!({:format => :json})
748 it 'ステータスコード422 unprocessable_entity を返す' do
750 response.status.should eq 422
752 it '応答メッセージUnprocessable Entityを返す' do
754 response.message.should match(/Unprocessable/)
760 describe '編集フォーム表示に於いて' do
762 @pic = FactoryGirl.create :original_picture, :artist_id => @artist.id
764 OriginalPicture.stub(:show).and_return(@pic)
766 context 'つつがなく終わるとき' do
767 it 'ステータスコード200 OKを返す' do
768 get :edit, :id => @pic.id
769 response.should be_success
771 it '原画モデルに編集取得を問い合わせている' do
772 OriginalPicture.should_receive(:edit).exactly(1)
773 get :edit, :id => @pic.id
775 it '@original_pictureにデータを用意している' do
776 get :edit, :id => @pic.id
777 assigns(:original_picture).should eq @pic
780 it 'ページテンプレートeditを描画する' do
781 get :edit, :id => @pic.id
782 response.should render_template("edit")
786 it '部分テンプレートedit.jsを描画する' do
787 get :edit, :id => @pic.id, :format => :js
788 response.should render_template("edit")
792 context 'ユーザ権限がないとき' do
797 it 'ステータスコード302 Foundを返す' do
798 get :edit, :id => @pic.id
799 response.status.should eq 302
801 it 'サインインページへ遷移する' do
802 get :edit, :id => @pic.id
803 response.body.should redirect_to '/users/sign_in'
807 it 'ステータスコード401 Unauthorizedを返す' do
808 get :edit, :id => @pic.id, :format => :js
809 response.status.should eq 401
811 it '応答メッセージにUnauthorizedを返す' do
812 get :edit, :id => @pic.id, :format => :js
813 response.message.should match(/Unauthorized/)
817 context 'ユーザ権限はないが管理者権限があるとき' do
823 it 'ステータスコード302 Foundを返す' do
824 get :edit, :id => @pic.id
825 response.status.should eq 302
827 it 'サインインページへ遷移する' do
828 get :edit, :id => @pic.id
829 response.body.should redirect_to '/users/sign_in'
833 context 'ユーザが絵師でないとき' do
838 it 'ステータスコード302 Foundを返す' do
839 get :edit, :id => @pic.id
840 response.status.should eq 302
843 get :edit, :id => @pic.id
844 response.should redirect_to new_artist_path
848 it '例外403 forbiddenを返す' do
850 get :edit, :id => @pic.id, :format => :json
851 }.should raise_error(ActiveRecord::Forbidden)
859 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
860 OriginalPicture.stub(:edit).with(@op.id.to_s, @artist).and_return(@op)
861 OriginalPicturesController.any_instance.stub(:set_image).with(any_args()).and_return("abc\ndef\nghi")
863 @attr = {:file => "abc\ndef\nghi"}
864 @imager = ImagerTest.load("abc\ndef\nghi")
866 context '事前チェックしておく' do
868 PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
869 OriginalPicture.any_instance.stub(:store).with(@imager).and_return(true)
871 it '画像ライブラリをロードする' do
872 PettanImager.should_receive(:load).with(any_args()).exactly(1)
873 put :update, :id => @op.id, :original_picture => @attr
875 it '原画モデルに編集取得を問い合わせている' do
876 OriginalPicture.should_receive(:edit).with(@op.id.to_s, @artist).exactly(1)
877 put :update, :id => @op.id, :original_picture => @attr
879 it '原画モデルに上書き補充を依頼している' do
880 OriginalPicture.any_instance.should_receive(:overwrite).with(@artist).exactly(1)
881 put :update, :id => @op.id, :original_picture => @attr
884 OriginalPicture.any_instance.should_receive(:store).with(@imager).exactly(1)
885 put :update, :id => @op.id, :original_picture => @attr
888 context 'つつがなく終わるとき' do
890 PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
892 it '@original_pictureにアレを取得している' do
893 put :update, :id => @op.id, :original_picture => @attr
894 assigns(:original_picture).should eq(@op)
897 it 'ステータスコード302 Foundを返す' do
898 put :update, :id => @op.id, :original_picture => @attr
899 response.status.should eq 302
901 it '更新された原画の表示ページへ遷移する' do
902 put :update, :id => @op.id, :original_picture => @attr
903 response.should redirect_to(@pic)
907 it 'ステータスコード200 OKを返す' do
908 put :update, :id => @op.id, :original_picture => @attr, :format => :json
909 response.should be_success
912 put :update, :id => @op.id, :original_picture => @attr, :format => :json
913 response.body.should match /./
917 context 'ユーザ権限がないとき' do
922 it 'ステータスコード302 Foundを返す' do
923 put :update, :id => @op.id, :original_picture => @attr
924 response.status.should eq 302
926 it 'サインインページへ遷移する' do
927 put :update, :id => @op.id, :original_picture => @attr
928 response.body.should redirect_to '/users/sign_in'
932 it 'ステータスコード401 Unauthorizedを返す' do
933 put :update, :id => @op.id, :original_picture => @attr, :format => :json
934 response.status.should eq 401
936 it '応答メッセージにUnauthorizedを返す' do
937 put :update, :id => @op.id, :original_picture => @attr, :format => :json
938 response.message.should match(/Unauthorized/)
942 context 'ユーザ権限はないが管理者権限があるとき' do
948 it 'ステータスコード302 Foundを返す' do
949 put :update, :id => @op.id, :original_picture => @attr
950 response.status.should eq 302
952 it 'サインインページへ遷移する' do
953 put :update, :id => @op.id, :original_picture => @attr
954 response.body.should redirect_to '/users/sign_in'
958 context 'ユーザが絵師でないとき' do
963 it 'ステータスコード302 Foundを返す' do
964 put :update, :id => @op.id, :original_picture => @attr
965 response.status.should eq 302
968 put :update, :id => @op.id, :original_picture => @attr
969 response.should redirect_to new_artist_path
973 it '例外403 forbiddenを返す' do
975 put :update, :id => @op.id, :original_picture => @attr, :format => :json
976 }.should raise_error(ActiveRecord::Forbidden)
980 context '検証、保存に失敗した' do
982 PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
983 OriginalPicture.any_instance.stub(:store).with(@imager).and_return(false)
986 it 'ステータスコード200 Okを返す' do
987 put :update, :id => @op.id, :original_picture => @attr
988 response.status.should eq 200
991 put :update, :id => @op.id, :original_picture => @attr
992 response.should render_template("edit")
996 it 'ステータスコード422 unprocessable_entity を返す' do
997 put :update, :id => @op.id, :original_picture => @attr, :format => :json
998 response.status.should eq 422
1000 it '応答メッセージUnprocessable Entityを返す' do
1001 put :update, :id => @op.id, :original_picture => @attr, :format => :json
1002 response.message.should match(/Unprocessable/)
1006 context 'ファイルが指定されていないとき' do
1009 PettanImager.stub(:load).and_return(nil)
1012 it 'ステータスコード200 Okを返す' do
1013 put :update, :id => @op.id, :original_picture => @attr
1014 response.status.should eq 200
1017 put :update, :id => @op.id, :original_picture => @attr
1018 response.should render_template("edit")
1022 it 'ステータスコード422 unprocessable_entity を返す' do
1023 put :update, :id => @op.id, :original_picture => @attr, :format => :json
1024 response.status.should eq 422
1026 it '応答メッセージUnprocessable Entityを返す' do
1027 put :update, :id => @op.id, :original_picture => @attr, :format => :json
1028 response.message.should match(/Unprocessable/)
1034 describe '削除に於いて' do
1036 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
1039 context '事前チェックしておく' do
1041 OriginalPicture.stub(:edit).with(any_args()).and_return @op
1042 OriginalPicture.any_instance.stub(:destroy_with_resource_picture).with(any_args()).and_return(true)
1044 it '原画モデルに編集取得を問い合わせている' do
1045 OriginalPicture.should_receive(:edit).exactly(1)
1046 delete :destroy, :id => @op.id
1049 OriginalPicture.any_instance.should_receive(:destroy_with_resource_picture).exactly(1)
1050 delete :destroy, :id => @op.id
1052 it '@original_pictureにアレを取得している' do
1053 delete :destroy, :id => @op.id
1054 assigns(:original_picture).id.should eq(@op.id)
1057 context 'つつがなく終わるとき' do
1059 OriginalPicture.any_instance.stub(:destroy_with_resource_picture).with(any_args()).and_return(true)
1062 it 'ステータスコード302 Foundを返す' do
1063 delete :destroy, :id => @op.id
1064 response.status.should eq 302
1066 it '原画の一覧ページへ遷移する' do
1067 delete :destroy, :id => @op.id
1068 response.should redirect_to(original_pictures_path)
1072 it 'ステータスコード200 OKを返す' do
1073 delete :destroy, :id => @op.id, :format => :json
1074 response.should be_success
1076 it 'ページ本体は特に返さない' do
1077 delete :destroy, :id => @op.id, :format => :json
1078 response.body.should match /./
1082 context 'ユーザ権限がないとき' do
1087 it 'ステータスコード302 Foundを返す' do
1088 delete :destroy, :id => @op.id
1089 response.status.should eq 302
1091 it 'サインインページへ遷移する' do
1092 delete :destroy, :id => @op.id
1093 response.body.should redirect_to '/users/sign_in'
1097 it '応答メッセージにUnauthorizedを返す' do
1098 delete :destroy, :id => @op.id, :format => :json
1099 response.message.should match(/Unauthorized/)
1103 context 'ユーザ権限はないが管理者権限があるとき' do
1109 it 'ステータスコード302 Foundを返す' do
1110 delete :destroy, :id => @op.id
1111 response.status.should eq 302
1113 it 'サインインページへ遷移する' do
1114 delete :destroy, :id => @op.id
1115 response.body.should redirect_to '/users/sign_in'
1119 context 'ユーザが絵師でないとき' do
1124 it 'ステータスコード302 Foundを返す' do
1125 delete :destroy, :id => @op.id
1126 response.status.should eq 302
1128 it '絵師登録ページへ遷移する' do
1129 delete :destroy, :id => @op.id
1130 response.should redirect_to new_artist_path
1134 it '例外403 forbiddenを返す' do
1136 delete :destroy, :id => @op.id, :format => :json
1137 }.should raise_error(ActiveRecord::Forbidden)
1141 context '削除に失敗したとき' do
1143 OriginalPicture.any_instance.stub(:destroy_with_resource_picture).and_return(false)
1146 it 'ステータスコード302 Foundを返す' do
1147 delete :destroy, :id => @op.id
1148 response.status.should eq 302
1150 it 'その原画の詳細ページへ遷移する' do
1151 delete :destroy, :id => @op.id
1152 response.should redirect_to(original_picture_path(@op))
1156 it 'ステータスコード422 unprocessable_entity を返す' do
1157 delete :destroy, :id => @op.id, :format => :json
1158 response.status.should eq 422
1160 it '応答メッセージUnprocessable Entityを返す' do
1161 delete :destroy, :id => @op.id, :format => :json
1162 response.message.should match(/Unprocessable/)
1169 describe '一覧表示に於いて' do
1171 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
1173 OriginalPicture.stub(:mylist).and_return([@op, @op, @op])
1175 context 'つつがなく終わるとき' do
1176 it 'ステータスコード200 OKを返す' do
1178 response.should be_success
1181 it 'indexテンプレートを描画する' do
1183 response.should render_template("index")
1188 get :index, :format => :json
1189 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1193 context 'ユーザ権限がないとき' do
1198 it 'ステータスコード302 Foundを返す' do
1200 response.status.should eq 302
1202 it 'サインインページへ遷移する' do
1204 response.should redirect_to '/users/sign_in'
1208 it 'ステータスコード401 Unauthorizedを返す' do
1209 get :index, :format => :json
1210 response.status.should eq 401
1212 it '応答メッセージにUnauthorizedを返す' do
1213 get :index, :format => :json
1214 response.message.should match(/Unauthorized/)
1220 describe '単体表示に於いて' do
1222 @pic = FactoryGirl.create :original_picture, :artist_id => @artist.id
1224 OriginalPicture.stub(:show).and_return(@pic)
1226 context 'つつがなく終わるとき' do
1227 it 'ステータスコード200 OKを返す' do
1228 get :show, :id => @pic.id
1229 response.should be_success
1232 it 'showテンプレートを描画する' do
1233 get :show, :id => @pic.id
1234 response.should render_template("show")
1239 get :show, :id => @pic.id, :format => :json
1240 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1244 context 'ユーザ権限がないとき' do
1249 it 'ステータスコード302 Foundを返す' do
1250 get :show, :id => @pic.id
1251 response.status.should eq 302
1253 it 'サインインページへ遷移する' do
1254 get :show, :id => @pic.id
1255 response.body.should redirect_to '/users/sign_in'
1259 it 'ステータスコード401 Unauthorizedを返す' do
1260 get :show, :id => @pic.id, :format => :json
1261 response.status.should eq 401
1263 it '応答メッセージにUnauthorizedを返す' do
1264 get :show, :id => @pic.id, :format => :json
1265 response.message.should match(/Unauthorized/)
1271 describe '履歴一覧表示に於いて' do
1273 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
1274 @p = FactoryGirl.create :picture, :artist_id => @artist.id, :license_id => @license.id, :revision => 0,
1275 :original_picture_id => @op.id
1277 OriginalPicture.stub(:show).and_return(@op)
1278 OriginalPicture.any_instance.stub(:history).and_return([@p, @p, @p])
1280 context 'つつがなく終わるとき' do
1281 it 'ステータスコード200 OKを返す' do
1282 get :history, :id => @op.id
1283 response.should be_success
1286 it 'historyテンプレートを描画する' do
1287 get :history, :id => @op.id
1288 response.should render_template("history")
1293 get :history, :id => @op.id, :format => :json
1294 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1298 context 'ユーザ権限がないとき' do
1303 it 'ステータスコード302 Foundを返す' do
1304 get :history, :id => @op.id
1305 response.status.should eq 302
1307 it 'サインインページへ遷移する' do
1308 get :history, :id => @op.id
1309 response.should redirect_to '/users/sign_in'
1313 it 'ステータスコード401 Unauthorizedを返す' do
1314 get :history, :id => @op.id, :format => :json
1315 response.status.should eq 401
1317 it '応答メッセージにUnauthorizedを返す' do
1318 get :history, :id => @op.id, :format => :json
1319 response.message.should match(/Unauthorized/)
1325 describe '新規作成フォーム表示に於いて' do
1329 context 'つつがなく終わるとき' do
1331 it 'ステータスコード200 OKを返す' do
1333 response.should be_success
1335 it 'ページテンプレートnewを描画する' do
1337 response.should render_template("new")
1341 it 'ステータスコード200 OKを返す' do
1342 get :new, :format => :js
1343 response.should be_success
1345 it '部分テンプレートnew.jsを描画する' do
1346 get :new, :format => :js
1347 response.should render_template("new")
1352 get :new, :format => :json
1353 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1357 context 'ユーザ権限がないとき' do
1362 it 'ステータスコード302 Foundを返す' do
1364 response.status.should eq 302
1366 it 'サインインページへ遷移する' do
1368 response.body.should redirect_to '/users/sign_in'
1372 it 'ステータスコード401 Unauthorizedを返す' do
1373 get :new, :format => :js
1374 response.status.should eq 401
1376 it '応答メッセージにUnauthorizedを返す' do
1377 get :new, :format => :js
1378 response.message.should match(/Unauthorized/)
1384 describe '新規作成に於いて' do
1387 @attr = {:original_picture => {:file => "abc\ndef\nghi"}}
1388 @imager = ImagerTest.load("abc\ndef\nghi")
1389 OriginalPicturesController.any_instance.stub(:set_image).with(any_args()).and_return("abc\ndef\nghi")
1391 context 'つつがなく終わるとき' do
1393 PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
1396 it 'ステータスコード302 Foundを返す' do
1398 response.status.should eq 302
1400 it '作成された原画の表示ページへ遷移する' do
1402 response.should redirect_to(OriginalPicture.last)
1407 @attr.merge!({:format => :json})
1409 it 'ステータスコード200 OKを返す' do
1411 response.should be_success
1413 it '作成された原画をjsonデータで返す' do
1415 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1419 context 'ユーザ権限がないとき' do
1424 it 'ステータスコード302 Foundを返す' do
1426 response.status.should eq 302
1428 it 'サインインページへ遷移する' do
1430 response.body.should redirect_to '/users/sign_in'
1435 @attr.merge!({:format => :json})
1437 it 'ステータスコード401 Unauthorizedを返す' do
1439 response.status.should eq 401
1441 it '応答メッセージにUnauthorizedを返す' do
1443 response.message.should match(/Unauthorized/)
1449 describe '編集フォーム表示に於いて' do
1451 @pic = FactoryGirl.create :original_picture, :artist_id => @artist.id
1453 OriginalPicture.stub(:show).and_return(@pic)
1455 context 'つつがなく終わるとき' do
1456 it 'ステータスコード200 OKを返す' do
1457 get :edit, :id => @pic.id
1458 response.should be_success
1461 it 'ページテンプレートeditを描画する' do
1462 get :edit, :id => @pic.id
1463 response.should render_template("edit")
1467 it '部分テンプレートedit.jsを描画する' do
1468 get :edit, :id => @pic.id, :format => :js
1469 response.should render_template("edit")
1473 context 'ユーザ権限がないとき' do
1478 it 'ステータスコード302 Foundを返す' do
1479 get :edit, :id => @pic.id
1480 response.status.should eq 302
1482 it 'サインインページへ遷移する' do
1483 get :edit, :id => @pic.id
1484 response.body.should redirect_to '/users/sign_in'
1488 it 'ステータスコード401 Unauthorizedを返す' do
1489 get :edit, :id => @pic.id, :format => :js
1490 response.status.should eq 401
1492 it '応答メッセージにUnauthorizedを返す' do
1493 get :edit, :id => @pic.id, :format => :js
1494 response.message.should match(/Unauthorized/)
1500 describe '更新に於いて' do
1502 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
1503 OriginalPicture.stub(:edit).with(@op.id.to_s, @artist).and_return(@op)
1504 OriginalPicturesController.any_instance.stub(:set_image).with(any_args()).and_return("abc\ndef\nghi")
1506 @attr = {:file => "abc\ndef\nghi"}
1507 @imager = ImagerTest.load("abc\ndef\nghi")
1509 context 'つつがなく終わるとき' do
1511 PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
1514 it 'ステータスコード302 Foundを返す' do
1515 put :update, :id => @op.id, :original_picture => @attr
1516 response.status.should eq 302
1518 it '更新された原画の表示ページへ遷移する' do
1519 put :update, :id => @op.id, :original_picture => @attr
1520 response.should redirect_to(@pic)
1524 it 'ステータスコード200 OKを返す' do
1525 put :update, :id => @op.id, :original_picture => @attr, :format => :json
1526 response.should be_success
1528 it 'ページ本体は特に返さない' do
1529 put :update, :id => @op.id, :original_picture => @attr, :format => :json
1530 response.body.should match /./
1534 context 'ユーザ権限がないとき' do
1539 it 'ステータスコード302 Foundを返す' do
1540 put :update, :id => @op.id, :original_picture => @attr
1541 response.status.should eq 302
1543 it 'サインインページへ遷移する' do
1544 put :update, :id => @op.id, :original_picture => @attr
1545 response.body.should redirect_to '/users/sign_in'
1549 it 'ステータスコード401 Unauthorizedを返す' do
1550 put :update, :id => @op.id, :original_picture => @attr, :format => :json
1551 response.status.should eq 401
1553 it '応答メッセージにUnauthorizedを返す' do
1554 put :update, :id => @op.id, :original_picture => @attr, :format => :json
1555 response.message.should match(/Unauthorized/)
1559 context '検証、保存に失敗した' do
1561 PettanImager.stub(:load).with("abc\ndef\nghi").and_return(@imager)
1562 OriginalPicture.any_instance.stub(:store).with(@imager).and_return(false)
1565 it 'ステータスコード200 Okを返す' do
1566 put :update, :id => @op.id, :original_picture => @attr
1567 response.status.should eq 200
1570 put :update, :id => @op.id, :original_picture => @attr
1571 response.should render_template("edit")
1575 it 'ステータスコード422 unprocessable_entity を返す' do
1576 put :update, :id => @op.id, :original_picture => @attr, :format => :json
1577 response.status.should eq 422
1579 it '応答メッセージUnprocessable Entityを返す' do
1580 put :update, :id => @op.id, :original_picture => @attr, :format => :json
1581 response.message.should match(/Unprocessable/)
1587 describe '削除に於いて' do
1589 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
1592 context '事前チェックしておく' do
1594 OriginalPicture.stub(:edit).with(any_args()).and_return @op
1595 OriginalPicture.any_instance.stub(:destroy_with_resource_picture).with(any_args()).and_return(true)
1597 it '原画モデルに編集取得を問い合わせている' do
1598 OriginalPicture.should_receive(:edit).exactly(1)
1599 delete :destroy, :id => @op.id
1602 OriginalPicture.any_instance.should_receive(:destroy_with_resource_picture).exactly(1)
1603 delete :destroy, :id => @op.id
1605 it '@original_pictureにアレを取得している' do
1606 delete :destroy, :id => @op.id
1607 assigns(:original_picture).id.should eq(@op.id)
1610 context 'つつがなく終わるとき' do
1612 OriginalPicture.any_instance.stub(:destroy_with_resource_picture).with(any_args()).and_return(true)
1615 it 'ステータスコード302 Foundを返す' do
1616 delete :destroy, :id => @op.id
1617 response.status.should eq 302
1619 it '原画の一覧ページへ遷移する' do
1620 delete :destroy, :id => @op.id
1621 response.should redirect_to(original_pictures_path)
1625 it 'ステータスコード200 OKを返す' do
1626 delete :destroy, :id => @op.id, :format => :json
1627 response.should be_success
1629 it 'ページ本体は特に返さない' do
1630 delete :destroy, :id => @op.id, :format => :json
1631 response.body.should match /./
1635 context 'ユーザ権限がないとき' do
1639 it 'ステータスコード302 Foundを返す' do
1640 delete :destroy, :id => @op.id
1641 response.status.should eq 302
1644 it 'サインインページへ遷移する' do
1645 delete :destroy, :id => @op.id
1646 response.body.should redirect_to '/users/sign_in'
1650 it '応答メッセージにUnauthorizedを返す' do
1651 delete :destroy, :id => @op.id, :format => :json
1652 response.message.should match(/Unauthorized/)
1656 context '削除に失敗したとき' do
1658 OriginalPicture.any_instance.stub(:destroy_with_resource_picture).and_return(false)
1661 it 'ステータスコード302 Foundを返す' do
1662 delete :destroy, :id => @op.id
1663 response.status.should eq 302
1665 it 'その原画の詳細ページへ遷移する' do
1666 delete :destroy, :id => @op.id
1667 response.should redirect_to(original_picture_path(@op))
1671 it 'ステータスコード422 unprocessable_entity を返す' do
1672 delete :destroy, :id => @op.id, :format => :json
1673 response.status.should eq 422
1675 it '応答メッセージUnprocessable Entityを返す' do
1676 delete :destroy, :id => @op.id, :format => :json
1677 response.message.should match(/Unprocessable/)