1 # -*- encoding: utf-8 -*-
\r
2 require 'spec_helper'
\r
4 describe ComicsController do
\r
6 @admin =FactoryGirl.create :admin
\r
7 @sp = FactoryGirl.create :system_picture
\r
8 @lg = FactoryGirl.create :license_group
\r
9 @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
\r
10 @user = FactoryGirl.create :user_yas
\r
11 @author = FactoryGirl.create :author, :user_id => @user.id
\r
14 if MagicNumber['run_mode'] == 1
\r
15 describe '一覧表示に於いて' do
\r
17 @comic = FactoryGirl.create :comic, :author_id => @user.author.id
\r
18 Comic.stub(:list).and_return([@comic, @comic, @comic])
\r
21 context '事前チェックする' do
\r
22 it '与えられたpageがセットされている' do
\r
23 get :index, :page => 5
\r
24 assigns(:page).should eq 5
\r
26 it '省略されると@pageに1値が入る' do
\r
28 assigns(:page).should eq 1
\r
30 it '与えられたpage_sizeがセットされている' do
\r
31 get :index, :page_size => 15
\r
32 assigns(:page_size).should eq 15
\r
34 it '省略されると@page_sizeにデフォルト値が入る' do
\r
36 assigns(:page_size).should eq Comic.default_page_size
\r
38 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
\r
39 get :index, :page_size => 1500
\r
40 assigns(:page_size).should eq Comic.max_page_size
\r
42 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
\r
43 get :index, :page_size => 0
\r
44 assigns(:page_size).should eq Comic.default_page_size
\r
47 context 'つつがなく終わるとき' do
\r
48 it 'ステータスコード200 OKを返す' do
\r
50 response.should be_success
\r
52 it 'コミックモデルに一覧を問い合わせている' do
\r
53 Comic.should_receive(:list).exactly(1)
\r
56 it '@comicsにリストを取得している' do
\r
58 assigns(:comics).should have_at_least(3).items
\r
61 it '@paginateにページ制御を取得している' do
\r
63 assigns(:paginate).is_a?(Kaminari::PaginatableArray).should be_true
\r
65 it 'indexテンプレートを描画する' do
\r
67 response.should render_template("index")
\r
72 get :index, :format => :json
\r
73 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
75 it 'コミックモデルにjson一覧出力オプションを問い合わせている' do
\r
76 Comic.should_receive(:list_json_opt).exactly(1)
\r
77 get :index, :format => :json
\r
79 it 'データがリスト構造になっている' do
\r
80 get :index, :format => :json
\r
81 json = JSON.parse response.body
\r
82 json.should have_at_least(3).items
\r
84 it 'リストの先頭くらいはコミックっぽいものであって欲しい' do
\r
85 get :index, :format => :json
\r
86 json = JSON.parse response.body
\r
87 json.first.has_key?("title").should be_true
\r
88 json.first.has_key?("visible").should be_true
\r
92 context 'ユーザ権限がないとき' do
\r
97 it 'ステータスコード302 Foundを返す' do
\r
99 response.status.should eq 302
\r
101 it 'サインインページへ遷移する' do
\r
103 response.should redirect_to '/users/sign_in'
\r
106 context 'json形式' do
\r
107 it 'ステータスコード401 Unauthorizedを返す' do
\r
108 get :index, :format => :json
\r
109 response.status.should eq 401
\r
111 it '応答メッセージにUnauthorizedを返す' do
\r
112 get :index, :format => :json
\r
113 response.message.should match(/Unauthorized/)
\r
117 context 'ユーザ権限はないが管理者権限があるとき' do
\r
122 it 'ステータスコード200 OKを返す' do
\r
124 response.should be_success
\r
127 context 'ユーザだが作家登録していないとき' do
\r
131 context 'html形式' do
\r
132 it 'ステータスコード200 OKを返す' do
\r
134 response.should be_success
\r
140 describe '単体表示に於いて' do
\r
142 @comic = FactoryGirl.create :comic, :author_id => @user.author.id, :title => 'normal'
\r
143 Comic.stub(:show).and_return(@comic)
\r
146 context 'つつがなく終わるとき' do
\r
147 it 'ステータスコード200 OKを返す' do
\r
148 get :show, :id => @comic.id
\r
149 response.should be_success
\r
151 it 'コミックモデルに単体取得を問い合わせている' do
\r
152 Comic.should_receive(:show).exactly(1)
\r
155 it '@comicにアレを取得している' do
\r
156 get :show, :id => @comic.id
\r
157 assigns(:comic).id.should eq(@comic.id)
\r
159 context 'html形式' do
\r
160 it 'showテンプレートを描画する' do
\r
161 get :show, :id => @comic.id
\r
162 response.should render_template("show")
\r
165 context 'json形式' do
\r
167 get :show, :id => @comic.id, :format => :json
\r
168 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
170 it 'コミックモデルにjson単体出力オプションを問い合わせている' do
\r
171 Comic.should_receive(:show_json_opt).exactly(1)
\r
172 get :show, :id => @comic.id, :format => :json
\r
174 it 'データがアレになっている' do
\r
175 get :show, :id => @comic.id, :format => :json
\r
176 json = JSON.parse response.body
\r
177 json["title"].should match(/normal/)
\r
178 json["visible"].should_not be_nil
\r
182 context 'ユーザ権限がないとき' do
\r
186 context 'html形式' do
\r
187 it 'ステータスコード302 Foundを返す' do
\r
188 get :show, :id => @comic.id
\r
189 response.status.should eq 302
\r
191 it 'サインインページへ遷移する' do
\r
192 get :show, :id => @comic.id
\r
193 response.body.should redirect_to '/users/sign_in'
\r
196 context 'json形式' do
\r
197 it 'ステータスコード401 Unauthorizedを返す' do
\r
198 get :show, :id => @comic.id, :format => :json
\r
199 response.status.should eq 401
\r
201 it '応答メッセージにUnauthorizedを返す' do
\r
202 get :show, :id => @comic.id, :format => :json
\r
203 response.message.should match(/Unauthorized/)
\r
207 context 'ユーザ権限はないが管理者権限があるとき' do
\r
212 it 'ステータスコード200 OKを返す' do
\r
213 get :show, :id => @comic.id
\r
214 response.should be_success
\r
217 context 'ユーザだが作家登録していないとき' do
\r
221 context 'html形式' do
\r
222 it 'ステータスコード200 OKを返す' do
\r
223 get :show, :id => @comic.id
\r
224 response.should be_success
\r
229 context '対象コミックがないとき' do
\r
230 context 'html形式' do
\r
231 it '例外404 not_foundを返す' do
\r
233 get :show, :id => 0
\r
234 }.should raise_error(ActiveRecord::RecordNotFound)
\r
237 context 'json形式' do
\r
238 it '例外404 not_foundを返す' do
\r
240 get :show, :id => 0, :format => :json
\r
241 }.should raise_error(ActiveRecord::RecordNotFound)
\r
245 context '非公開コミックを見ようとしたとき' do
\r
246 context 'html形式' do
\r
247 it '例外403 forbiddenを返す' do
\r
248 Comic.any_instance.stub(:visible?).with(any_args()).and_return(false)
\r
249 hidden = FactoryGirl.create :hidden_comic, :author_id => @author.id
\r
251 get :show, :id => hidden
\r
252 }.should raise_error(ActiveRecord::Forbidden)
\r
255 context 'json形式' do
\r
256 it '例外403 forbiddenを返す' do
\r
257 Comic.any_instance.stub(:visible?).with(any_args()).and_return(false)
\r
258 hidden = FactoryGirl.create :hidden_comic, :author_id => @author.id
\r
260 get :show, :id => hidden, :format => :json
\r
261 }.should raise_error(ActiveRecord::Forbidden)
\r
267 describe 'コミック数取得に於いて' do
\r
269 Comic.should_receive(:visible_count).and_return(3)
\r
272 context 'つつがなく終わるとき' do
\r
273 it 'ステータスコード200 OKを返す' do
\r
274 get :count, :format => :json
\r
275 response.should be_success
\r
277 context 'json形式' do
\r
279 get :count, :format => :json
\r
280 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
282 it 'データがHash構造になっていてコミック数が1である' do
\r
283 get :count, :format => :json
\r
284 json = JSON.parse response.body
\r
285 json["count"].should == 3
\r
291 describe '新規作成フォーム表示に於いて' do
\r
295 context 'つつがなく終わるとき' do
\r
296 it 'ステータスコード200 OKを返す' do
\r
298 response.should be_success
\r
300 it '@comicに新規データを用意している' do
\r
302 assigns(:comic).should be_a_new(Comic)
\r
304 it 'コミックモデルにデフォルト値補充を依頼している' do
\r
305 Comic.any_instance.should_receive(:supply_default).exactly(1)
\r
308 context 'html形式' do
\r
309 it 'newテンプレートを描画する' do
\r
311 response.should render_template("new")
\r
315 it 'new.jsテンプレートを描画する' do
\r
316 get :new, :format => :js
\r
317 response.should render_template("new")
\r
320 context 'json形式' do
\r
322 get :new, :format => :json
\r
323 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
325 it 'コミックモデルにjson単体出力オプションを問い合わせている' do
\r
326 Comic.should_receive(:show_json_opt).exactly(1)
\r
327 get :new, :format => :json
\r
331 context 'ユーザ権限がないとき' do
\r
335 context 'html形式' do
\r
336 it 'ステータスコード302 Foundを返す' do
\r
338 response.status.should eq 302
\r
340 it 'サインインページへ遷移する' do
\r
342 response.body.should redirect_to '/users/sign_in'
\r
346 it 'ステータスコード401 Unauthorizedを返す' do
\r
347 get :new, :format => :js
\r
348 response.status.should eq 401
\r
350 it '応答メッセージにUnauthorizedを返す' do
\r
351 get :new, :format => :js
\r
352 response.message.should match(/Unauthorized/)
\r
355 context 'json形式' do
\r
356 it 'ステータスコード401 Unauthorizedを返す' do
\r
357 get :new, :format => :json
\r
358 response.status.should eq 401
\r
360 it '応答メッセージにUnauthorizedを返す' do
\r
361 get :new, :format => :json
\r
362 response.message.should match(/Unauthorized/)
\r
366 context 'ユーザ権限はないが管理者権限があるとき' do
\r
371 context 'html形式' do
\r
372 it 'ステータスコード302 Foundを返す' do
\r
374 response.status.should eq 302
\r
376 it 'サインインページへ遷移する' do
\r
378 response.body.should redirect_to '/users/sign_in'
\r
382 context 'ユーザだが作家登録していないとき' do
\r
386 context 'html形式' do
\r
387 it 'ステータスコード302 Foundを返す' do
\r
389 response.status.should eq 302
\r
391 it '作家登録ページへ遷移する' do
\r
393 response.body.should redirect_to new_author_path
\r
399 describe '新規作成に於いて' do
\r
402 @attr = FactoryGirl.attributes_for(:comic, :author_id => @author.id, :title => 'normal')
\r
404 context '事前チェックしておく' do
\r
405 it 'コミックモデルにデフォルト値補充を依頼している' do
\r
406 Comic.any_instance.should_receive(:supply_default).exactly(1)
\r
407 post :create, :comic => @attr
\r
409 it 'コミックモデルにカラム値復元を依頼している' do
\r
410 Comic.any_instance.should_receive(:attributes=).exactly(1)
\r
411 post :create, :comic => @attr
\r
413 it 'コミックモデルに上書き補充を依頼している' do
\r
414 Comic.any_instance.should_receive(:overwrite).exactly(1)
\r
415 post :create, :comic => @attr
\r
418 Comic.any_instance.should_receive(:save).exactly(1)
\r
419 post :create, :comic => @attr
\r
422 context 'つつがなく終わるとき' do
\r
423 it "@comicに作成されたコミックを保持していて、それがDBにある" do
\r
424 post :create, :comic => @attr
\r
425 assigns(:comic).should be_a(Comic)
\r
426 assigns(:comic).should be_persisted
\r
428 context 'html形式' do
\r
429 it 'ステータスコード302 Foundを返す' do
\r
430 Comic.any_instance.stub(:save).and_return(true)
\r
431 post :create, :comic => @attr
\r
432 response.status.should eq 302
\r
434 it '作成されたコミックの表示ページへ遷移する' do
\r
435 # Comic.any_instance.stub(:save).and_return(true)
\r
436 post :create, :comic => @attr
\r
437 response.should redirect_to(Comic.last)
\r
440 context 'json形式' do
\r
441 it 'ステータスコード200 OKを返す' do
\r
442 # Comic.any_instance.stub(:save).and_return(true)
\r
443 post :create, :comic => @attr, :format => :json
\r
444 response.should be_success
\r
446 it '作成されたコミックをjsonデータで返す' do
\r
447 post :create, :comic => @attr, :format => :json
\r
448 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
450 it 'データがアレになっている' do
\r
451 post :create, :comic => @attr, :format => :json
\r
452 json = JSON.parse response.body
\r
453 json["title"].should match(/normal/)
\r
454 json["visible"].should_not be_nil
\r
458 context 'ユーザ権限がないとき' do
\r
462 context 'html形式' do
\r
463 it 'ステータスコード302 Foundを返す' do
\r
464 post :create, :comic => @attr
\r
465 response.status.should eq 302
\r
467 it 'サインインページへ遷移する' do
\r
468 post :create, :comic => @attr
\r
469 response.body.should redirect_to '/users/sign_in'
\r
472 context 'json形式' do
\r
473 it 'ステータスコード401 Unauthorizedを返す' do
\r
474 post :create, :comic => @attr, :format => :json
\r
475 response.status.should eq 401
\r
477 it '応答メッセージにUnauthorizedを返す' do
\r
478 post :create, :comic => @attr, :format => :json
\r
479 response.message.should match(/Unauthorized/)
\r
483 context 'ユーザ権限はないが管理者権限があるとき' do
\r
488 context 'html形式' do
\r
489 it 'ステータスコード302 Foundを返す' do
\r
490 post :create, :comic => @attr
\r
491 response.status.should eq 302
\r
493 it 'サインインページへ遷移する' do
\r
494 post :create, :comic => @attr
\r
495 response.body.should redirect_to '/users/sign_in'
\r
499 context 'ユーザだが作家登録していないとき' do
\r
503 context 'html形式' do
\r
504 it 'ステータスコード302 Foundを返す' do
\r
505 post :create, :comic => @attr
\r
506 response.status.should eq 302
\r
508 it '作家登録ページへ遷移する' do
\r
509 post :create, :comic => @attr
\r
510 response.body.should redirect_to new_author_path
\r
514 context '検証、保存に失敗した' do
\r
516 Comic.any_instance.stub(:save).and_return(false)
\r
518 it "未保存のコミックを保持している" do
\r
519 post :create, :comic => @attr
\r
520 assigns(:comic).should be_a_new(Comic)
\r
522 context 'html形式' do
\r
523 it 'ステータスコード200 OKを返す' do
\r
524 post :create, :comic => @attr
\r
525 response.status.should eq 200
\r
528 post :create, :comic => @attr
\r
529 response.should render_template("new")
\r
532 context 'json形式' do
\r
533 it 'ステータスコード422 unprocessable_entity を返す' do
\r
534 post :create, :comic => @attr, :format => :json
\r
535 response.status.should eq 422
\r
537 it '応答メッセージUnprocessable Entityを返す' do
\r
538 post :create, :comic => @attr, :format => :json
\r
539 response.message.should match(/Unprocessable/)
\r
545 describe '編集フォーム表示に於いて' do
\r
547 @comic = FactoryGirl.create :comic, :author_id => @user.author.id
\r
549 Comic.stub(:edit).and_return(@comic)
\r
551 context 'つつがなく終わるとき' do
\r
552 it 'ステータスコード200 OKを返す' do
\r
553 get :edit, :id => @comic.id
\r
554 response.should be_success
\r
556 it 'コミックモデルに編集取得を問い合わせている' do
\r
557 Comic.should_receive(:edit).exactly(1)
\r
558 get :edit, :id => @comic.id
\r
560 it '@comicにデータを用意している' do
\r
561 get :edit, :id => @comic.id
\r
562 assigns(:comic).should eq @comic
\r
564 context 'html形式' do
\r
565 it 'editテンプレートを描画する' do
\r
566 get :edit, :id => @comic.id
\r
567 response.should render_template("edit")
\r
571 it 'edit.jsテンプレートを描画する' do
\r
572 get :edit, :id => @comic.id, :format => :js
\r
573 response.should render_template("edit")
\r
577 context 'ユーザ権限がないとき' do
\r
581 context 'html形式' do
\r
582 it 'ステータスコード302 Foundを返す' do
\r
583 get :edit, :id => @comic.id
\r
584 response.status.should eq 302
\r
586 it 'サインインページへ遷移する' do
\r
587 get :edit, :id => @comic.id
\r
588 response.body.should redirect_to '/users/sign_in'
\r
592 it 'ステータスコード401 Unauthorizedを返す' do
\r
593 get :edit, :id => @comic.id, :format => :js
\r
594 response.status.should eq 401
\r
596 it '応答メッセージにUnauthorizedを返す' do
\r
597 get :edit, :id => @comic.id, :format => :js
\r
598 response.message.should match(/Unauthorized/)
\r
602 context 'ユーザ権限はないが管理者権限があるとき' do
\r
607 context 'html形式' do
\r
608 it 'ステータスコード302 Foundを返す' do
\r
609 get :edit, :id => @comic.id
\r
610 response.status.should eq 302
\r
612 it 'サインインページへ遷移する' do
\r
613 get :edit, :id => @comic.id
\r
614 response.body.should redirect_to '/users/sign_in'
\r
618 context 'ユーザだが作家登録していないとき' do
\r
622 context 'html形式' do
\r
623 it 'ステータスコード302 Foundを返す' do
\r
624 get :edit, :id => @comic.id
\r
625 response.status.should eq 302
\r
627 it '作家登録ページへ遷移する' do
\r
628 get :edit, :id => @comic.id
\r
629 response.body.should redirect_to new_author_path
\r
635 describe '更新に於いて' do
\r
637 @comic = FactoryGirl.create :comic, :author => @author
\r
638 @attr = FactoryGirl.attributes_for(:comic, :author_id => @author.id, :title => 'updated title', :visible => 0)
\r
641 context '事前チェックしておく' do
\r
642 it 'コミックモデルに編集取得を問い合わせている' do
\r
643 Comic.stub(:edit).with(any_args()).and_return @comic
\r
644 Comic.should_receive(:edit).exactly(1)
\r
645 put :update, :id => @comic.id, :comic => @attr
\r
647 it 'コミックモデルにカラム値復元を依頼している' do
\r
648 Comic.any_instance.should_receive(:attributes=).exactly(1)
\r
649 put :update, :id => @comic.id, :comic => @attr
\r
651 it 'コミックモデルに上書き補充を依頼している' do
\r
652 Comic.any_instance.should_receive(:overwrite).exactly(1)
\r
653 put :update, :id => @comic.id, :comic => @attr
\r
655 it 'モデルに更新を依頼する' do
\r
656 Comic.any_instance.stub(:save).with(any_args).and_return true
\r
657 Comic.any_instance.should_receive(:save).exactly(1)
\r
658 put :update, :id => @comic.id, :comic => @attr
\r
660 it '@comicにアレを取得している' do
\r
661 put :update, :id => @comic.id, :comic => @attr
\r
662 assigns(:comic).id.should eq(@comic.id)
\r
665 context 'つつがなく終わるとき' do
\r
667 put :update, :id => @comic.id, :comic => @attr
\r
668 Comic.find(@comic.id).visible.should eq 0
\r
670 context 'html形式' do
\r
671 it 'ステータスコード302 Foundを返す' do
\r
672 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
673 put :update, :id => @comic.id, :comic => @attr
\r
674 response.status.should eq 302
\r
676 it '更新されたコミックの表示ページへ遷移する' do
\r
677 put :update, :id => @comic.id, :comic => @attr
\r
678 response.should redirect_to(@comic)
\r
681 context 'json形式' do
\r
682 it 'ステータスコード200 OKを返す' do
\r
683 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
684 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
685 response.should be_success
\r
687 it 'ページ本体は特に返さない' do
\r
688 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
689 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
690 response.body.should match /./
\r
694 context 'ユーザ権限がないとき' do
\r
698 context 'html形式' do
\r
699 it 'ステータスコード302 Foundを返す' do
\r
700 put :update, :id => @comic.id, :comic => @attr
\r
701 response.status.should eq 302
\r
703 it 'サインインページへ遷移する' do
\r
704 put :update, :id => @comic.id, :comic => @attr
\r
705 response.body.should redirect_to '/users/sign_in'
\r
708 context 'json形式' do
\r
709 it '応答メッセージにUnauthorizedを返す' do
\r
710 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
711 response.message.should match(/Unauthorized/)
\r
715 context 'ユーザ権限はないが管理者権限があるとき' do
\r
720 context 'html形式' do
\r
721 it 'ステータスコード302 Foundを返す' do
\r
722 put :update, :id => @comic.id, :comic => @attr
\r
723 response.status.should eq 302
\r
725 it 'サインインページへ遷移する' do
\r
726 put :update, :id => @comic.id, :comic => @attr
\r
727 response.body.should redirect_to '/users/sign_in'
\r
731 context 'ユーザだが作家登録していないとき' do
\r
735 context 'html形式' do
\r
736 it 'ステータスコード302 Foundを返す' do
\r
737 put :update, :id => @comic.id, :comic => @attr
\r
738 response.status.should eq 302
\r
740 it '作家登録ページへ遷移する' do
\r
741 put :update, :id => @comic.id, :comic => @attr
\r
742 response.body.should redirect_to new_author_path
\r
746 context '検証、保存に失敗したとき' do
\r
748 Comic.any_instance.stub(:save).and_return(false)
\r
750 context 'html形式' do
\r
751 it 'ステータスコード200 Okを返す' do
\r
752 put :update, :id => @comic.id, :comic => @attr
\r
753 response.status.should eq 200
\r
756 put :update, :id => @comic.id, :comic => @attr
\r
757 response.should render_template("edit")
\r
760 context 'json形式' do
\r
761 it 'ステータスコード422 unprocessable_entity を返す' do
\r
762 Comic.any_instance.stub(:save).and_return(false)
\r
763 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
764 response.status.should eq 422
\r
766 it '応答メッセージUnprocessable Entityを返す' do
\r
767 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
768 response.message.should match(/Unprocessable/)
\r
774 describe '削除に於いて' do
\r
776 @comic = FactoryGirl.create :comic, :author => @author
\r
779 context '事前チェックしておく' do
\r
781 Comic.stub(:edit).with(any_args()).and_return @comic
\r
782 Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)
\r
784 it 'コミックモデルに編集取得を問い合わせている' do
\r
785 Comic.should_receive(:edit).exactly(1)
\r
786 delete :destroy, :id => @comic.id
\r
788 it 'モデルに削除を依頼する' do
\r
789 Comic.any_instance.should_receive(:destroy_with_story).exactly(1)
\r
790 delete :destroy, :id => @comic.id
\r
792 it '@comicにアレを取得している' do
\r
793 delete :destroy, :id => @comic.id
\r
794 assigns(:comic).id.should eq(@comic.id)
\r
797 context 'つつがなく終わるとき' do
\r
800 delete :destroy, :id => @comic.id
\r
801 }.should change Comic, :count
\r
803 context 'html形式' do
\r
805 Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)
\r
807 it 'ステータスコード302 Foundを返す' do
\r
808 delete :destroy, :id => @comic.id
\r
809 response.status.should eq 302
\r
811 it 'マイコミックの一覧ページへ遷移する' do
\r
812 delete :destroy, :id => @comic.id
\r
813 response.should redirect_to('/home/comics')
\r
816 context 'json形式' do
\r
818 Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)
\r
820 it 'ステータスコード200 OKを返す' do
\r
821 delete :destroy, :id => @comic.id, :format => :json
\r
822 response.should be_success
\r
824 it 'ページ本体は特に返さない' do
\r
825 delete :destroy, :id => @comic.id, :format => :json
\r
826 response.body.should match /./
\r
830 context 'ユーザ権限がないとき' do
\r
834 context 'html形式' do
\r
835 it 'ステータスコード302 Foundを返す' do
\r
836 delete :destroy, :id => @comic.id
\r
837 response.status.should eq 302
\r
839 it 'サインインページへ遷移する' do
\r
840 delete :destroy, :id => @comic.id
\r
841 response.body.should redirect_to '/users/sign_in'
\r
844 context 'json形式' do
\r
845 it '応答メッセージにUnauthorizedを返す' do
\r
846 delete :destroy, :id => @comic.id, :format => :json
\r
847 response.message.should match(/Unauthorized/)
\r
851 context 'ユーザ権限はないが管理者権限があるとき' do
\r
856 context 'html形式' do
\r
857 it 'ステータスコード302 Foundを返す' do
\r
858 delete :destroy, :id => @comic.id
\r
859 response.status.should eq 302
\r
861 it 'サインインページへ遷移する' do
\r
862 delete :destroy, :id => @comic.id
\r
863 response.body.should redirect_to '/users/sign_in'
\r
867 context 'ユーザだが作家登録していないとき' do
\r
871 context 'html形式' do
\r
872 it 'ステータスコード302 Foundを返す' do
\r
873 delete :destroy, :id => @comic.id
\r
874 response.status.should eq 302
\r
876 it '作家登録ページへ遷移する' do
\r
877 delete :destroy, :id => @comic.id
\r
878 response.body.should redirect_to new_author_path
\r
882 context '削除に失敗したとき' do
\r
884 Comic.any_instance.stub(:destroy_with_story).and_return(false)
\r
886 context 'html形式' do
\r
887 it 'ステータスコード302 Foundを返す' do
\r
888 delete :destroy, :id => @comic.id
\r
889 response.status.should eq 302
\r
891 it 'そのコミックの詳細ページへ遷移する' do
\r
892 delete :destroy, :id => @comic.id
\r
893 response.should redirect_to(comic_path(@comic))
\r
896 context 'json形式' do
\r
897 it 'ステータスコード422 unprocessable_entity を返す' do
\r
898 delete :destroy, :id => @comic.id, :format => :json
\r
899 response.status.should eq 422
\r
901 it '応答メッセージUnprocessable Entityを返す' do
\r
902 delete :destroy, :id => @comic.id, :format => :json
\r
903 response.message.should match(/Unprocessable/)
\r
910 describe '一覧表示に於いて' do
\r
912 @comic = FactoryGirl.create :comic, :author_id => @user.author.id
\r
913 Comic.stub(:list).and_return([@comic, @comic, @comic])
\r
916 context 'つつがなく終わるとき' do
\r
917 it 'ステータスコード200 OKを返す' do
\r
919 response.should be_success
\r
921 context 'html形式' do
\r
922 it 'indexテンプレートを描画する' do
\r
924 response.should render_template("index")
\r
927 context 'json形式' do
\r
929 get :index, :format => :json
\r
930 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
934 context 'ユーザ権限がないとき' do
\r
938 it 'ステータスコード200 OKを返す' do
\r
940 response.should be_success
\r
942 context 'html形式' do
\r
943 it 'indexテンプレートを描画する' do
\r
945 response.should render_template("index")
\r
948 context 'json形式' do
\r
950 get :index, :format => :json
\r
951 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
957 describe '単体表示に於いて' do
\r
959 @comic = FactoryGirl.create :comic, :author_id => @user.author.id, :title => 'normal'
\r
960 Comic.stub(:show).and_return(@comic)
\r
963 context 'つつがなく終わるとき' do
\r
964 it 'ステータスコード200 OKを返す' do
\r
965 get :show, :id => @comic.id
\r
966 response.should be_success
\r
968 context 'html形式' do
\r
969 it 'showテンプレートを描画する' do
\r
970 get :show, :id => @comic.id
\r
971 response.should render_template("show")
\r
974 context 'json形式' do
\r
976 get :show, :id => @comic.id, :format => :json
\r
977 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
981 context 'ユーザ権限がないとき' do
\r
985 it 'ステータスコード200 OKを返す' do
\r
986 get :show, :id => @comic.id
\r
987 response.should be_success
\r
989 context 'html形式' do
\r
990 it 'showテンプレートを描画する' do
\r
991 get :show, :id => @comic.id
\r
992 response.should render_template("show")
\r
995 context 'json形式' do
\r
997 get :show, :id => @comic.id, :format => :json
\r
998 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1003 describe 'コミック数取得に於いて' do
\r
1005 Comic.should_receive(:visible_count).and_return(3)
\r
1008 context 'つつがなく終わるとき' do
\r
1009 it 'ステータスコード200 OKを返す' do
\r
1010 get :count, :format => :json
\r
1011 response.should be_success
\r
1013 context 'json形式' do
\r
1014 it 'jsonデータを返す' do
\r
1015 get :count, :format => :json
\r
1016 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1022 describe '新規作成フォーム表示に於いて' do
\r
1026 context 'つつがなく終わるとき' do
\r
1027 it 'ステータスコード200 OKを返す' do
\r
1029 response.should be_success
\r
1031 context 'html形式' do
\r
1032 it 'newテンプレートを描画する' do
\r
1034 response.should render_template("new")
\r
1038 it 'new.jsテンプレートを描画する' do
\r
1039 get :new, :format => :js
\r
1040 response.should render_template("new")
\r
1043 context 'json形式' do
\r
1044 it 'jsonデータを返す' do
\r
1045 get :new, :format => :json
\r
1046 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1050 context 'ユーザ権限がないとき' do
\r
1054 context 'html形式' do
\r
1055 it 'ステータスコード302 Foundを返す' do
\r
1057 response.status.should eq 302
\r
1059 it 'サインインページへ遷移する' do
\r
1061 response.body.should redirect_to '/users/sign_in'
\r
1065 it 'ステータスコード401 Unauthorizedを返す' do
\r
1066 get :new, :format => :js
\r
1067 response.status.should eq 401
\r
1069 it '応答メッセージにUnauthorizedを返す' do
\r
1070 get :new, :format => :js
\r
1071 response.message.should match(/Unauthorized/)
\r
1074 context 'json形式' do
\r
1075 it 'ステータスコード401 Unauthorizedを返す' do
\r
1076 get :new, :format => :json
\r
1077 response.status.should eq 401
\r
1079 it '応答メッセージにUnauthorizedを返す' do
\r
1080 get :new, :format => :json
\r
1081 response.message.should match(/Unauthorized/)
\r
1087 describe '新規作成に於いて' do
\r
1090 @attr = FactoryGirl.attributes_for(:comic, :author_id => @author.id, :title => 'normal')
\r
1092 context 'つつがなく終わるとき' do
\r
1093 context 'html形式' do
\r
1094 it 'ステータスコード302 Foundを返す' do
\r
1095 Comic.any_instance.stub(:save).and_return(true)
\r
1096 post :create, :comic => @attr
\r
1097 response.status.should eq 302
\r
1099 it '作成されたコミックの表示ページへ遷移する' do
\r
1100 # Comic.any_instance.stub(:save).and_return(true)
\r
1101 post :create, :comic => @attr
\r
1102 response.should redirect_to(Comic.last)
\r
1105 context 'json形式' do
\r
1106 it 'ステータスコード200 OKを返す' do
\r
1107 # Comic.any_instance.stub(:save).and_return(true)
\r
1108 post :create, :comic => @attr, :format => :json
\r
1109 response.should be_success
\r
1111 it '作成されたコミックをjsonデータで返す' do
\r
1112 post :create, :comic => @attr, :format => :json
\r
1113 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1117 context 'ユーザ権限がないとき' do
\r
1121 context 'html形式' do
\r
1122 it 'ステータスコード302 Foundを返す' do
\r
1123 post :create, :comic => @attr
\r
1124 response.status.should eq 302
\r
1126 it 'サインインページへ遷移する' do
\r
1127 post :create, :comic => @attr
\r
1128 response.body.should redirect_to '/users/sign_in'
\r
1131 context 'json形式' do
\r
1132 it 'ステータスコード401 Unauthorizedを返す' do
\r
1133 post :create, :comic => @attr, :format => :json
\r
1134 response.status.should eq 401
\r
1136 it '応答メッセージにUnauthorizedを返す' do
\r
1137 post :create, :comic => @attr, :format => :json
\r
1138 response.message.should match(/Unauthorized/)
\r
1144 describe '編集フォーム表示に於いて' do
\r
1146 @comic = FactoryGirl.create :comic, :author_id => @user.author.id
\r
1148 Comic.stub(:edit).and_return(@comic)
\r
1150 context 'つつがなく終わるとき' do
\r
1151 it 'ステータスコード200 OKを返す' do
\r
1152 get :edit, :id => @comic.id
\r
1153 response.should be_success
\r
1155 context 'html形式' do
\r
1156 it 'editテンプレートを描画する' do
\r
1157 get :edit, :id => @comic.id
\r
1158 response.should render_template("edit")
\r
1162 it 'edit.jsテンプレートを描画する' do
\r
1163 get :edit, :id => @comic.id, :format => :js
\r
1164 response.should render_template("edit")
\r
1168 context 'ユーザ権限がないとき' do
\r
1172 context 'html形式' do
\r
1173 it 'ステータスコード302 Foundを返す' do
\r
1174 get :edit, :id => @comic.id
\r
1175 response.status.should eq 302
\r
1177 it 'サインインページへ遷移する' do
\r
1178 get :edit, :id => @comic.id
\r
1179 response.body.should redirect_to '/users/sign_in'
\r
1183 it 'ステータスコード401 Unauthorizedを返す' do
\r
1184 get :edit, :id => @comic.id, :format => :js
\r
1185 response.status.should eq 401
\r
1187 it '応答メッセージにUnauthorizedを返す' do
\r
1188 get :edit, :id => @comic.id, :format => :js
\r
1189 response.message.should match(/Unauthorized/)
\r
1195 describe '更新に於いて' do
\r
1197 @comic = FactoryGirl.create :comic, :author => @author
\r
1198 @attr = FactoryGirl.attributes_for(:comic, :author_id => @author.id, :title => 'updated title', :visible => 0)
\r
1201 context 'つつがなく終わるとき' do
\r
1202 context 'html形式' do
\r
1203 it 'ステータスコード302 Foundを返す' do
\r
1204 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
1205 put :update, :id => @comic.id, :comic => @attr
\r
1206 response.status.should eq 302
\r
1208 it '更新されたコミックの表示ページへ遷移する' do
\r
1209 put :update, :id => @comic.id, :comic => @attr
\r
1210 response.should redirect_to(@comic)
\r
1213 context 'json形式' do
\r
1214 it 'ステータスコード200 OKを返す' do
\r
1215 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
1216 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
1217 response.should be_success
\r
1219 it 'ページ本体は特に返さない' do
\r
1220 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
1221 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
1222 response.body.should match /./
\r
1226 context 'ユーザ権限がないとき' do
\r
1230 it 'ステータスコード302 Foundを返す' do
\r
1231 put :update, :id => @comic.id, :comic => @attr
\r
1232 response.status.should eq 302
\r
1234 context 'html形式' do
\r
1235 it 'サインインページへ遷移する' do
\r
1236 put :update, :id => @comic.id, :comic => @attr
\r
1237 response.body.should redirect_to '/users/sign_in'
\r
1243 describe '削除に於いて' do
\r
1245 @comic = FactoryGirl.create :comic, :author => @author
\r
1248 context 'つつがなく終わるとき' do
\r
1249 context 'html形式' do
\r
1251 Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)
\r
1253 it 'ステータスコード302 Foundを返す' do
\r
1254 delete :destroy, :id => @comic.id
\r
1255 response.status.should eq 302
\r
1257 it 'マイコミックの一覧ページへ遷移する' do
\r
1258 delete :destroy, :id => @comic.id
\r
1259 response.should redirect_to('/home/comic')
\r
1262 context 'json形式' do
\r
1264 Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)
\r
1266 it 'ステータスコード200 OKを返す' do
\r
1267 delete :destroy, :id => @comic.id, :format => :json
\r
1268 response.should be_success
\r
1270 it 'ページ本体は特に返さない' do
\r
1271 delete :destroy, :id => @comic.id, :format => :json
\r
1272 response.body.should match /./
\r
1276 context 'ユーザ権限がないとき' do
\r
1280 it 'ステータスコード302 Foundを返す' do
\r
1281 delete :destroy, :id => @comic.id
\r
1282 response.status.should eq 302
\r
1284 context 'html形式' do
\r
1285 it 'サインインページへ遷移する' do
\r
1286 delete :destroy, :id => @comic.id
\r
1287 response.body.should redirect_to '/users/sign_in'
\r
1290 context 'json形式' do
\r
1291 it '応答メッセージにUnauthorizedを返す' do
\r
1292 delete :destroy, :id => @comic.id, :format => :json
\r
1293 response.message.should match(/Unauthorized/)
\r