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
27 it '与えられたpage_sizeがセットされている' do
28 get :index, :page_size => 15
29 assigns(:page_size).should eq 15
31 it '省略されると@page_sizeにデフォルト値が入る' do
33 assigns(:page_size).should eq OriginalPicture.default_page_size
\r
35 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
36 get :index, :page_size => 1500
37 assigns(:page_size).should eq OriginalPicture.max_page_size
39 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
40 get :index, :page_size => 0
41 assigns(:page_size).should eq OriginalPicture.default_page_size
44 context 'つつがなく終わるとき' do
45 it 'ステータスコード200 OKを返す' do
47 response.should be_success
49 it '原画モデルに一覧を問い合わせている' do
50 OriginalPicture.should_receive(:list).exactly(1)
\r
53 it '@original_picturesにリストを取得している' do
55 assigns(:original_pictures).should have_at_least(3).items
58 it 'indexテンプレートを描画する' do
60 response.should render_template("index")
65 get :index, :format => :json
66 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
68 it 'データがリスト構造になっている' do
69 get :index, :format => :json
70 json = JSON.parse response.body
71 json.should have_at_least(3).items
73 it 'リストの先頭くらいは原画っぽいものであって欲しい' do
74 get :index, :format => :json
75 json = JSON.parse response.body
76 json.first.has_key?("ext").should be_true
80 context '作家権限がないとき' do
85 it 'ステータスコード302 Foundを返す' do
87 response.status.should eq 302
91 response.should redirect_to '/users/sign_in'
95 it 'ステータスコード401 Unauthorizedを返す' do
96 get :index, :format => :json
97 response.status.should eq 401
99 it '応答メッセージにUnauthorizedを返す' do
100 get :index, :format => :json
101 response.message.should match(/Unauthorized/)
105 context '作家が絵師でないとき' do
107 Author.any_instance.stub(:artist?).and_return(false)
110 it 'ステータスコード302 Foundを返す' do
112 response.status.should eq 302
116 response.should redirect_to new_artist_path
120 it '例外403 forbiddenを返す' do
122 get :index, :format => :json
123 }.should raise_error(ActiveRecord::Forbidden)
129 describe '単体表示に於いて' do
131 @pic = Factory :original_picture, :artist_id => @artist.id
133 OriginalPicture.stub(:show).and_return(@pic)
135 context 'つつがなく終わるとき' do
136 it 'ステータスコード200 OKを返す' do
137 get :show, :id => @pic.id
138 response.should be_success
140 it '原画モデルに単体取得を問い合わせている' do
141 OriginalPicture.should_receive(:show).exactly(1)
\r
144 it '@original_pictureにアレを取得している' do
145 get :show, :id => @pic.id
146 assigns(:original_picture).id.should eq(@pic.id)
149 it 'showテンプレートを描画する' do
150 get :show, :id => @pic.id
151 response.should render_template("show")
156 get :show, :id => @pic.id, :format => :json
157 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
160 get :show, :id => @pic.id, :format => :json
161 json = JSON.parse response.body
162 json["ext"].should match(/png/)
165 #画像送信では、send_dataにスタブをおいてテストしたいが、ここに噛ませると
166 #renderが働かず、エラーとなってしまう。そこで、原画のファイル取得部分に
167 #スタブをおいてsend_dataがデータを返す体裁でテストする。
169 it '画像モデルに画像データを問い合わせる' do
170 OriginalPicture.any_instance.should_receive(:restore).exactly(1)
\r
171 get :show, :id => @pic.id, :format => :png
174 OriginalPicture.any_instance.stub(:restore).and_return('aaa')
\r
175 get :show, :id => @pic.id, :format => :png
176 response.body.should eq 'aaa'
180 it '画像モデルに画像データを問い合わせる' do
181 OriginalPicture.any_instance.should_receive(:restore).exactly(1)
\r
182 get :show, :id => @pic.id, :format => :gif
185 OriginalPicture.any_instance.stub(:restore).and_return('bbb')
\r
186 get :show, :id => @pic.id, :format => :gif
187 response.body.should eq 'bbb'
191 it '画像モデルに画像データを問い合わせる' do
192 OriginalPicture.any_instance.should_receive(:restore).exactly(1)
\r
193 get :show, :id => @pic.id, :format => :jpeg
196 OriginalPicture.any_instance.stub(:restore).and_return('ccc')
\r
197 get :show, :id => @pic.id, :format => :jpeg
198 response.body.should eq 'ccc'
202 context '作家権限がないとき' do
207 it 'ステータスコード302 Foundを返す' do
208 get :show, :id => @pic.id
209 response.status.should eq 302
211 it 'サインインページへ遷移する' do
212 get :show, :id => @pic.id
213 response.body.should redirect_to '/users/sign_in'
217 it 'ステータスコード401 Unauthorizedを返す' do
218 get :show, :id => @pic.id, :format => :json
219 response.status.should eq 401
221 it '応答メッセージにUnauthorizedを返す' do
222 get :show, :id => @pic.id, :format => :json
223 response.message.should match(/Unauthorized/)
227 context '作家が絵師でないとき' do
229 Author.any_instance.stub(:artist?).and_return(false)
232 it 'ステータスコード302 Foundを返す' do
233 get :show, :id => @pic.id
234 response.status.should eq 302
237 get :show, :id => @pic.id
238 response.should redirect_to new_artist_path
242 it '例外403 forbiddenを返す' do
244 get :show, :id => @pic.id, :format => :json
245 }.should raise_error(ActiveRecord::Forbidden)
250 context '対象原画がないとき' do
252 OriginalPicture.unstub(:show)
255 it '例外404 not_foundを返す' do
258 }.should raise_error(ActiveRecord::RecordNotFound)
262 it '例外404 not_foundを返す' do
264 get :show, :id => 0, :format => :json
265 }.should raise_error(ActiveRecord::RecordNotFound)
269 context '他人の原画を見ようとしたとき' do
271 OriginalPicture.stub(:show).and_return(@pic)
272 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(false)
275 it '例外403 forbiddenを返す' do
277 get :show, :id => @pic.id
278 }.should raise_error(ActiveRecord::Forbidden)
282 it '例外403 forbiddenを返す' do
284 get :show, :id => @pic.id, :format => :json
285 }.should raise_error(ActiveRecord::Forbidden)
292 describe '新規作成フォーム表示に於いて' do
296 context 'つつがなく終わるとき' do
297 it 'ステータスコード200 OKを返す' do
299 response.should be_success
301 it '@original_pictureに新規データを用意している' do
303 assigns(:original_picture).should be_a_new(OriginalPicture)
305 it '原画モデルにデフォルト値補充を依頼している' do
306 OriginalPicture.any_instance.should_receive(:supply_default).exactly(1)
\r
310 it 'ページテンプレートnewを描画する' do
312 response.should render_template("new")
316 it '部分テンプレートnew.jsを描画する' do
317 get :new, :format => :js
318 response.should render_template("new")
322 context '作家権限がないとき' do
327 it 'ステータスコード302 Foundを返す' do
329 response.status.should eq 302
331 it 'サインインページへ遷移する' do
333 response.body.should redirect_to '/users/sign_in'
337 it 'ステータスコード401 Unauthorizedを返す' do
338 get :new, :format => :js
339 response.status.should eq 401
341 it '応答メッセージにUnauthorizedを返す' do
342 get :new, :format => :js
343 response.message.should match(/Unauthorized/)
347 context '作家が絵師でないとき' do
349 Author.any_instance.stub(:artist?).and_return(false)
352 it 'ステータスコード302 Foundを返す' do
354 response.status.should eq 302
358 response.should redirect_to new_artist_path
362 it 'ステータスコード200 Okを返す' do
363 get :new, :format => :js
364 response.status.should eq 200
366 it '絵師登録部分テンプレートartists/new.jsを描画する' do
367 get :new, :format => :js
368 response.should render_template("artists/new")
374 describe '新規作成に於いて' do
378 context 'つつがなく終わるとき' do
380 OriginalPicture.any_instance.should_receive(:save).exactly(1)
381 post :create, :original_picture => Factory.attributes_for(:original_picture)
383 it "@original_pictureに作成された原画を保持していて、それがDBにある" do
384 post :create, :original_picture => Factory.attributes_for(:original_picture)
385 assigns(:original_picture).should be_a(OriginalPicture)
386 assigns(:original_picture).should be_persisted
389 it 'ステータスコード302 Foundを返す' do
390 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
391 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
392 post :create, :original_picture => Factory.attributes_for(:original_picture)
393 response.status.should eq 302
395 it '作成された原画の表示ページへ遷移する' do
396 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
397 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
398 post :create, :original_picture => Factory.attributes_for(:original_picture)
399 response.should redirect_to(OriginalPicture.last)
403 it 'ステータスコード200 OKを返す' do
404 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
405 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
406 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
407 response.should be_success
409 it '作成された原画をjsonデータで返す' do
410 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
411 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
412 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
413 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
416 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
417 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
418 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
419 json = JSON.parse response.body
420 json["ext"].should match(/png/)
424 context '作家権限がないとき' do
429 it 'ステータスコード302 Foundを返す' do
430 post :create, :original_picture => Factory.attributes_for(:original_picture)
431 response.status.should eq 302
433 it 'サインインページへ遷移する' do
434 post :create, :original_picture => Factory.attributes_for(:original_picture)
435 response.body.should redirect_to '/users/sign_in'
439 it 'ステータスコード401 Unauthorizedを返す' do
440 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
441 response.status.should eq 401
443 it '応答メッセージにUnauthorizedを返す' do
444 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
445 response.message.should match(/Unauthorized/)
449 context '作家が絵師でないとき' do
451 Author.any_instance.stub(:artist?).and_return(false)
454 it 'ステータスコード302 Foundを返す' do
455 post :create, :original_picture => Factory.attributes_for(:original_picture)
456 response.status.should eq 302
459 post :create, :original_picture => Factory.attributes_for(:original_picture)
460 response.should redirect_to new_artist_path
464 it '例外403 forbiddenを返す' do
466 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
467 }.should raise_error(ActiveRecord::Forbidden)
471 context '検証、保存に失敗した' do
473 OriginalPicture.any_instance.stub(:save).and_return(false)
475 it "未保存のコミックを保持している" do
476 post :create, :original_picture => Factory.attributes_for(:original_picture)
477 assigns(:original_picture).should be_a_new(OriginalPicture)
480 it 'ステータスコード200 OKを返す' do
481 post :create, :original_picture => Factory.attributes_for(:original_picture)
482 response.status.should eq 200
485 post :create, :original_picture => Factory.attributes_for(:original_picture)
486 response.should render_template("new")
490 it 'ステータスコード422 unprocessable_entity を返す' do
491 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
492 response.status.should eq 422
494 it '応答メッセージUnprocessable Entityを返す' do
495 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
496 response.message.should match(/Unprocessable/)
502 describe '編集フォーム表示に於いて' do
504 @pic = Factory :original_picture, :artist_id => @artist.id
506 OriginalPicture.stub(:show).and_return(@pic)
508 context 'つつがなく終わるとき' do
509 it 'ステータスコード200 OKを返す' do
510 get :edit, :id => @pic.id
511 response.should be_success
513 it '原画モデルに単体取得を問い合わせている' do
514 OriginalPicture.should_receive(:show).exactly(1)
\r
515 get :edit, :id => @pic.id
517 it '@original_pictureにデータを用意している' do
518 get :edit, :id => @pic.id
519 assigns(:original_picture).should eq @pic
522 it 'ページテンプレートeditを描画する' do
523 get :edit, :id => @pic.id
524 response.should render_template("edit")
528 it '部分テンプレートedit.jsを描画する' do
529 get :edit, :id => @pic.id, :format => :js
530 response.should render_template("edit")
534 context '作家権限がないとき' do
539 it 'ステータスコード302 Foundを返す' do
540 get :edit, :id => @pic.id
541 response.status.should eq 302
543 it 'サインインページへ遷移する' do
544 get :edit, :id => @pic.id
545 response.body.should redirect_to '/users/sign_in'
549 it 'ステータスコード401 Unauthorizedを返す' do
550 get :edit, :id => @pic.id, :format => :js
551 response.status.should eq 401
553 it '応答メッセージにUnauthorizedを返す' do
554 get :edit, :id => @pic.id, :format => :js
555 response.message.should match(/Unauthorized/)
559 context '作家が絵師でないとき' do
561 Author.any_instance.stub(:artist?).and_return(false)
564 it 'ステータスコード302 Foundを返す' do
565 get :edit, :id => @pic.id
566 response.status.should eq 302
569 get :edit, :id => @pic.id
570 response.should redirect_to new_artist_path
574 it 'ステータスコード200 Okを返す' do
575 get :edit, :id => @pic.id, :format => :js
576 response.status.should eq 200
578 it '絵師登録部分テンプレートartists/new.jsを描画する' do
579 get :edit, :id => @pic.id, :format => :js
580 response.should render_template("artists/new")
588 @pic = Factory :original_picture, :artist_id => @artist.id
591 context '事前チェックしておく' do
592 it '原画モデルに単体取得を問い合わせている' do
593 OriginalPicture.should_receive(:show).exactly(1)
\r
594 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
597 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
598 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
599 OriginalPicture.any_instance.should_receive(:save).exactly(1)
600 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
602 it '@original_pictureにアレを取得している' do
603 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
604 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
605 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
606 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
607 assigns(:original_picture).id.should eq(@pic.id)
610 context 'つつがなく終わるとき' do
612 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
613 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
614 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture, :ext => 'jpeg')
615 OriginalPicture.find(@pic.id).ext.should eq 'jpeg'
618 it 'ステータスコード302 Foundを返す' do
619 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
620 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
621 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
622 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
623 response.status.should eq 302
625 it '更新された原画の表示ページへ遷移する' do
626 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
627 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
628 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
629 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
630 response.should redirect_to(@pic)
634 it 'ステータスコード200 OKを返す' do
635 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
636 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
637 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
638 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture), :format => :json
639 response.should be_success
642 OriginalPicture.any_instance.stub(:own?).with(any_args()).and_return(true)
643 OriginalPicture.any_instance.stub(:save).with(any_args()).and_return(true)
644 OriginalPicture.any_instance.stub(:store).with(any_args()).and_return(true)
645 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture), :format => :json
646 response.body.should match /./
650 context '作家権限がないとき' do
655 it 'ステータスコード302 Foundを返す' do
656 post :create, :original_picture => Factory.attributes_for(:original_picture)
657 response.status.should eq 302
659 it 'サインインページへ遷移する' do
660 post :create, :original_picture => Factory.attributes_for(:original_picture)
661 response.body.should redirect_to '/users/sign_in'
665 it 'ステータスコード401 Unauthorizedを返す' do
666 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
667 response.status.should eq 401
669 it '応答メッセージにUnauthorizedを返す' do
670 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
671 response.message.should match(/Unauthorized/)
675 context '作家が絵師でないとき' do
677 Author.any_instance.stub(:artist?).and_return(false)
680 it 'ステータスコード302 Foundを返す' do
681 post :create, :original_picture => Factory.attributes_for(:original_picture)
682 response.status.should eq 302
685 post :create, :original_picture => Factory.attributes_for(:original_picture)
686 response.should redirect_to new_artist_path
690 it '例外403 forbiddenを返す' do
692 post :create, :original_picture => Factory.attributes_for(:original_picture), :format => :json
693 }.should raise_error(ActiveRecord::Forbidden)
697 context '検証、保存に失敗した' do
699 OriginalPicture.any_instance.stub(:save).and_return(false)
702 it 'ステータスコード200 Okを返す' do
703 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
704 response.status.should eq 200
707 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture)
708 response.should render_template("edit")
712 it 'ステータスコード422 unprocessable_entity を返す' do
713 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture), :format => :json
714 response.status.should eq 422
716 it '応答メッセージUnprocessable Entityを返す' do
717 put :update, :id => @pic.id, :original_picture => Factory.attributes_for(:original_picture), :format => :json
718 response.message.should match(/Unprocessable/)