1 # -*- encoding: utf-8 -*-
4 describe OriginalPicturesController do
7 @user = Factory( :user_yas)
9 @artist = Factory :artist_yas, :author_id => @author.id
12 describe '一覧表示に於いて' do
14 @op = Factory :original_picture, :artist_id => @artist.id
16 OriginalPicture.stub(:list).and_return([@op, @op, @op])
18 context 'パラメータpageについて' do
20 get :index, :page => 5
21 assigns(:page).should eq 5
23 it '省略されると@pageに1値が入る' do
25 assigns(:page).should eq 1
28 context 'つつがなく終わるとき' do
29 it 'ステータスコード200 OKを返す' do
31 response.should be_success
33 it '原画モデルに一覧を問い合わせている' do
34 OriginalPicture.should_receive(:list).exactly(1)
\r
37 it '@original_picturesにリストを取得している' do
39 assigns(:original_pictures).should have_at_least(3).items
42 it 'indexテンプレートを描画する' do
44 response.should render_template("index")
49 get :index, :format => :json
50 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
52 it 'データがリスト構造になっている' do
53 get :index, :format => :json
54 json = JSON.parse response.body
55 json.should have_at_least(3).items
57 it 'リストの先頭くらいは原画っぽいものであって欲しい' do
58 get :index, :format => :json
59 json = JSON.parse response.body
60 json.first.has_key?("ext").should be_true
64 context '作家権限がないとき' do
69 it 'ステータスコード302 Foundを返す' do
71 response.status.should eq 302
75 response.should redirect_to '/users/sign_in'
79 it 'ステータスコード401 Unauthorizedを返す' do
80 get :index, :format => :json
81 response.status.should eq 401
83 it '応答メッセージにUnauthorizedを返す' do
84 get :index, :format => :json
85 response.message.should match(/Unauthorized/)
89 context '作家が絵師でないとき' do
91 Author.any_instance.stub(:artist?).and_return(false)
94 it 'ステータスコード302 Foundを返す' do
96 response.status.should eq 302
100 response.should redirect_to new_artist_path
104 it '例外403 forbiddenを返す' do
106 get :index, :format => :json
107 }.should raise_error(ActiveRecord::Forbidden)
113 describe '単体表示に於いて' do
115 @pic = Factory :original_picture, :artist_id => @artist.id
117 OriginalPicture.stub(:show).and_return(@pic)
119 context 'つつがなく終わるとき' do
120 it 'ステータスコード200 OKを返す' do
121 get :show, :id => @pic.id
122 response.should be_success
124 it '原画モデルに単体取得を問い合わせている' do
125 OriginalPicture.should_receive(:show).exactly(1)
\r
128 it '@original_pictureにアレを取得している' do
129 get :show, :id => @pic.id
130 assigns(:original_picture).id.should eq(@pic.id)
133 it 'showテンプレートを描画する' do
134 get :show, :id => @pic.id
135 response.should render_template("show")
140 get :show, :id => @pic.id, :format => :json
141 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
144 get :show, :id => @pic.id, :format => :json
145 json = JSON.parse response.body
146 json["ext"].should match(/png/)
149 #画像送信では、send_dataにスタブをおいてテストしたいが、ここに噛ませると
150 #renderが働かず、エラーとなってしまう。そこで、原画のファイル取得部分に
151 #スタブをおいてsend_dataがデータを返す体裁でテストする。
153 it '画像モデルに画像データを問い合わせる' do
154 OriginalPicture.any_instance.should_receive(:restore).exactly(1)
\r
155 get :show, :id => @pic.id, :format => :png
158 OriginalPicture.any_instance.stub(:restore).and_return('aaa')
\r
159 get :show, :id => @pic.id, :format => :png
160 response.body.should eq 'aaa'
164 it '画像モデルに画像データを問い合わせる' do
165 OriginalPicture.any_instance.should_receive(:restore).exactly(1)
\r
166 get :show, :id => @pic.id, :format => :gif
169 OriginalPicture.any_instance.stub(:restore).and_return('bbb')
\r
170 get :show, :id => @pic.id, :format => :gif
171 response.body.should eq 'bbb'
175 it '画像モデルに画像データを問い合わせる' do
176 OriginalPicture.any_instance.should_receive(:restore).exactly(1)
\r
177 get :show, :id => @pic.id, :format => :jpeg
180 OriginalPicture.any_instance.stub(:restore).and_return('ccc')
\r
181 get :show, :id => @pic.id, :format => :jpeg
182 response.body.should eq 'ccc'
186 context '作家権限がないとき' do
191 it 'ステータスコード302 Foundを返す' do
192 get :show, :id => @pic.id
193 response.status.should eq 302
195 it 'サインインページへ遷移する' do
196 get :show, :id => @pic.id
197 response.body.should redirect_to '/users/sign_in'
201 it 'ステータスコード401 Unauthorizedを返す' do
202 get :show, :id => @pic.id, :format => :json
203 response.status.should eq 401
205 it '応答メッセージにUnauthorizedを返す' do
206 get :show, :id => @pic.id, :format => :json
207 response.message.should match(/Unauthorized/)
211 context '作家が絵師でないとき' do
213 Author.any_instance.stub(:artist?).and_return(false)
216 it 'ステータスコード302 Foundを返す' do
217 get :show, :id => @pic.id
218 response.status.should eq 302
221 get :show, :id => @pic.id
222 response.should redirect_to new_artist_path
226 it '例外403 forbiddenを返す' do
228 get :show, :id => @pic.id, :format => :json
229 }.should raise_error(ActiveRecord::Forbidden)
233 context '対象原画がないとき' do
235 OriginalPicture.unstub(:show)
238 it '例外404 not_foundを返す' do
241 }.should raise_error(ActiveRecord::RecordNotFound)
245 it '例外404 not_foundを返す' do
247 get :show, :id => 0, :format => :json
248 }.should raise_error(ActiveRecord::RecordNotFound)
252 context '他人の原画を見ようとしたとき' do
254 OriginalPicture.stub(:show).and_return(@pic)
255 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(false)
258 it '例外403 forbiddenを返す' do
260 get :show, :id => @pic.id
261 }.should raise_error(ActiveRecord::Forbidden)
265 it '例外403 forbiddenを返す' do
267 get :show, :id => @pic.id, :format => :json
268 }.should raise_error(ActiveRecord::Forbidden)
274 describe '新規作成フォーム表示に於いて' do
278 context 'つつがなく終わるとき' do
279 it 'ステータスコード200 OKを返す' do
281 response.should be_success
283 it '@original_pictureに新規データを用意している' do
285 assigns(:original_picture).should be_a_new(OriginalPicture)
287 it '原画モデルにデフォルト値補充を依頼している' do
288 OriginalPicture.any_instance.should_receive(:supply_default).exactly(1)
\r
292 it 'ページテンプレートnewを描画する' do
294 response.should render_template("new")
298 it '部分テンプレートnew.jsを描画する' do
299 get :new, :format => :js
300 response.should render_template("new")
304 context '作家権限がないとき' do
309 it 'ステータスコード302 Foundを返す' do
311 response.status.should eq 302
313 it 'サインインページへ遷移する' do
315 response.body.should redirect_to '/users/sign_in'
319 it 'ステータスコード401 Unauthorizedを返す' do
320 get :new, :format => :js
321 response.status.should eq 401
323 it '応答メッセージにUnauthorizedを返す' do
324 get :new, :format => :js
325 response.message.should match(/Unauthorized/)
329 context '作家が絵師でないとき' do
331 Author.any_instance.stub(:artist?).and_return(false)
334 it 'ステータスコード302 Foundを返す' do
336 response.status.should eq 302
340 response.should redirect_to new_artist_path
344 it 'ステータスコード200 Okを返す' do
345 get :new, :format => :js
346 response.status.should eq 200
348 it '絵師登録部分テンプレートartists/new.jsを描画する' do
349 get :new, :format => :js
350 response.should render_template("artists/new")
356 describe '新規作成に於いて' do
360 context 'つつがなく終わるとき' do
362 OriginalPicture.any_instance.should_receive(:save).exactly(1)
363 post :create, :original_picture => Factory.attributes_for(:original_picture)
365 it "@original_pictureに作成された原画を保持していて、それがDBにある" do
366 post :create, :original_picture => Factory.attributes_for(:original_picture)
367 assigns(:original_picture).should be_a(OriginalPicture)
368 assigns(:original_picture).should be_persisted
371 it 'ステータスコード302 Foundを返す' do
372 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
373 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
374 post :create, :original_picture => Factory.attributes_for(:original_picture)
375 response.status.should eq 302
377 it '作成された原画の表示ページへ遷移する' do
378 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
379 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
380 post :create, :original_picture => Factory.attributes_for(:original_picture)
381 response.should redirect_to(OriginalPicture.last)
385 it 'ステータスコード200 OKを返す' do
386 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
387 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
388 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
389 response.should be_success
391 it '作成された原画をjsonデータで返す' do
392 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
393 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
394 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
395 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
398 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
399 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
400 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
401 json = JSON.parse response.body
402 json["ext"].should match(/png/)
406 context '作家権限がないとき' do
411 it 'ステータスコード302 Foundを返す' do
412 post :create, :original_picture => Factory.attributes_for(:original_picture)
413 response.status.should eq 302
415 it 'サインインページへ遷移する' do
416 post :create, :original_picture => Factory.attributes_for(:original_picture)
417 response.body.should redirect_to '/users/sign_in'
421 it 'ステータスコード401 Unauthorizedを返す' do
422 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
423 response.status.should eq 401
425 it '応答メッセージにUnauthorizedを返す' do
426 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
427 response.message.should match(/Unauthorized/)
431 context '作家が絵師でないとき' do
433 Author.any_instance.stub(:artist?).and_return(false)
436 it 'ステータスコード302 Foundを返す' do
437 post :create, :original_picture => Factory.attributes_for(:original_picture)
438 response.status.should eq 302
441 post :create, :original_picture => Factory.attributes_for(:original_picture)
442 response.should redirect_to new_artist_path
446 it '例外403 forbiddenを返す' do
448 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
449 }.should raise_error(ActiveRecord::Forbidden)
453 context '検証、保存に失敗した' do
455 OriginalPicture.any_instance.stub(:save).and_return(false)
457 it "未保存のコミックを保持している" do
458 post :create, :original_picture => Factory.attributes_for(:original_picture)
459 assigns(:original_picture).should be_a_new(OriginalPicture)
462 it 'ステータスコード200 OKを返す' do
463 post :create, :original_picture => Factory.attributes_for(:original_picture)
464 response.status.should eq 200
467 post :create, :original_picture => Factory.attributes_for(:original_picture)
468 response.should render_template("new")
472 it 'ステータスコード422 unprocessable_entity を返す' do
473 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
474 response.status.should eq 422
476 it '応答メッセージUnprocessable Entityを返す' do
477 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
478 response.message.should match(/Unprocessable/)
484 describe '編集フォーム表示に於いて' do
486 @pic = Factory :original_picture, :artist_id => @artist.id
488 OriginalPicture.stub(:show).and_return(@pic)
490 context 'つつがなく終わるとき' do
491 it 'ステータスコード200 OKを返す' do
492 get :edit, :id => @pic.id
493 response.should be_success
495 it '原画モデルに単体取得を問い合わせている' do
496 OriginalPicture.should_receive(:show).exactly(1)
\r
499 it '@original_pictureにデータを用意している' do
500 get :edit, :id => @pic.id
501 assigns(:original_picture).should eq @pic
504 it 'ページテンプレートeditを描画する' do
505 get :edit, :id => @pic.id
506 response.should render_template("edit")
510 it '部分テンプレートedit.jsを描画する' do
511 get :edit, :id => @pic.id, :format => :js
512 response.should render_template("edit")
516 context '作家権限がないとき' do
521 it 'ステータスコード302 Foundを返す' do
522 get :edit, :id => @pic.id
523 response.status.should eq 302
525 it 'サインインページへ遷移する' do
526 get :edit, :id => @pic.id
527 response.body.should redirect_to '/users/sign_in'
531 it 'ステータスコード401 Unauthorizedを返す' do
532 get :edit, :id => @pic.id, :format => :js
533 response.status.should eq 401
535 it '応答メッセージにUnauthorizedを返す' do
536 get :edit, :id => @pic.id, :format => :js
537 response.message.should match(/Unauthorized/)
541 context '作家が絵師でないとき' do
543 Author.any_instance.stub(:artist?).and_return(false)
546 it 'ステータスコード302 Foundを返す' do
547 get :edit, :id => @pic.id
548 response.status.should eq 302
551 get :edit, :id => @pic.id
552 response.should redirect_to new_artist_path
556 it 'ステータスコード200 Okを返す' do
557 get :edit, :id => @pic.id, :format => :js
558 response.status.should eq 200
560 it '絵師登録部分テンプレートartists/new.jsを描画する' do
561 get :edit, :id => @pic.id, :format => :js
562 response.should render_template("artists/new")
566 context '対象コミックがないとき' do
568 OriginalPicture.unstub(:show)
571 it '例外404 not_foundを返す' do
574 }.should raise_error(ActiveRecord::RecordNotFound)
578 it '例外404 not_foundを返す' do
580 get :edit, :id => 0, :format => :js
581 }.should raise_error(ActiveRecord::RecordNotFound)
585 context '他人の原画を見ようとしたとき' do
587 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(false)
590 it '例外403 forbiddenを返す' do
592 get :edit, :id => @pic.id
593 }.should raise_error(ActiveRecord::Forbidden)
597 it '例外403 forbiddenを返す' do
599 get :edit, :id => @pic.id, :format => :js
600 }.should raise_error(ActiveRecord::Forbidden)
608 @pic = Factory :original_picture, :artist_id => @artist.id
611 context '事前チェックしておく' do
612 it '原画モデルに単体取得を問い合わせている' do
613 OriginalPicture.should_receive(:show).exactly(1)
\r
614 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
617 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
618 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
619 OriginalPicture.any_instance.should_receive(:save).exactly(1)
620 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
622 it '@original_pictureにアレを取得している' do
623 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
624 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
625 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
626 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
627 assigns(:original_picture).id.should eq(@pic.id)
630 context 'つつがなく終わるとき' do
632 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
633 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
634 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture, :ext => 'jpeg')
635 OriginalPicture.find(@pic.id).ext.should eq 'jpeg'
638 it 'ステータスコード302 Foundを返す' do
639 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
640 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
641 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
642 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
643 response.status.should eq 302
645 it '更新された原画の表示ページへ遷移する' do
646 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
647 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
648 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
649 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
650 response.should redirect_to(@pic)
654 it 'ステータスコード200 OKを返す' do
655 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
656 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
657 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
658 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture), :format => :json
659 response.should be_success
662 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
663 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
664 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
665 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture), :format => :json
666 response.body.should match /./
670 context '作家権限がないとき' do
675 it 'ステータスコード302 Foundを返す' do
676 post :create, :original_picture => Factory.attributes_for(:original_picture)
677 response.status.should eq 302
679 it 'サインインページへ遷移する' do
680 post :create, :original_picture => Factory.attributes_for(:original_picture)
681 response.body.should redirect_to '/users/sign_in'
685 it 'ステータスコード401 Unauthorizedを返す' do
686 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
687 response.status.should eq 401
689 it '応答メッセージにUnauthorizedを返す' do
690 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
691 response.message.should match(/Unauthorized/)
695 context '作家が絵師でないとき' do
697 Author.any_instance.stub(:artist?).and_return(false)
700 it 'ステータスコード302 Foundを返す' do
701 post :create, :original_picture => Factory.attributes_for(:original_picture)
702 response.status.should eq 302
705 post :create, :original_picture => Factory.attributes_for(:original_picture)
706 response.should redirect_to new_artist_path
710 it '例外403 forbiddenを返す' do
712 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
713 }.should raise_error(ActiveRecord::Forbidden)
717 context '対象原画がないとき' do
721 it '例外404 not_foundを返す' do
723 put :update, :id => 0, :original_picture => Factory.attributes_for(:original_picture)
724 }.should raise_error(ActiveRecord::RecordNotFound)
728 it '例外404 not_foundを返す' do
730 put :update, :id => 0, :original_picture => Factory.attributes_for(:original_picture), :format => :json
731 }.should raise_error(ActiveRecord::RecordNotFound)
735 context '他人の原画を見ようとしたとき' do
737 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(false)
740 it '例外403 forbiddenを返す' do
742 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
743 }.should raise_error(ActiveRecord::Forbidden)
747 it '例外403 forbiddenを返す' do
749 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture), :format => :json
750 }.should raise_error(ActiveRecord::Forbidden)
754 context '検証、保存に失敗した' do
756 OriginalPicture.any_instance.stub(:save).and_return(false)
759 it 'ステータスコード200 Okを返す' do
760 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
761 response.status.should eq 200
764 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
765 response.should render_template("edit")
769 it 'ステータスコード422 unprocessable_entity を返す' do
770 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture), :format => :json
771 response.status.should eq 422
773 it '応答メッセージUnprocessable Entityを返す' do
774 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture), :format => :json
775 response.message.should match(/Unprocessable/)