1 # -*- encoding: utf-8 -*-
4 describe StoriesController do
6 @admin = FactoryGirl.create :admin
7 @sp = FactoryGirl.create :system_picture
8 @lg = FactoryGirl.create :license_group
9 @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
10 @user = FactoryGirl.create :user_yas
11 @author = FactoryGirl.create :author, :user_id => @user.id
12 @comic = FactoryGirl.create :comic, :author_id => @user.author.id
15 if MagicNumber['run_mode'] == 1
16 describe '一覧表示に於いて' do
19 @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id
20 Story.stub(:list).and_return([@story, @story, @story])
22 context 'パラメータpageについて' do
24 get :index, :page => 5
25 assigns(:page).should eq 5
27 it '省略されると@pageに1値が入る' do
29 assigns(:page).should eq 1
31 it '与えられたpage_sizeがセットされている' do
32 get :index, :page_size => 15
33 assigns(:page_size).should eq 15
35 it '省略されると@page_sizeにデフォルト値が入る' do
37 assigns(:page_size).should eq Story.default_page_size
39 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
40 get :index, :page_size => 1500
41 assigns(:page_size).should eq Story.max_page_size
43 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
44 get :index, :page_size => 0
45 assigns(:page_size).should eq Story.default_page_size
48 context 'つつがなく終わるとき' do
49 it 'ステータスコード200 OKを返す' do
51 response.should be_success
53 it 'ストーリーモデルに一覧を問い合わせている' do
54 Story.should_receive(:list).exactly(1)
57 it '@storiesにリストを取得している' do
59 assigns(:stories).should have_at_least(3).items
62 it '@paginateにページ制御を取得している' do
64 assigns(:paginate).is_a?(Kaminari::PaginatableArray).should be_true
66 it 'indexテンプレートを描画する' do
68 response.should render_template("index")
73 get :index, :format => :json
74 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
76 it 'ストーリーモデルにjson一覧出力オプションを問い合わせている' do
77 Story.should_receive(:list_json_opt).exactly(1)
78 get :index, :format => :json
80 it 'データがリスト構造になっている' do
81 get :index, :format => :json
82 json = JSON.parse response.body
83 json.should have_at_least(3).items
85 it 'リストの先頭くらいはストーリーっぽいものであって欲しい' do
86 get :index, :format => :json
87 json = JSON.parse response.body
88 json.first.has_key?("title").should be_true
89 json.first.has_key?("comic_id").should be_true
90 json.first.has_key?("t").should be_true
94 context 'ユーザ権限がないとき' do
99 it 'ステータスコード302 Foundを返す' do
101 response.status.should eq 302
103 it 'サインインページへ遷移する' do
105 response.should redirect_to '/users/sign_in'
109 it 'ステータスコード401 Unauthorizedを返す' do
110 get :index, :format => :json
111 response.status.should eq 401
113 it '応答メッセージにUnauthorizedを返す' do
114 get :index, :format => :json
115 response.message.should match(/Unauthorized/)
119 context 'ユーザ権限はないが管理者権限があるとき' do
124 it 'ステータスコード200 OKを返す' do
126 response.should be_success
129 context 'ユーザだが作家登録していないとき' do
133 it 'ステータスコード200 OKを返す' do
135 response.should be_success
140 describe '単体表示に於いて' do
143 @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id
144 Comic.stub(:show).with(@comic.id.to_s, [@user, nil]).and_return(@comic)
145 Comic.stub(:show).with(@comic.id.to_s, [nil, @admin]).and_return(@comic)
147 context 'つつがなく終わるとき' do
148 it 'ストーリーモデルに単体取得を問い合わせている' do
149 Story.should_receive(:show).with(@story.id.to_s, [@user, nil]).exactly(1)
150 get :show, :id => @story.id
152 it '@storyにアレを取得している' do
153 get :show, :id => @story.id
154 assigns(:story).should eq @story
157 it 'ステータスコード200 OKを返す' do
158 get :show, :id => @story.id
159 response.should be_success
161 it 'showテンプレートを描画する' do
162 get :show, :id => @story.id
163 response.should render_template("show")
167 it 'ステータスコード200 OKを返す' do
168 get :show, :id => @story.id, :format => :json
169 response.should be_success
172 get :show, :id => @story.id, :format => :json
173 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
175 it 'ストーリーモデルにjson単体出力オプションを問い合わせている' do
176 Story.should_receive(:show_json_opt).exactly(1)
177 get :show, :id => @story.id, :format => :json
180 get :show, :id => @story.id, :format => :json
181 json = JSON.parse response.body
182 json.has_key?("title").should be_true
183 json.has_key?("comic_id").should be_true
187 context 'ユーザ権限がないとき' do
192 it 'ステータスコード302 Foundを返す' do
193 get :show, :id => @story.id
194 response.status.should eq 302
196 it 'サインインページへ遷移する' do
197 get :show, :id => @story.id
198 response.body.should redirect_to '/users/sign_in'
202 it 'ステータスコード401 Unauthorizedを返す' do
203 get :show, :id => @story.id, :format => :json
204 response.status.should eq 401
206 it '応答メッセージにUnauthorizedを返す' do
207 get :show, :id => @story.id, :format => :json
208 response.message.should match(/Unauthorized/)
212 context 'ユーザ権限はないが管理者権限があるとき' do
217 it 'ステータスコード200 OKを返す' do
218 get :show, :id => @story.id
219 response.should be_success
222 context 'ユーザだが作家登録していないとき' do
226 it 'ステータスコード200 OKを返す' do
227 get :show, :id => @story.id
228 response.should be_success
235 @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id
236 @sheet = FactoryGirl.create :sheet, :author_id => @author.id
237 @story_sheet = FactoryGirl.create :story_sheet, :author_id => @author.id, :story_id => @story.id, :sheet_id => @sheet.id
238 @panel = FactoryGirl.create :panel, :author_id => @author.id
239 @sheet_panel = FactoryGirl.create :sheet_panel, :t => 0, :sheet_id => @sheet.id, :panel_id => @panel.id, :author_id => @author.id
240 Story.stub(:show).with(@story.id.to_s, [@user, nil]).and_return(@story)
241 Story.stub(:show).with(@story.id.to_s, [nil, @admin]).and_return(@story)
242 Story.stub(:count).and_return(10)
243 StorySheet.stub(:play_sheet).with(any_args).and_return(@sheet)
246 context 'パラメータpageについて' do
248 get :play, :id => @story.id, :page => 5
249 assigns(:page).should eq 5
251 it '省略されると@pageに1値が入る' do
252 get :play, :id => @story.id
253 assigns(:page).should eq 1
256 context '事前チェックする' do
257 it 'ストーリーモデルに単体取得を問い合わせている' do
258 Story.should_receive(:show).with(@story.id.to_s, [@user, nil]).exactly(1)
259 get :play, :id => @story.id
261 it 'スト紙モデルにプレイリスト取得を問い合わせている' do
262 StorySheet.should_receive(:play_sheet).with(@story, @author, 1).exactly(1)
263 get :play, :id => @story.id
266 context 'つつがなく終わるとき' do
267 it '@sheetに用紙を取得している' do
268 get :play, :id => @story.id
269 assigns(:sheet).should eq @sheet
272 it 'ステータスコード200 OKを返す' do
273 get :play, :id => @story.id
274 response.should be_success
276 it 'playテンプレートを描画する' do
277 get :play, :id => @story.id
278 response.should render_template("play")
282 it 'ステータスコード200 OKを返す' do
283 get :play, :id => @story.id, :format => :json
284 response.should be_success
287 get :play, :id => @story.id, :format => :json
288 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
290 it '紙コマモデルに紙コマリストのjson出力を問い合わせている' do
291 SheetPanel.should_receive(:list_as_json_text).exactly(1)
292 get :play, :id => @story.id, :format => :json
294 it 'データがリスト構造になっている' do
295 get :play, :id => @story.id, :format => :json
296 json = JSON.parse response.body
297 json.should have_at_least(1).items
299 it 'リストの先頭くらいは紙コマっぽいものであって欲しい' do
300 get :play, :id => @story.id, :format => :json
301 json = JSON.parse response.body
302 json.first.has_key?("sheet_id").should be_true
303 json.first.has_key?("panel_id").should be_true
307 context 'ユーザ権限がないとき' do
312 it 'ステータスコード302 Foundを返す' do
313 get :play, :id => @story.id
314 response.status.should eq 302
316 it 'サインインページへ遷移する' do
317 get :play, :id => @story.id
318 response.should redirect_to '/users/sign_in'
322 it 'ステータスコード401 Unauthorizedを返す' do
323 get :play, :id => @story.id, :format => :json
324 response.status.should eq 401
326 it '応答メッセージにUnauthorizedを返す' do
327 get :play, :id => @story.id, :format => :json
328 response.message.should match(/Unauthorized/)
332 context 'ユーザ権限はないが管理者権限があるとき' do
337 it 'ステータスコード200 OKを返す' do
338 get :play, :id => @story.id
339 response.should be_success
342 context 'ユーザだが作家登録していないとき' do
346 it 'ステータスコード200 OKを返す' do
347 get :play, :id => @story.id
348 response.should be_success
353 describe '新規作成フォーム表示に於いて' do
357 context 'つつがなく終わるとき' do
358 it '@storyに新規データを用意している' do
360 assigns(:story).should be_a_new(Story)
362 it 'モデルにデフォルト値補充を依頼している' do
363 Story.any_instance.should_receive(:supply_default).exactly(1)
367 it 'ステータスコード200 OKを返す' do
369 response.should be_success
371 it 'newテンプレートを描画する' do
373 response.should render_template("new")
377 it 'ステータスコード200 OKを返す' do
378 get :new, :format => :js
379 response.should be_success
381 it 'new.jsテンプレートを描画する' do
382 get :new, :format => :js
383 response.should render_template("new")
387 it 'ステータスコード200 OKを返す' do
388 get :new, :format => :json
389 response.should be_success
392 get :new, :format => :json
393 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
395 it 'ストーリーモデルのjson単体出力オプションを問い合わせている' do
396 Story.should_receive(:show_json_opt).exactly(1)
397 get :new, :format => :json
400 get :new, :format => :json
401 json = JSON.parse response.body
402 json.has_key?("title").should be_true
403 json.has_key?("comic_id").should be_true
407 context 'ユーザ権限がないとき' do
412 it 'ステータスコード302 Foundを返す' do
414 response.status.should eq 302
416 it 'サインインページへ遷移する' do
418 response.body.should redirect_to '/users/sign_in'
422 it 'ステータスコード401 Unauthorizedを返す' do
423 get :new, :format => :json
424 response.status.should eq 401
426 it '応答メッセージにUnauthorizedを返す' do
427 get :new, :format => :json
428 response.message.should match(/Unauthorized/)
432 context 'ユーザ権限はないが管理者権限があるとき' do
438 it 'ステータスコード302 Foundを返す' do
440 response.status.should eq 302
442 it 'サインインページへ遷移する' do
444 response.body.should redirect_to '/users/sign_in'
448 context 'ユーザだが作家登録していないとき' do
453 it 'ステータスコード302 Foundを返す' do
455 response.status.should eq 302
459 response.body.should redirect_to new_author_path
465 describe '新規作成に於いて' do
467 @attr = FactoryGirl.attributes_for(:story, :t => 0, :comic_id => @comic.id)
470 context 'つつがなく終わるとき' do
471 it 'デフォルト値補充を依頼する' do
472 Story.any_instance.should_receive(:supply_default).exactly(1)
473 post :create, :story => @attr
475 it 'POSTデータから、カラム値を復元している' do
476 # Story.any_instance.stub(:store).and_return(true)
477 post :create, :story => @attr
478 assigns(:story).comic_id.should eq @comic.id
481 Story.any_instance.should_receive(:overwrite).exactly(1)
482 post :create, :story => @attr
484 it 'コミックモデルに編集取得を依頼している' do
485 Comic.should_receive(:edit).with(@comic.id, @author).exactly(1)
486 post :create, :story => @attr
489 Story.any_instance.should_receive(:store).exactly(1)
490 post :create, :story => @attr
492 it "@storyに作成されたストーリーを保持していて、それがDBにある" do
493 post :create, :story => @attr
494 assigns(:story).should be_a(Story)
495 assigns(:story).should be_persisted
498 it 'ステータスコード302 Foundを返す' do
499 # Story.any_instance.stub(:store).and_return(true)
500 post :create, :story => @attr
501 response.status.should eq 302
503 it '作成されたストーリーの表示へページ位置を指定して遷移する' do
504 # Story.any_instance.stub(:store).and_return(true)
505 post :create, :story => @attr
506 response.should redirect_to(play_story_path(assigns(:story), :page => 1))
510 it 'ステータスコード200 OKを返す' do
511 # Story.any_instance.stub(:store).and_return(true)
512 post :create, :story => @attr, :format => :json
513 response.should be_success
515 it '作成されたコマをjsonデータで返す' do
516 post :create, :story => @attr, :format => :json
517 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
519 it 'ストーリーモデルのjson単体出力オプションを問い合わせている' do
520 Story.should_receive(:show_json_opt).exactly(1)
521 post :create, :story => @attr, :format => :json
524 post :create, :story => @attr, :format => :json
525 json = JSON.parse response.body
526 json["t"].should eq 0
530 context 'ユーザ権限がないとき' do
535 it 'ステータスコード302 Foundを返す' do
536 post :create, :story => @attr
537 response.status.should eq 302
539 it 'サインインページへ遷移する' do
540 post :create, :story => @attr
541 response.body.should redirect_to '/users/sign_in'
545 it 'ステータスコード401 Unauthorizedを返す' do
546 post :create, :story => @attr, :format => :json
547 response.status.should eq 401
549 it '応答メッセージにUnauthorizedを返す' do
550 post :create, :story => @attr, :format => :json
551 response.message.should match(/Unauthorized/)
555 context 'ユーザ権限はないが管理者権限があるとき' do
561 it 'ステータスコード302 Foundを返す' do
562 post :create, :story => @attr
563 response.status.should eq 302
565 it 'サインインページへ遷移する' do
566 post :create, :story => @attr
567 response.body.should redirect_to '/users/sign_in'
571 context 'ユーザだが作家登録していないとき' do
576 it 'ステータスコード302 Foundを返す' do
577 post :create, :story => @attr
578 response.status.should eq 302
581 post :create, :story => @attr
582 response.body.should redirect_to new_author_path
586 context '検証、保存に失敗した' do
588 Story.any_instance.stub(:store).and_return(false)
590 it "未保存のコマを保持している" do
591 post :create, :story => @attr
592 assigns(:story).should be_a_new(Story)
595 it 'ステータスコード200 OKを返す' do
596 post :create, :story => @attr
597 response.status.should eq 200
600 post :create, :story => @attr
601 response.should render_template("new")
605 it 'ステータスコード422 unprocessable_entity を返す' do
606 post :create, :story => @attr, :format => :json
607 response.status.should eq 422
609 it '応答メッセージUnprocessable Entityを返す' do
610 post :create, :story => @attr, :format => :json
611 response.message.should match(/Unprocessable/)
617 describe '編集フォーム表示に於いて' do
619 @story = FactoryGirl.create :story, :comic_id => @comic.id
621 Story.stub(:show).and_return(@story)
623 context 'つつがなく終わるとき' do
624 it 'ストーリーモデルに編集取得を問い合わせている' do
625 Story.should_receive(:edit).exactly(1)
626 get :edit, :id => @story.id
628 it '@storyにデータを用意している' do
629 get :edit, :id => @story.id
630 assigns(:story).should eq @story
633 it 'ステータスコード200 OKを返す' do
634 get :edit, :id => @story.id
635 response.should be_success
637 it 'editテンプレートを描画する' do
638 get :edit, :id => @story.id
639 response.should render_template("edit")
643 it 'ステータスコード200 OKを返す' do
644 get :edit, :id => @story.id, :format => :js
645 response.should be_success
647 it 'edit.jsテンプレートを描画する' do
648 get :edit, :id => @story.id, :format => :js
649 response.should render_template("edit")
653 context 'ユーザ権限がないとき' do
658 it 'ステータスコード302 Foundを返す' do
659 get :edit, :id => @story.id
660 response.status.should eq 302
662 it 'サインインページへ遷移する' do
663 get :edit, :id => @story.id
664 response.body.should redirect_to '/users/sign_in'
668 it 'ステータスコード401 Unauthorizedを返す' do
669 get :edit, :id => @story.id, :format => :js
670 response.status.should eq 401
672 it '応答メッセージにUnauthorizedを返す' do
673 get :edit, :id => @story.id, :format => :js
674 response.message.should match(/Unauthorized/)
678 context 'ユーザ権限はないが管理者権限があるとき' do
684 it 'ステータスコード302 Foundを返す' do
685 get :edit, :id => @story.id
686 response.status.should eq 302
688 it 'サインインページへ遷移する' do
689 get :edit, :id => @story.id
690 response.body.should redirect_to '/users/sign_in'
694 context 'ユーザだが作家登録していないとき' do
699 it 'ステータスコード302 Foundを返す' do
700 get :edit, :id => @story.id
701 response.status.should eq 302
704 get :edit, :id => @story.id
705 response.body.should redirect_to new_author_path
713 @story = FactoryGirl.create :story, :comic_id => @comic.id
714 @attr = FactoryGirl.attributes_for(:story, :t => 0)
717 context 'つつがなく終わるとき' do
719 Story.stub(:edit).with(any_args).and_return(@story)
720 Story.should_receive(:edit).exactly(1)
721 put :update, :id => @story.id, :story => @attr
723 it 'POSTデータから、カラム値を復元している' do
724 Story.any_instance.stub(:store).and_return(true)
725 Story.any_instance.should_receive(:attributes=).exactly(1)
726 put :update, :id => @story.id, :story => @attr
729 Story.any_instance.should_receive(:overwrite).exactly(1)
730 put :update, :id => @story.id, :story => @attr
733 Story.any_instance.should_receive(:store).exactly(1)
734 put :update, :id => @story.id, :story => @attr
736 it "@storyに作成されたストーリーを保持していて、それがDBにある" do
737 put :update, :id => @story.id, :story => @attr
738 assigns(:story).should be_a(Story)
739 assigns(:story).should be_persisted
742 it 'ステータスコード302 Foundを返す' do
743 Story.any_instance.stub(:store).and_return(true)
744 put :update, :id => @story.id, :story => @attr
745 response.status.should eq 302
747 it '更新されたストーリーの表示へページ位置を指定して遷移する' do
748 # Story.any_instance.stub(:store).and_return(true)
749 put :update, :id => @story.id, :story => @attr
750 response.should redirect_to(play_story_path(@story, :page => 1))
754 it 'ステータスコード200 OKを返す' do
755 # Story.any_instance.stub(:store).and_return(true)
756 put :update, :id => @story.id, :story => @attr, :format => :json
757 response.should be_success
761 context 'ユーザ権限がないとき' do
766 it 'ステータスコード302 Foundを返す' do
767 put :update, :id => @story.id, :story => @attr
768 response.status.should eq 302
770 it 'サインインページへ遷移する' do
771 put :update, :id => @story.id, :story => @attr
772 response.body.should redirect_to '/users/sign_in'
776 it 'ステータスコード401 Unauthorizedを返す' do
777 put :update, :id => @story.id, :story => @attr, :format => :json
778 response.status.should eq 401
780 it '応答メッセージにUnauthorizedを返す' do
781 put :update, :id => @story.id, :story => @attr, :format => :json
782 response.message.should match(/Unauthorized/)
786 context 'ユーザ権限はないが管理者権限があるとき' do
792 it 'ステータスコード302 Foundを返す' do
793 put :update, :id => @story.id, :story => @attr
794 response.status.should eq 302
796 it 'サインインページへ遷移する' do
797 put :update, :id => @story.id, :story => @attr
798 response.body.should redirect_to '/users/sign_in'
802 context 'ユーザだが作家登録していないとき' do
807 it 'ステータスコード302 Foundを返す' do
808 put :update, :id => @story.id, :story => @attr
809 response.status.should eq 302
812 put :update, :id => @story.id, :story => @attr
813 response.body.should redirect_to new_author_path
817 context '検証、保存に失敗した' do
819 Story.any_instance.stub(:store).and_return(false)
822 put :update, :id => @story.id, :story => @attr
823 assigns(:story).should eq @story
826 it 'ステータスコード200 OKを返す' do
827 put :update, :id => @story.id, :story => @attr
828 response.status.should eq 200
831 put :update, :id => @story.id, :story => @attr
832 response.should render_template("edit")
836 it 'ステータスコード422 unprocessable_entity を返す' do
837 put :update, :id => @story.id, :story => @attr, :format => :json
838 response.status.should eq 422
840 it '応答メッセージUnprocessable Entityを返す' do
841 put :update, :id => @story.id, :story => @attr, :format => :json
842 response.message.should match(/Unprocessable/)
850 @story = FactoryGirl.create :story, :comic_id => @comic.id
852 Story.stub(:edit).and_return(@story)
854 context '事前チェックしておく' do
856 Story.stub(:edit).with(any_args()).and_return @story
857 Story.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(true)
859 it 'ストーリーモデルに編集取得を問い合わせている' do
860 Story.should_receive(:edit).exactly(1)
861 delete :destroy, :id => @story.id
864 Story.any_instance.should_receive(:destroy_and_shorten).exactly(1)
865 delete :destroy, :id => @story.id
867 it '@storyにアレを取得している' do
868 delete :destroy, :id => @story.id
869 assigns(:story).id.should eq(@story.id)
872 context 'つつがなく終わるとき' do
874 Story.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(true)
877 it 'ステータスコード302 Foundを返す' do
878 delete :destroy, :id => @story.id
879 response.status.should eq 302
881 it 'コミック単体表示ページへ遷移する' do
882 delete :destroy, :id => @story.id
883 response.should redirect_to(comic_path(@comic))
887 it 'ステータスコード200 OKを返す' do
888 delete :destroy, :id => @story.id, :format => :json
889 response.should be_success
893 context 'ユーザ権限がないとき' do
898 it 'ステータスコード302 Foundを返す' do
899 delete :destroy, :id => @story.id
900 response.status.should eq 302
902 it 'サインインページへ遷移する' do
903 delete :destroy, :id => @story.id
904 response.body.should redirect_to '/users/sign_in'
908 it 'ステータスコード401 Unauthorizedを返す' do
909 delete :destroy, :id => @story.id, :format => :json
910 response.status.should eq 401
912 it '応答メッセージにUnauthorizedを返す' do
913 delete :destroy, :id => @story.id, :format => :json
914 response.message.should match(/Unauthorized/)
918 context 'ユーザ権限はないが管理者権限があるとき' do
924 it 'ステータスコード302 Foundを返す' do
925 delete :destroy, :id => @story.id
926 response.status.should eq 302
928 it 'サインインページへ遷移する' do
929 delete :destroy, :id => @story.id
930 response.body.should redirect_to '/users/sign_in'
934 context 'ユーザだが作家登録していないとき' do
939 it 'ステータスコード302 Foundを返す' do
940 delete :destroy, :id => @story.id
941 response.status.should eq 302
944 delete :destroy, :id => @story.id
945 response.body.should redirect_to new_author_path
949 context '削除に失敗したとき' do
951 Story.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(false)
954 it 'ステータスコード302 Foundを返す' do
955 delete :destroy, :id => @story.id
956 response.status.should eq 302
958 it 'そのコミックの詳細ページへ遷移する' do
959 delete :destroy, :id => @story.id
960 response.should redirect_to(story_path(@story))
964 it 'ステータスコード422 unprocessable_entity を返す' do
965 delete :destroy, :id => @story.id, :format => :json
966 response.status.should eq 422
968 it '応答メッセージUnprocessable Entityを返す' do
969 delete :destroy, :id => @story.id, :format => :json
970 response.message.should match(/Unprocessable/)
975 context '対象ストーリーがないとき' do
977 context '他人のストーリーだったとき' do
983 describe '一覧表示に於いて' do
986 @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id
987 Story.stub(:list).and_return([@story, @story, @story])
989 context 'つつがなく終わるとき' do
990 it 'ステータスコード200 OKを返す' do
992 response.should be_success
995 it 'indexテンプレートを描画する' do
997 response.should render_template("index")
1002 get :index, :format => :json
1003 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1007 context 'ユーザ権限がないとき' do
1011 it 'ステータスコード200 OKを返す' do
1013 response.should be_success
1016 it 'indexテンプレートを描画する' do
1018 response.should render_template("index")
1023 get :index, :format => :json
1024 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1030 describe '単体表示に於いて' do
1033 @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id
1034 Comic.stub(:show).with(@comic.id.to_s, [nil, nil]).and_return(@comic)
1035 Comic.stub(:show).with(@comic.id.to_s, [@user, nil]).and_return(@comic)
1036 Comic.stub(:show).with(@comic.id.to_s, [nil, @admin]).and_return(@comic)
1037 Story.stub(:show).with(@story.id.to_s, [nil, nil]).and_return(@story)
1038 Story.stub(:show).with(@story.id.to_s, [@user, nil]).and_return(@story)
1039 Story.stub(:show).with(@story.id.to_s, [nil, @admin]).and_return(@story)
1041 context 'つつがなく終わるとき' do
1043 it 'ステータスコード200 OKを返す' do
1044 get :show, :id => @story.id
1045 response.should be_success
1047 it 'showテンプレートを描画する' do
1048 get :show, :id => @story.id
1049 response.should render_template("show")
1053 it 'ステータスコード200 OKを返す' do
1054 get :show, :id => @story.id, :format => :json
1055 response.should be_success
1058 get :show, :id => @story.id, :format => :json
1059 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1063 context 'ユーザ権限がないとき' do
1068 it 'ステータスコード200 OKを返す' do
1069 get :show, :id => @story.id
1070 response.should be_success
1072 it 'showテンプレートを描画する' do
1073 get :show, :id => @story.id
1074 response.should render_template("show")
1078 it 'ステータスコード200 OKを返す' do
1079 get :show, :id => @story.id, :format => :json
1080 response.should be_success
1083 get :show, :id => @story.id, :format => :json
1084 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1090 describe '閲覧に於いて' do
1092 @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id
1093 Comic.stub(:show).with(@comic.id.to_s, [nil, nil]).and_return(@comic)
1094 Comic.stub(:show).with(@comic.id.to_s, [@user, nil]).and_return(@comic)
1095 Comic.stub(:show).with(@comic.id.to_s, [nil, @admin]).and_return(@comic)
1096 Story.stub(:count).and_return(10)
1097 Story.stub(:play_list).with(any_args).and_return([@story, @story, @story])
1100 context 'つつがなく終わるとき' do
1102 it 'ステータスコード200 OKを返す' do
1103 get :comic, :id => @comic.id
1104 response.should be_success
1106 it 'comicテンプレートを描画する' do
1107 get :comic, :id => @comic.id
1108 response.should render_template("comic")
1112 it 'ステータスコード200 OKを返す' do
1113 get :comic, :id => @comic.id, :format => :json
1114 response.should be_success
1117 get :comic, :id => @comic.id, :format => :json
1118 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1122 context 'ユーザ権限がないとき' do
1127 it 'ステータスコード200 OKを返す' do
1128 get :comic, :id => @comic.id
1129 response.should be_success
1131 it 'comicテンプレートを描画する' do
1132 get :comic, :id => @comic.id
1133 response.should render_template("comic")
1137 it 'ステータスコード200 OKを返す' do
1138 get :comic, :id => @comic.id, :format => :json
1139 response.should be_success
1142 get :comic, :id => @comic.id, :format => :json
1143 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1149 describe '新規作成フォーム表示に於いて' do
1153 context 'つつがなく終わるとき' do
1155 it 'ステータスコード200 OKを返す' do
1157 response.should be_success
1159 it 'newテンプレートを描画する' do
1161 response.should render_template("new")
1165 it 'ステータスコード200 OKを返す' do
1166 get :new, :format => :js
1167 response.should be_success
1169 it 'new.jsテンプレートを描画する' do
1170 get :new, :format => :js
1171 response.should render_template("new")
1175 it 'ステータスコード200 OKを返す' do
1176 get :new, :format => :json
1177 response.should be_success
1180 get :new, :format => :json
1181 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1185 context 'ユーザ権限がないとき' do
1190 it 'ステータスコード302 Foundを返す' do
1192 response.status.should eq 302
1194 it 'サインインページへ遷移する' do
1196 response.body.should redirect_to '/users/sign_in'
1200 it 'ステータスコード401 Unauthorizedを返す' do
1201 get :new, :format => :json
1202 response.status.should eq 401
1204 it '応答メッセージにUnauthorizedを返す' do
1205 get :new, :format => :json
1206 response.message.should match(/Unauthorized/)
1212 describe '新規作成に於いて' do
1214 @attr = FactoryGirl.attributes_for :story, :t => nil, :comic_id => @comic.id
1217 context 'つつがなく終わるとき' do
1219 it 'ステータスコード302 Foundを返す' do
1220 Story.any_instance.stub(:store).and_return(true)
1221 post :create, :story => @attr
1222 response.status.should eq 302
1224 it 'コミックのストーリー表示へ遷移する' do
1225 # Story.any_instance.stub(:store).and_return(true)
1226 post :create, :story => @attr
1227 response.should redirect_to(:action => :comic, :id => @attr[:comic_id])
1231 it 'ステータスコード200 OKを返す' do
1232 # Story.any_instance.stub(:store).and_return(true)
1233 post :create, :story => @attr, :format => :json
1234 response.should be_success
1236 it '作成されたコマをjsonデータで返す' do
1237 post :create, :story => @attr, :format => :json
1238 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1242 context 'ユーザ権限がないとき' do
1247 it 'ステータスコード302 Foundを返す' do
1248 post :create, :story => @attr
1249 response.status.should eq 302
1251 it 'サインインページへ遷移する' do
1252 post :create, :story => @attr
1253 response.body.should redirect_to '/users/sign_in'
1257 it 'ステータスコード401 Unauthorizedを返す' do
1258 post :create, :story => @attr, :format => :json
1259 response.status.should eq 401
1261 it '応答メッセージにUnauthorizedを返す' do
1262 post :create, :story => @attr, :format => :json
1263 response.message.should match(/Unauthorized/)
1269 describe '編集フォーム表示に於いて' do
1271 @story = FactoryGirl.create :story, :comic_id => @comic.id
1273 Story.stub(:show).and_return(@story)
1275 context 'つつがなく終わるとき' do
1277 it 'ステータスコード200 OKを返す' do
1278 get :edit, :id => @story.id
1279 response.should be_success
1281 it 'editテンプレートを描画する' do
1282 get :edit, :id => @story.id
1283 response.should render_template("edit")
1287 it 'ステータスコード200 OKを返す' do
1288 get :edit, :id => @story.id, :format => :js
1289 response.should be_success
1291 it 'edit.jsテンプレートを描画する' do
1292 get :edit, :id => @story.id, :format => :js
1293 response.should render_template("edit")
1297 context 'ユーザ権限がないとき' do
1302 it 'ステータスコード302 Foundを返す' do
1303 get :edit, :id => @story.id
1304 response.status.should eq 302
1306 it 'サインインページへ遷移する' do
1307 get :edit, :id => @story.id
1308 response.body.should redirect_to '/users/sign_in'
1312 it 'ステータスコード401 Unauthorizedを返す' do
1313 get :edit, :id => @story.id, :format => :js
1314 response.status.should eq 401
1316 it '応答メッセージにUnauthorizedを返す' do
1317 get :edit, :id => @story.id, :format => :js
1318 response.message.should match(/Unauthorized/)
1324 describe '更新に於いて' do
1326 @story = FactoryGirl.create :story, :comic_id => @comic.id
1327 @attr = FactoryGirl.attributes_for(:story)
1330 context 'つつがなく終わるとき' do
1332 it 'ステータスコード302 Foundを返す' do
1333 Story.any_instance.stub(:store).and_return(true)
1334 put :update, :id => @story.id, :story => @attr
1335 response.status.should eq 302
1337 it 'ストーリー表示へ遷移する' do
1338 # Story.any_instance.stub(:store).and_return(true)
1339 put :update, :id => @story.id, :story => @attr
1340 response.should redirect_to(:action => :comic, :id => @attr[:comic_id])
1344 it 'ステータスコード200 OKを返す' do
1345 # Story.any_instance.stub(:store).and_return(true)
1346 put :update, :id => @story.id, :story => @attr, :format => :json
1347 response.should be_success
1351 context 'ユーザ権限がないとき' do
1356 it 'ステータスコード302 Foundを返す' do
1357 put :update, :id => @story.id, :story => @attr
1358 response.status.should eq 302
1360 it 'サインインページへ遷移する' do
1361 put :update, :id => @story.id, :story => @attr
1362 response.body.should redirect_to '/users/sign_in'
1366 it 'ステータスコード401 Unauthorizedを返す' do
1367 put :update, :id => @story.id, :story => @attr, :format => :json
1368 response.status.should eq 401
1370 it '応答メッセージにUnauthorizedを返す' do
1371 put :update, :id => @story.id, :story => @attr, :format => :json
1372 response.message.should match(/Unauthorized/)
1378 describe '削除に於いて' do
1380 @story = FactoryGirl.create :story, :comic_id => @comic.id
1382 Story.stub(:edit).and_return(@story)
1384 context 'つつがなく終わるとき' do
1386 Story.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(true)
1389 it 'ステータスコード302 Foundを返す' do
1390 delete :destroy, :id => @story.id
1391 response.status.should eq 302
1394 delete :destroy, :id => @story.id
1395 response.should redirect_to(:controller => 'stories', :action => :comic, :id => @story.comic_id)
1399 it 'ステータスコード200 OKを返す' do
1400 delete :destroy, :id => @story.id, :format => :json
1401 response.should be_success
1405 context 'ユーザ権限がないとき' do
1410 it 'ステータスコード302 Foundを返す' do
1411 delete :destroy, :id => @story.id
1412 response.status.should eq 302
1414 it 'サインインページへ遷移する' do
1415 delete :destroy, :id => @story.id
1416 response.body.should redirect_to '/users/sign_in'
1420 it 'ステータスコード401 Unauthorizedを返す' do
1421 delete :destroy, :id => @story.id, :format => :json
1422 response.status.should eq 401
1424 it '応答メッセージにUnauthorizedを返す' do
1425 delete :destroy, :id => @story.id, :format => :json
1426 response.message.should match(/Unauthorized/)