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 'indexテンプレートを描画する' do
\r
63 response.should render_template("index")
\r
68 get :index, :format => :json
\r
69 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
71 it 'コミックモデルにjson一覧出力オプションを問い合わせている' do
\r
72 Comic.should_receive(:list_json_opt).exactly(1)
\r
73 get :index, :format => :json
\r
75 it 'データがリスト構造になっている' do
\r
76 get :index, :format => :json
\r
77 json = JSON.parse response.body
\r
78 json.should have_at_least(3).items
\r
80 it 'リストの先頭くらいはコミックっぽいものであって欲しい' do
\r
81 get :index, :format => :json
\r
82 json = JSON.parse response.body
\r
83 json.first.has_key?("title").should be_true
\r
84 json.first.has_key?("visible").should be_true
\r
88 context 'ユーザ権限がないとき' do
\r
93 it 'ステータスコード302 Foundを返す' do
\r
95 response.status.should eq 302
\r
97 it 'サインインページへ遷移する' do
\r
99 response.should redirect_to '/users/sign_in'
\r
102 context 'json形式' do
\r
103 it 'ステータスコード401 Unauthorizedを返す' do
\r
104 get :index, :format => :json
\r
105 response.status.should eq 401
\r
107 it '応答メッセージにUnauthorizedを返す' do
\r
108 get :index, :format => :json
\r
109 response.message.should match(/Unauthorized/)
\r
113 context 'ユーザ権限はないが管理者権限があるとき' do
\r
118 it 'ステータスコード200 OKを返す' do
\r
120 response.should be_success
\r
123 context 'ユーザだが作家登録していないとき' do
\r
127 context 'html形式' do
\r
128 it 'ステータスコード200 OKを返す' do
\r
130 response.should be_success
\r
136 describe '単体表示に於いて' do
\r
138 @comic = FactoryGirl.create :comic, :author_id => @user.author.id, :title => 'normal'
\r
139 Comic.stub(:show).and_return(@comic)
\r
142 context 'つつがなく終わるとき' do
\r
143 it 'ステータスコード200 OKを返す' do
\r
144 get :show, :id => @comic.id
\r
145 response.should be_success
\r
147 it 'コミックモデルに単体取得を問い合わせている' do
\r
148 Comic.should_receive(:show).exactly(1)
\r
151 it '@comicにアレを取得している' do
\r
152 get :show, :id => @comic.id
\r
153 assigns(:comic).id.should eq(@comic.id)
\r
155 context 'html形式' do
\r
156 it 'showテンプレートを描画する' do
\r
157 get :show, :id => @comic.id
\r
158 response.should render_template("show")
\r
161 context 'json形式' do
\r
163 get :show, :id => @comic.id, :format => :json
\r
164 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
166 it 'コミックモデルにjson単体出力オプションを問い合わせている' do
\r
167 Comic.should_receive(:show_json_opt).exactly(1)
\r
168 get :show, :id => @comic.id, :format => :json
\r
170 it 'データがアレになっている' do
\r
171 get :show, :id => @comic.id, :format => :json
\r
172 json = JSON.parse response.body
\r
173 json["title"].should match(/normal/)
\r
174 json["visible"].should_not be_nil
\r
178 context 'ユーザ権限がないとき' do
\r
182 context 'html形式' do
\r
183 it 'ステータスコード302 Foundを返す' do
\r
184 get :show, :id => @comic.id
\r
185 response.status.should eq 302
\r
187 it 'サインインページへ遷移する' do
\r
188 get :show, :id => @comic.id
\r
189 response.body.should redirect_to '/users/sign_in'
\r
192 context 'json形式' do
\r
193 it 'ステータスコード401 Unauthorizedを返す' do
\r
194 get :show, :id => @comic.id, :format => :json
\r
195 response.status.should eq 401
\r
197 it '応答メッセージにUnauthorizedを返す' do
\r
198 get :show, :id => @comic.id, :format => :json
\r
199 response.message.should match(/Unauthorized/)
\r
203 context 'ユーザ権限はないが管理者権限があるとき' do
\r
208 it 'ステータスコード200 OKを返す' do
\r
209 get :show, :id => @comic.id
\r
210 response.should be_success
\r
213 context 'ユーザだが作家登録していないとき' do
\r
217 context 'html形式' do
\r
218 it 'ステータスコード200 OKを返す' do
\r
219 get :show, :id => @comic.id
\r
220 response.should be_success
\r
225 context '対象コミックがないとき' do
\r
226 context 'html形式' do
\r
227 it '例外404 not_foundを返す' do
\r
229 get :show, :id => 0
\r
230 }.should raise_error(ActiveRecord::RecordNotFound)
\r
233 context 'json形式' do
\r
234 it '例外404 not_foundを返す' do
\r
236 get :show, :id => 0, :format => :json
\r
237 }.should raise_error(ActiveRecord::RecordNotFound)
\r
241 context '非公開コミックを見ようとしたとき' do
\r
242 context 'html形式' do
\r
243 it '例外403 forbiddenを返す' do
\r
244 Comic.any_instance.stub(:visible?).with(any_args()).and_return(false)
\r
245 hidden = FactoryGirl.create :hidden_comic, :author_id => @author.id
\r
247 get :show, :id => hidden
\r
248 }.should raise_error(ActiveRecord::Forbidden)
\r
251 context 'json形式' do
\r
252 it '例外403 forbiddenを返す' do
\r
253 Comic.any_instance.stub(:visible?).with(any_args()).and_return(false)
\r
254 hidden = FactoryGirl.create :hidden_comic, :author_id => @author.id
\r
256 get :show, :id => hidden, :format => :json
\r
257 }.should raise_error(ActiveRecord::Forbidden)
\r
263 describe 'コミック数取得に於いて' do
\r
265 Comic.should_receive(:visible_count).and_return(3)
\r
268 context 'つつがなく終わるとき' do
\r
269 it 'ステータスコード200 OKを返す' do
\r
270 get :count, :format => :json
\r
271 response.should be_success
\r
273 context 'json形式' do
\r
275 get :count, :format => :json
\r
276 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
278 it 'データがHash構造になっていてコミック数が1である' do
\r
279 get :count, :format => :json
\r
280 json = JSON.parse response.body
\r
281 json["count"].should == 3
\r
287 describe '新規作成フォーム表示に於いて' do
\r
291 context 'つつがなく終わるとき' do
\r
292 it 'ステータスコード200 OKを返す' do
\r
294 response.should be_success
\r
296 it '@comicに新規データを用意している' do
\r
298 assigns(:comic).should be_a_new(Comic)
\r
300 it 'コミックモデルにデフォルト値補充を依頼している' do
\r
301 Comic.any_instance.should_receive(:supply_default).exactly(1)
\r
304 context 'html形式' do
\r
305 it 'newテンプレートを描画する' do
\r
307 response.should render_template("new")
\r
311 it 'new.jsテンプレートを描画する' do
\r
312 get :new, :format => :js
\r
313 response.should render_template("new")
\r
316 context 'json形式' do
\r
318 get :new, :format => :json
\r
319 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
321 it 'コミックモデルにjson単体出力オプションを問い合わせている' do
\r
322 Comic.should_receive(:show_json_opt).exactly(1)
\r
323 get :new, :format => :json
\r
327 context 'ユーザ権限がないとき' do
\r
331 context 'html形式' do
\r
332 it 'ステータスコード302 Foundを返す' do
\r
334 response.status.should eq 302
\r
336 it 'サインインページへ遷移する' do
\r
338 response.body.should redirect_to '/users/sign_in'
\r
342 it 'ステータスコード401 Unauthorizedを返す' do
\r
343 get :new, :format => :js
\r
344 response.status.should eq 401
\r
346 it '応答メッセージにUnauthorizedを返す' do
\r
347 get :new, :format => :js
\r
348 response.message.should match(/Unauthorized/)
\r
351 context 'json形式' do
\r
352 it 'ステータスコード401 Unauthorizedを返す' do
\r
353 get :new, :format => :json
\r
354 response.status.should eq 401
\r
356 it '応答メッセージにUnauthorizedを返す' do
\r
357 get :new, :format => :json
\r
358 response.message.should match(/Unauthorized/)
\r
362 context 'ユーザ権限はないが管理者権限があるとき' do
\r
367 context 'html形式' do
\r
368 it 'ステータスコード302 Foundを返す' do
\r
370 response.status.should eq 302
\r
372 it 'サインインページへ遷移する' do
\r
374 response.body.should redirect_to '/users/sign_in'
\r
378 context 'ユーザだが作家登録していないとき' do
\r
382 context 'html形式' do
\r
383 it 'ステータスコード302 Foundを返す' do
\r
385 response.status.should eq 302
\r
387 it '作家登録ページへ遷移する' do
\r
389 response.body.should redirect_to new_author_path
\r
395 describe '新規作成に於いて' do
\r
398 @attr = FactoryGirl.attributes_for(:comic, :author_id => @author.id, :title => 'normal')
\r
400 context '事前チェックしておく' do
\r
401 it 'コミックモデルにデフォルト値補充を依頼している' do
\r
402 Comic.any_instance.should_receive(:supply_default).exactly(1)
\r
403 post :create, :comic => @attr
\r
405 it 'コミックモデルにカラム値復元を依頼している' do
\r
406 Comic.any_instance.should_receive(:attributes=).exactly(1)
\r
407 post :create, :comic => @attr
\r
409 it 'コミックモデルに上書き補充を依頼している' do
\r
410 Comic.any_instance.should_receive(:overwrite).exactly(1)
\r
411 post :create, :comic => @attr
\r
414 Comic.any_instance.should_receive(:save).exactly(1)
\r
415 post :create, :comic => @attr
\r
418 context 'つつがなく終わるとき' do
\r
419 it "@comicに作成されたコミックを保持していて、それがDBにある" do
\r
420 post :create, :comic => @attr
\r
421 assigns(:comic).should be_a(Comic)
\r
422 assigns(:comic).should be_persisted
\r
424 context 'html形式' do
\r
425 it 'ステータスコード302 Foundを返す' do
\r
426 Comic.any_instance.stub(:save).and_return(true)
\r
427 post :create, :comic => @attr
\r
428 response.status.should eq 302
\r
430 it '作成されたコミックの表示ページへ遷移する' do
\r
431 # Comic.any_instance.stub(:save).and_return(true)
\r
432 post :create, :comic => @attr
\r
433 response.should redirect_to(Comic.last)
\r
436 context 'json形式' do
\r
437 it 'ステータスコード200 OKを返す' do
\r
438 # Comic.any_instance.stub(:save).and_return(true)
\r
439 post :create, :comic => @attr, :format => :json
\r
440 response.should be_success
\r
442 it '作成されたコミックをjsonデータで返す' do
\r
443 post :create, :comic => @attr, :format => :json
\r
444 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
446 it 'データがアレになっている' do
\r
447 post :create, :comic => @attr, :format => :json
\r
448 json = JSON.parse response.body
\r
449 json["title"].should match(/normal/)
\r
450 json["visible"].should_not be_nil
\r
454 context 'ユーザ権限がないとき' do
\r
458 context 'html形式' do
\r
459 it 'ステータスコード302 Foundを返す' do
\r
460 post :create, :comic => @attr
\r
461 response.status.should eq 302
\r
463 it 'サインインページへ遷移する' do
\r
464 post :create, :comic => @attr
\r
465 response.body.should redirect_to '/users/sign_in'
\r
468 context 'json形式' do
\r
469 it 'ステータスコード401 Unauthorizedを返す' do
\r
470 post :create, :comic => @attr, :format => :json
\r
471 response.status.should eq 401
\r
473 it '応答メッセージにUnauthorizedを返す' do
\r
474 post :create, :comic => @attr, :format => :json
\r
475 response.message.should match(/Unauthorized/)
\r
479 context 'ユーザ権限はないが管理者権限があるとき' do
\r
484 context 'html形式' do
\r
485 it 'ステータスコード302 Foundを返す' do
\r
486 post :create, :comic => @attr
\r
487 response.status.should eq 302
\r
489 it 'サインインページへ遷移する' do
\r
490 post :create, :comic => @attr
\r
491 response.body.should redirect_to '/users/sign_in'
\r
495 context 'ユーザだが作家登録していないとき' do
\r
499 context 'html形式' do
\r
500 it 'ステータスコード302 Foundを返す' do
\r
501 post :create, :comic => @attr
\r
502 response.status.should eq 302
\r
504 it '作家登録ページへ遷移する' do
\r
505 post :create, :comic => @attr
\r
506 response.body.should redirect_to new_author_path
\r
510 context '検証、保存に失敗した' do
\r
512 Comic.any_instance.stub(:save).and_return(false)
\r
514 it "未保存のコミックを保持している" do
\r
515 post :create, :comic => @attr
\r
516 assigns(:comic).should be_a_new(Comic)
\r
518 context 'html形式' do
\r
519 it 'ステータスコード200 OKを返す' do
\r
520 post :create, :comic => @attr
\r
521 response.status.should eq 200
\r
524 post :create, :comic => @attr
\r
525 response.should render_template("new")
\r
528 context 'json形式' do
\r
529 it 'ステータスコード422 unprocessable_entity を返す' do
\r
530 post :create, :comic => @attr, :format => :json
\r
531 response.status.should eq 422
\r
533 it '応答メッセージUnprocessable Entityを返す' do
\r
534 post :create, :comic => @attr, :format => :json
\r
535 response.message.should match(/Unprocessable/)
\r
541 describe '編集フォーム表示に於いて' do
\r
543 @comic = FactoryGirl.create :comic, :author_id => @user.author.id
\r
545 Comic.stub(:edit).and_return(@comic)
\r
547 context 'つつがなく終わるとき' do
\r
548 it 'ステータスコード200 OKを返す' do
\r
549 get :edit, :id => @comic.id
\r
550 response.should be_success
\r
552 it 'コミックモデルに編集取得を問い合わせている' do
\r
553 Comic.should_receive(:edit).exactly(1)
\r
554 get :edit, :id => @comic.id
\r
556 it '@comicにデータを用意している' do
\r
557 get :edit, :id => @comic.id
\r
558 assigns(:comic).should eq @comic
\r
560 context 'html形式' do
\r
561 it 'editテンプレートを描画する' do
\r
562 get :edit, :id => @comic.id
\r
563 response.should render_template("edit")
\r
567 it 'edit.jsテンプレートを描画する' do
\r
568 get :edit, :id => @comic.id, :format => :js
\r
569 response.should render_template("edit")
\r
573 context 'ユーザ権限がないとき' do
\r
577 context 'html形式' do
\r
578 it 'ステータスコード302 Foundを返す' do
\r
579 get :edit, :id => @comic.id
\r
580 response.status.should eq 302
\r
582 it 'サインインページへ遷移する' do
\r
583 get :edit, :id => @comic.id
\r
584 response.body.should redirect_to '/users/sign_in'
\r
588 it 'ステータスコード401 Unauthorizedを返す' do
\r
589 get :edit, :id => @comic.id, :format => :js
\r
590 response.status.should eq 401
\r
592 it '応答メッセージにUnauthorizedを返す' do
\r
593 get :edit, :id => @comic.id, :format => :js
\r
594 response.message.should match(/Unauthorized/)
\r
598 context 'ユーザ権限はないが管理者権限があるとき' do
\r
603 context 'html形式' do
\r
604 it 'ステータスコード302 Foundを返す' do
\r
605 get :edit, :id => @comic.id
\r
606 response.status.should eq 302
\r
608 it 'サインインページへ遷移する' do
\r
609 get :edit, :id => @comic.id
\r
610 response.body.should redirect_to '/users/sign_in'
\r
614 context 'ユーザだが作家登録していないとき' do
\r
618 context 'html形式' do
\r
619 it 'ステータスコード302 Foundを返す' do
\r
620 get :edit, :id => @comic.id
\r
621 response.status.should eq 302
\r
623 it '作家登録ページへ遷移する' do
\r
624 get :edit, :id => @comic.id
\r
625 response.body.should redirect_to new_author_path
\r
631 describe '更新に於いて' do
\r
633 @comic = FactoryGirl.create :comic, :author => @author
\r
634 @attr = FactoryGirl.attributes_for(:comic, :author_id => @author.id, :title => 'updated title', :visible => 0)
\r
637 context '事前チェックしておく' do
\r
638 it 'コミックモデルに編集取得を問い合わせている' do
\r
639 Comic.stub(:edit).with(any_args()).and_return @comic
\r
640 Comic.should_receive(:edit).exactly(1)
\r
641 put :update, :id => @comic.id, :comic => @attr
\r
643 it 'コミックモデルにカラム値復元を依頼している' do
\r
644 Comic.any_instance.should_receive(:attributes=).exactly(1)
\r
645 put :update, :id => @comic.id, :comic => @attr
\r
647 it 'コミックモデルに上書き補充を依頼している' do
\r
648 Comic.any_instance.should_receive(:overwrite).exactly(1)
\r
649 put :update, :id => @comic.id, :comic => @attr
\r
651 it 'モデルに更新を依頼する' do
\r
652 Comic.any_instance.stub(:save).with(any_args).and_return true
\r
653 Comic.any_instance.should_receive(:save).exactly(1)
\r
654 put :update, :id => @comic.id, :comic => @attr
\r
656 it '@comicにアレを取得している' do
\r
657 put :update, :id => @comic.id, :comic => @attr
\r
658 assigns(:comic).id.should eq(@comic.id)
\r
661 context 'つつがなく終わるとき' do
\r
663 put :update, :id => @comic.id, :comic => @attr
\r
664 Comic.find(@comic.id).visible.should eq 0
\r
666 context 'html形式' do
\r
667 it 'ステータスコード302 Foundを返す' do
\r
668 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
669 put :update, :id => @comic.id, :comic => @attr
\r
670 response.status.should eq 302
\r
672 it '更新されたコミックの表示ページへ遷移する' do
\r
673 put :update, :id => @comic.id, :comic => @attr
\r
674 response.should redirect_to(@comic)
\r
677 context 'json形式' do
\r
678 it 'ステータスコード200 OKを返す' do
\r
679 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
680 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
681 response.should be_success
\r
683 it 'ページ本体は特に返さない' do
\r
684 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
685 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
686 response.body.should match /./
\r
690 context 'ユーザ権限がないとき' do
\r
694 context 'html形式' do
\r
695 it 'ステータスコード302 Foundを返す' do
\r
696 put :update, :id => @comic.id, :comic => @attr
\r
697 response.status.should eq 302
\r
699 it 'サインインページへ遷移する' do
\r
700 put :update, :id => @comic.id, :comic => @attr
\r
701 response.body.should redirect_to '/users/sign_in'
\r
704 context 'json形式' do
\r
705 it '応答メッセージにUnauthorizedを返す' do
\r
706 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
707 response.message.should match(/Unauthorized/)
\r
711 context 'ユーザ権限はないが管理者権限があるとき' do
\r
716 context 'html形式' do
\r
717 it 'ステータスコード302 Foundを返す' do
\r
718 put :update, :id => @comic.id, :comic => @attr
\r
719 response.status.should eq 302
\r
721 it 'サインインページへ遷移する' do
\r
722 put :update, :id => @comic.id, :comic => @attr
\r
723 response.body.should redirect_to '/users/sign_in'
\r
727 context 'ユーザだが作家登録していないとき' do
\r
731 context 'html形式' do
\r
732 it 'ステータスコード302 Foundを返す' do
\r
733 put :update, :id => @comic.id, :comic => @attr
\r
734 response.status.should eq 302
\r
736 it '作家登録ページへ遷移する' do
\r
737 put :update, :id => @comic.id, :comic => @attr
\r
738 response.body.should redirect_to new_author_path
\r
742 context '検証、保存に失敗したとき' do
\r
744 Comic.any_instance.stub(:save).and_return(false)
\r
746 context 'html形式' do
\r
747 it 'ステータスコード200 Okを返す' do
\r
748 put :update, :id => @comic.id, :comic => @attr
\r
749 response.status.should eq 200
\r
752 put :update, :id => @comic.id, :comic => @attr
\r
753 response.should render_template("edit")
\r
756 context 'json形式' do
\r
757 it 'ステータスコード422 unprocessable_entity を返す' do
\r
758 Comic.any_instance.stub(:save).and_return(false)
\r
759 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
760 response.status.should eq 422
\r
762 it '応答メッセージUnprocessable Entityを返す' do
\r
763 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
764 response.message.should match(/Unprocessable/)
\r
770 describe '削除に於いて' do
\r
772 @comic = FactoryGirl.create :comic, :author => @author
\r
775 context '事前チェックしておく' do
\r
777 Comic.stub(:edit).with(any_args()).and_return @comic
\r
778 Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)
\r
780 it 'コミックモデルに編集取得を問い合わせている' do
\r
781 Comic.should_receive(:edit).exactly(1)
\r
782 delete :destroy, :id => @comic.id
\r
784 it 'モデルに削除を依頼する' do
\r
785 Comic.any_instance.should_receive(:destroy_with_story).exactly(1)
\r
786 delete :destroy, :id => @comic.id
\r
788 it '@comicにアレを取得している' do
\r
789 delete :destroy, :id => @comic.id
\r
790 assigns(:comic).id.should eq(@comic.id)
\r
793 context 'つつがなく終わるとき' do
\r
796 delete :destroy, :id => @comic.id
\r
797 }.should change Comic, :count
\r
799 context 'html形式' do
\r
801 Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)
\r
803 it 'ステータスコード302 Foundを返す' do
\r
804 delete :destroy, :id => @comic.id
\r
805 response.status.should eq 302
\r
807 it 'マイコミックの一覧ページへ遷移する' do
\r
808 delete :destroy, :id => @comic.id
\r
809 response.should redirect_to('/home/comic')
\r
812 context 'json形式' do
\r
814 Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)
\r
816 it 'ステータスコード200 OKを返す' do
\r
817 delete :destroy, :id => @comic.id, :format => :json
\r
818 response.should be_success
\r
820 it 'ページ本体は特に返さない' do
\r
821 delete :destroy, :id => @comic.id, :format => :json
\r
822 response.body.should match /./
\r
826 context 'ユーザ権限がないとき' do
\r
830 context 'html形式' do
\r
831 it 'ステータスコード302 Foundを返す' do
\r
832 delete :destroy, :id => @comic.id
\r
833 response.status.should eq 302
\r
835 it 'サインインページへ遷移する' do
\r
836 delete :destroy, :id => @comic.id
\r
837 response.body.should redirect_to '/users/sign_in'
\r
840 context 'json形式' do
\r
841 it '応答メッセージにUnauthorizedを返す' do
\r
842 delete :destroy, :id => @comic.id, :format => :json
\r
843 response.message.should match(/Unauthorized/)
\r
847 context 'ユーザ権限はないが管理者権限があるとき' do
\r
852 context 'html形式' do
\r
853 it 'ステータスコード302 Foundを返す' do
\r
854 delete :destroy, :id => @comic.id
\r
855 response.status.should eq 302
\r
857 it 'サインインページへ遷移する' do
\r
858 delete :destroy, :id => @comic.id
\r
859 response.body.should redirect_to '/users/sign_in'
\r
863 context 'ユーザだが作家登録していないとき' do
\r
867 context 'html形式' do
\r
868 it 'ステータスコード302 Foundを返す' do
\r
869 delete :destroy, :id => @comic.id
\r
870 response.status.should eq 302
\r
872 it '作家登録ページへ遷移する' do
\r
873 delete :destroy, :id => @comic.id
\r
874 response.body.should redirect_to new_author_path
\r
878 context '削除に失敗したとき' do
\r
880 Comic.any_instance.stub(:destroy_with_story).and_return(false)
\r
882 context 'html形式' do
\r
883 it 'ステータスコード302 Foundを返す' do
\r
884 delete :destroy, :id => @comic.id
\r
885 response.status.should eq 302
\r
887 it 'そのコミックの詳細ページへ遷移する' do
\r
888 delete :destroy, :id => @comic.id
\r
889 response.should redirect_to(comic_path(@comic))
\r
892 context 'json形式' do
\r
893 it 'ステータスコード422 unprocessable_entity を返す' do
\r
894 delete :destroy, :id => @comic.id, :format => :json
\r
895 response.status.should eq 422
\r
897 it '応答メッセージUnprocessable Entityを返す' do
\r
898 delete :destroy, :id => @comic.id, :format => :json
\r
899 response.message.should match(/Unprocessable/)
\r
906 describe '一覧表示に於いて' do
\r
908 @comic = FactoryGirl.create :comic, :author_id => @user.author.id
\r
909 Comic.stub(:list).and_return([@comic, @comic, @comic])
\r
912 context 'つつがなく終わるとき' do
\r
913 it 'ステータスコード200 OKを返す' do
\r
915 response.should be_success
\r
917 context 'html形式' do
\r
918 it 'indexテンプレートを描画する' do
\r
920 response.should render_template("index")
\r
923 context 'json形式' do
\r
925 get :index, :format => :json
\r
926 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
930 context 'ユーザ権限がないとき' do
\r
934 it 'ステータスコード200 OKを返す' do
\r
936 response.should be_success
\r
938 context 'html形式' do
\r
939 it 'indexテンプレートを描画する' do
\r
941 response.should render_template("index")
\r
944 context 'json形式' do
\r
946 get :index, :format => :json
\r
947 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
953 describe '単体表示に於いて' do
\r
955 @comic = FactoryGirl.create :comic, :author_id => @user.author.id, :title => 'normal'
\r
956 Comic.stub(:show).and_return(@comic)
\r
959 context 'つつがなく終わるとき' do
\r
960 it 'ステータスコード200 OKを返す' do
\r
961 get :show, :id => @comic.id
\r
962 response.should be_success
\r
964 context 'html形式' do
\r
965 it 'showテンプレートを描画する' do
\r
966 get :show, :id => @comic.id
\r
967 response.should render_template("show")
\r
970 context 'json形式' do
\r
972 get :show, :id => @comic.id, :format => :json
\r
973 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
977 context 'ユーザ権限がないとき' do
\r
981 it 'ステータスコード200 OKを返す' do
\r
982 get :show, :id => @comic.id
\r
983 response.should be_success
\r
985 context 'html形式' do
\r
986 it 'showテンプレートを描画する' do
\r
987 get :show, :id => @comic.id
\r
988 response.should render_template("show")
\r
991 context 'json形式' do
\r
993 get :show, :id => @comic.id, :format => :json
\r
994 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
999 describe 'コミック数取得に於いて' do
\r
1001 Comic.should_receive(:visible_count).and_return(3)
\r
1004 context 'つつがなく終わるとき' do
\r
1005 it 'ステータスコード200 OKを返す' do
\r
1006 get :count, :format => :json
\r
1007 response.should be_success
\r
1009 context 'json形式' do
\r
1010 it 'jsonデータを返す' do
\r
1011 get :count, :format => :json
\r
1012 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1018 describe '新規作成フォーム表示に於いて' do
\r
1022 context 'つつがなく終わるとき' do
\r
1023 it 'ステータスコード200 OKを返す' do
\r
1025 response.should be_success
\r
1027 context 'html形式' do
\r
1028 it 'newテンプレートを描画する' do
\r
1030 response.should render_template("new")
\r
1034 it 'new.jsテンプレートを描画する' do
\r
1035 get :new, :format => :js
\r
1036 response.should render_template("new")
\r
1039 context 'json形式' do
\r
1040 it 'jsonデータを返す' do
\r
1041 get :new, :format => :json
\r
1042 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1046 context 'ユーザ権限がないとき' do
\r
1050 context 'html形式' do
\r
1051 it 'ステータスコード302 Foundを返す' do
\r
1053 response.status.should eq 302
\r
1055 it 'サインインページへ遷移する' do
\r
1057 response.body.should redirect_to '/users/sign_in'
\r
1061 it 'ステータスコード401 Unauthorizedを返す' do
\r
1062 get :new, :format => :js
\r
1063 response.status.should eq 401
\r
1065 it '応答メッセージにUnauthorizedを返す' do
\r
1066 get :new, :format => :js
\r
1067 response.message.should match(/Unauthorized/)
\r
1070 context 'json形式' do
\r
1071 it 'ステータスコード401 Unauthorizedを返す' do
\r
1072 get :new, :format => :json
\r
1073 response.status.should eq 401
\r
1075 it '応答メッセージにUnauthorizedを返す' do
\r
1076 get :new, :format => :json
\r
1077 response.message.should match(/Unauthorized/)
\r
1083 describe '新規作成に於いて' do
\r
1086 @attr = FactoryGirl.attributes_for(:comic, :author_id => @author.id, :title => 'normal')
\r
1088 context 'つつがなく終わるとき' do
\r
1089 context 'html形式' do
\r
1090 it 'ステータスコード302 Foundを返す' do
\r
1091 Comic.any_instance.stub(:save).and_return(true)
\r
1092 post :create, :comic => @attr
\r
1093 response.status.should eq 302
\r
1095 it '作成されたコミックの表示ページへ遷移する' do
\r
1096 # Comic.any_instance.stub(:save).and_return(true)
\r
1097 post :create, :comic => @attr
\r
1098 response.should redirect_to(Comic.last)
\r
1101 context 'json形式' do
\r
1102 it 'ステータスコード200 OKを返す' do
\r
1103 # Comic.any_instance.stub(:save).and_return(true)
\r
1104 post :create, :comic => @attr, :format => :json
\r
1105 response.should be_success
\r
1107 it '作成されたコミックをjsonデータで返す' do
\r
1108 post :create, :comic => @attr, :format => :json
\r
1109 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1113 context 'ユーザ権限がないとき' do
\r
1117 context 'html形式' do
\r
1118 it 'ステータスコード302 Foundを返す' do
\r
1119 post :create, :comic => @attr
\r
1120 response.status.should eq 302
\r
1122 it 'サインインページへ遷移する' do
\r
1123 post :create, :comic => @attr
\r
1124 response.body.should redirect_to '/users/sign_in'
\r
1127 context 'json形式' do
\r
1128 it 'ステータスコード401 Unauthorizedを返す' do
\r
1129 post :create, :comic => @attr, :format => :json
\r
1130 response.status.should eq 401
\r
1132 it '応答メッセージにUnauthorizedを返す' do
\r
1133 post :create, :comic => @attr, :format => :json
\r
1134 response.message.should match(/Unauthorized/)
\r
1140 describe '編集フォーム表示に於いて' do
\r
1142 @comic = FactoryGirl.create :comic, :author_id => @user.author.id
\r
1144 Comic.stub(:edit).and_return(@comic)
\r
1146 context 'つつがなく終わるとき' do
\r
1147 it 'ステータスコード200 OKを返す' do
\r
1148 get :edit, :id => @comic.id
\r
1149 response.should be_success
\r
1151 context 'html形式' do
\r
1152 it 'editテンプレートを描画する' do
\r
1153 get :edit, :id => @comic.id
\r
1154 response.should render_template("edit")
\r
1158 it 'edit.jsテンプレートを描画する' do
\r
1159 get :edit, :id => @comic.id, :format => :js
\r
1160 response.should render_template("edit")
\r
1164 context 'ユーザ権限がないとき' do
\r
1168 context 'html形式' do
\r
1169 it 'ステータスコード302 Foundを返す' do
\r
1170 get :edit, :id => @comic.id
\r
1171 response.status.should eq 302
\r
1173 it 'サインインページへ遷移する' do
\r
1174 get :edit, :id => @comic.id
\r
1175 response.body.should redirect_to '/users/sign_in'
\r
1179 it 'ステータスコード401 Unauthorizedを返す' do
\r
1180 get :edit, :id => @comic.id, :format => :js
\r
1181 response.status.should eq 401
\r
1183 it '応答メッセージにUnauthorizedを返す' do
\r
1184 get :edit, :id => @comic.id, :format => :js
\r
1185 response.message.should match(/Unauthorized/)
\r
1191 describe '更新に於いて' do
\r
1193 @comic = FactoryGirl.create :comic, :author => @author
\r
1194 @attr = FactoryGirl.attributes_for(:comic, :author_id => @author.id, :title => 'updated title', :visible => 0)
\r
1197 context 'つつがなく終わるとき' do
\r
1198 context 'html形式' do
\r
1199 it 'ステータスコード302 Foundを返す' do
\r
1200 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
1201 put :update, :id => @comic.id, :comic => @attr
\r
1202 response.status.should eq 302
\r
1204 it '更新されたコミックの表示ページへ遷移する' do
\r
1205 put :update, :id => @comic.id, :comic => @attr
\r
1206 response.should redirect_to(@comic)
\r
1209 context 'json形式' do
\r
1210 it 'ステータスコード200 OKを返す' do
\r
1211 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
1212 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
1213 response.should be_success
\r
1215 it 'ページ本体は特に返さない' do
\r
1216 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
1217 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
1218 response.body.should match /./
\r
1222 context 'ユーザ権限がないとき' do
\r
1226 it 'ステータスコード302 Foundを返す' do
\r
1227 put :update, :id => @comic.id, :comic => @attr
\r
1228 response.status.should eq 302
\r
1230 context 'html形式' do
\r
1231 it 'サインインページへ遷移する' do
\r
1232 put :update, :id => @comic.id, :comic => @attr
\r
1233 response.body.should redirect_to '/users/sign_in'
\r
1239 describe '削除に於いて' do
\r
1241 @comic = FactoryGirl.create :comic, :author => @author
\r
1244 context 'つつがなく終わるとき' do
\r
1245 context 'html形式' do
\r
1247 Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)
\r
1249 it 'ステータスコード302 Foundを返す' do
\r
1250 delete :destroy, :id => @comic.id
\r
1251 response.status.should eq 302
\r
1253 it 'マイコミックの一覧ページへ遷移する' do
\r
1254 delete :destroy, :id => @comic.id
\r
1255 response.should redirect_to('/home/comic')
\r
1258 context 'json形式' do
\r
1260 Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)
\r
1262 it 'ステータスコード200 OKを返す' do
\r
1263 delete :destroy, :id => @comic.id, :format => :json
\r
1264 response.should be_success
\r
1266 it 'ページ本体は特に返さない' do
\r
1267 delete :destroy, :id => @comic.id, :format => :json
\r
1268 response.body.should match /./
\r
1272 context 'ユーザ権限がないとき' do
\r
1276 it 'ステータスコード302 Foundを返す' do
\r
1277 delete :destroy, :id => @comic.id
\r
1278 response.status.should eq 302
\r
1280 context 'html形式' do
\r
1281 it 'サインインページへ遷移する' do
\r
1282 delete :destroy, :id => @comic.id
\r
1283 response.body.should redirect_to '/users/sign_in'
\r
1286 context 'json形式' do
\r
1287 it '応答メッセージにUnauthorizedを返す' do
\r
1288 delete :destroy, :id => @comic.id, :format => :json
\r
1289 response.message.should match(/Unauthorized/)
\r