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
13 @panel = FactoryGirl.create :panel, :author_id => @author.id
16 if MagicNumber['run_mode'] == 1
17 describe '一覧表示に於いて' do
20 @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id
21 Story.stub(:list).and_return([@story, @story, @story])
23 context 'パラメータpageについて' do
25 get :index, :page => 5
26 assigns(:page).should eq 5
28 it '省略されると@pageに1値が入る' do
30 assigns(:page).should eq 1
32 it '与えられたpage_sizeがセットされている' do
33 get :index, :page_size => 15
34 assigns(:page_size).should eq 15
36 it '省略されると@page_sizeにデフォルト値が入る' do
38 assigns(:page_size).should eq Story.default_page_size
40 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
41 get :index, :page_size => 1500
42 assigns(:page_size).should eq Story.max_page_size
44 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
45 get :index, :page_size => 0
46 assigns(:page_size).should eq Story.default_page_size
49 context 'つつがなく終わるとき' do
50 it 'ステータスコード200 OKを返す' do
52 response.should be_success
54 it 'ストーリーモデルに一覧を問い合わせている' do
55 Story.should_receive(:list).exactly(1)
58 it '@storiesにリストを取得している' do
60 assigns(:stories).should have_at_least(3).items
63 it 'indexテンプレートを描画する' do
65 response.should render_template("index")
70 get :index, :format => :json
71 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
73 it 'ストーリーモデルにjson一覧出力オプションを問い合わせている' do
74 Story.should_receive(:list_json_opt).exactly(1)
75 get :index, :format => :json
77 it 'データがリスト構造になっている' do
78 get :index, :format => :json
79 json = JSON.parse response.body
80 json.should have_at_least(3).items
82 it 'リストの先頭くらいはストーリーっぽいものであって欲しい' do
83 get :index, :format => :json
84 json = JSON.parse response.body
85 json.first.has_key?("panel_id").should be_true
86 json.first.has_key?("comic_id").should be_true
87 json.first.has_key?("t").should be_true
91 context 'ユーザ権限がないとき' do
96 it 'ステータスコード302 Foundを返す' do
98 response.status.should eq 302
100 it 'サインインページへ遷移する' do
102 response.should redirect_to '/users/sign_in'
106 it 'ステータスコード401 Unauthorizedを返す' do
107 get :index, :format => :json
108 response.status.should eq 401
110 it '応答メッセージにUnauthorizedを返す' do
111 get :index, :format => :json
112 response.message.should match(/Unauthorized/)
116 context 'ユーザ権限はないが管理者権限があるとき' do
121 it 'ステータスコード200 OKを返す' do
123 response.should be_success
126 context 'ユーザだが作家登録していないとき' do
130 it 'ステータスコード200 OKを返す' do
132 response.should be_success
137 describe '単体表示に於いて' do
140 @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id
141 Comic.stub(:show).with(@comic.id.to_s, [@user, nil]).and_return(@comic)
142 Comic.stub(:show).with(@comic.id.to_s, [nil, @admin]).and_return(@comic)
143 Story.stub(:show).with(@story.id.to_s, [@user, nil]).and_return(@story)
144 Story.stub(:show).with(@story.id.to_s, [nil, @admin]).and_return(@story)
146 context 'つつがなく終わるとき' do
147 it 'ストーリーモデルに単体取得を問い合わせている' do
148 Story.should_receive(:show).with(@story.id.to_s, [@user, nil]).exactly(1)
149 get :show, :id => @story.id
151 it '@storyにアレを取得している' do
152 get :show, :id => @story.id
153 assigns(:story).should eq @story
156 it 'ステータスコード200 OKを返す' do
157 get :show, :id => @story.id
158 response.should be_success
160 it 'showテンプレートを描画する' do
161 get :show, :id => @story.id
162 response.should render_template("show")
166 it 'ステータスコード200 OKを返す' do
167 get :show, :id => @story.id, :format => :json
168 response.should be_success
171 get :show, :id => @story.id, :format => :json
172 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
174 it 'ストーリーモデルにストーリーjson出力を問い合わせている' do
175 Story.any_instance.should_receive(:story_as_json).exactly(1)
176 get :show, :id => @story.id, :format => :json
179 get :show, :id => @story.id, :format => :json
180 json = JSON.parse response.body
181 json.has_key?("panel_id").should be_true
182 json.has_key?("comic_id").should be_true
183 json.has_key?("author_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, :panel_id => @panel.id, :author_id => @author.id
236 Comic.stub(:show).with(@comic.id.to_s, [@user, nil]).and_return(@comic)
237 Comic.stub(:show).with(@comic.id.to_s, [nil, @admin]).and_return(@comic)
238 Story.stub(:count).and_return(10)
239 Story.stub(:play_list).with(any_args).and_return([@story, @story, @story])
242 context 'パラメータチェックする' do
243 it '与えられたoffsetがセットされている' do
244 get :comic, :id => @comic.id, :offset => 5
245 assigns(:offset).should eq 5
247 it '省略されると@offsetに0値が入る' do
248 get :comic, :id => @comic.id
249 assigns(:offset).should eq 0
251 it '与えられたcountがセットされている' do
252 get :comic, :id => @comic.id, :count => 4
253 assigns(:panel_count).should eq 4
255 it '省略されると@panel_countにデフォルト値が入る' do
256 get :comic, :id => @comic.id
257 assigns(:panel_count).should eq Story.default_panel_size
259 it '最大を超えると@panel_countにデフォルト最大値が入る' do
260 get :comic, :id => @comic.id, :count => 1500
261 assigns(:panel_count).should eq Story.max_panel_size
263 it '不正な値が入ると@panel_countにデフォルト最大値が入る' do
264 get :comic, :id => @comic.id, :count => -1
265 assigns(:panel_count).should eq Story.default_panel_size
268 context '事前チェックする' do
269 it 'コミックモデルに単体取得を問い合わせている' do
270 Comic.should_receive(:show).with(@comic.id.to_s, [@user, nil]).exactly(1)
271 get :comic, :id => @comic.id
273 it 'ストーリーモデルにプレイリスト取得を問い合わせている' do
274 Story.should_receive(:play_list).with(@comic, @author, 0, 30).exactly(1)
275 get :comic, :id => @comic.id
278 context 'つつがなく終わるとき' do
279 it '@storiesにリストを取得している' do
280 get :comic, :id => @comic.id
281 assigns(:stories).should have_at_least(3).items
284 it 'ステータスコード200 OKを返す' do
285 get :comic, :id => @comic.id
286 response.should be_success
288 it 'comicテンプレートを描画する' do
289 get :comic, :id => @comic.id
290 response.should render_template("comic")
294 it 'ステータスコード200 OKを返す' do
295 get :comic, :id => @comic.id, :format => :json
296 response.should be_success
299 get :comic, :id => @comic.id, :format => :json
300 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
302 it 'ストーリーモデルにストーリーリストのjson出力を問い合わせている' do
303 Story.should_receive(:list_as_json_text).exactly(1)
304 get :comic, :id => @comic.id, :format => :json
306 it 'データがリスト構造になっている' do
307 get :comic, :id => @comic.id, :format => :json
308 json = JSON.parse response.body
309 json.should have_at_least(3).items
311 it 'リストの先頭くらいはストーリーっぽいものであって欲しい' do
312 get :comic, :id => @comic.id, :format => :json
313 json = JSON.parse response.body
314 json.first.has_key?("panel_id").should be_true
315 json.first.has_key?("comic_id").should be_true
316 json.first.has_key?("author_id").should be_true
320 context 'ユーザ権限がないとき' do
325 it 'ステータスコード302 Foundを返す' do
326 get :comic, :id => @comic.id
327 response.status.should eq 302
329 it 'サインインページへ遷移する' do
330 get :comic, :id => @comic.id
331 response.should redirect_to '/users/sign_in'
335 it 'ステータスコード401 Unauthorizedを返す' do
336 get :comic, :id => @comic.id, :format => :json
337 response.status.should eq 401
339 it '応答メッセージにUnauthorizedを返す' do
340 get :comic, :id => @comic.id, :format => :json
341 response.message.should match(/Unauthorized/)
345 context 'ユーザ権限はないが管理者権限があるとき' do
350 it 'ステータスコード200 OKを返す' do
351 get :comic, :id => @comic.id
352 response.should be_success
355 context 'ユーザだが作家登録していないとき' do
359 it 'ステータスコード200 OKを返す' do
360 get :comic, :id => @comic.id
361 response.should be_success
366 describe '新規作成フォーム表示に於いて' do
370 context 'つつがなく終わるとき' do
371 it '@storyに新規データを用意している' do
373 assigns(:story).should be_a_new(Story)
375 it 'モデルにデフォルト値補充を依頼している' do
376 Story.any_instance.should_receive(:supply_default).exactly(1)
380 it 'ステータスコード200 OKを返す' do
382 response.should be_success
384 it 'newテンプレートを描画する' do
386 response.should render_template("new")
390 it 'ステータスコード200 OKを返す' do
391 get :new, :format => :js
392 response.should be_success
394 it 'new.jsテンプレートを描画する' do
395 get :new, :format => :js
396 response.should render_template("new")
400 it 'ステータスコード200 OKを返す' do
401 get :new, :format => :json
402 response.should be_success
405 get :new, :format => :json
406 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
408 it 'ストーリーモデルのストーリーのjson出力を問い合わせている' do
409 Story.any_instance.should_receive(:story_as_json).exactly(1)
410 get :new, :format => :json
413 get :new, :format => :json
414 json = JSON.parse response.body
415 json.has_key?("panel_id").should be_true
416 json.has_key?("comic_id").should be_true
417 json.has_key?("author_id").should be_true
421 context 'ユーザ権限がないとき' do
426 it 'ステータスコード302 Foundを返す' do
428 response.status.should eq 302
430 it 'サインインページへ遷移する' do
432 response.body.should redirect_to '/users/sign_in'
436 it 'ステータスコード401 Unauthorizedを返す' do
437 get :new, :format => :json
438 response.status.should eq 401
440 it '応答メッセージにUnauthorizedを返す' do
441 get :new, :format => :json
442 response.message.should match(/Unauthorized/)
446 context 'ユーザ権限はないが管理者権限があるとき' do
452 it 'ステータスコード302 Foundを返す' do
454 response.status.should eq 302
456 it 'サインインページへ遷移する' do
458 response.body.should redirect_to '/users/sign_in'
462 context 'ユーザだが作家登録していないとき' do
467 it 'ステータスコード302 Foundを返す' do
469 response.status.should eq 302
473 response.body.should redirect_to new_author_path
479 describe '新規作成に於いて' do
481 @attr = FactoryGirl.attributes_for(:story, :t => nil, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id)
484 context 'つつがなく終わるとき' do
485 it 'デフォルト値補充を依頼する' do
486 Story.any_instance.should_receive(:supply_default).exactly(1)
487 post :create, :story => @attr
489 it 'POSTデータから、カラム値を復元している' do
490 Story.any_instance.stub(:store).and_return(true)
491 post :create, :story => @attr
492 assigns(:story).comic_id.should eq @comic.id
493 assigns(:story).panel_id.should eq @panel.id
496 Story.any_instance.should_receive(:overwrite).exactly(1)
497 post :create, :story => @attr
499 it 'コミックモデルに編集取得を依頼している' do
500 Comic.should_receive(:edit).with(@comic.id, @author).exactly(1)
501 post :create, :story => @attr
503 it 'コマモデルに単体取得を依頼している' do
504 Panel.should_receive(:show).with(@panel.id, @author).exactly(1)
505 post :create, :story => @attr
508 Story.any_instance.should_receive(:store).exactly(1)
509 post :create, :story => @attr
511 it "@storyに作成されたコマを保持していて、それがDBにある" do
512 post :create, :story => @attr
513 assigns(:story).should be_a(Story)
514 assigns(:story).should be_persisted
517 it 'ステータスコード302 Foundを返す' do
518 Story.any_instance.stub(:store).and_return(true)
519 post :create, :story => @attr
520 response.status.should eq 302
522 it 'コミックのストーリー表示へ遷移する' do
523 # Story.any_instance.stub(:store).and_return(true)
524 post :create, :story => @attr
525 response.should redirect_to(:action => :comic, :id => @attr[:comic_id])
529 it 'ステータスコード200 OKを返す' do
530 # Story.any_instance.stub(:store).and_return(true)
531 post :create, :story => @attr, :format => :json
532 response.should be_success
534 it '作成されたコマをjsonデータで返す' do
535 post :create, :story => @attr, :format => :json
536 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
538 it 'ストーリーモデルのストーリーのjson出力を問い合わせている' do
539 Story.any_instance.should_receive(:story_as_json).exactly(1)
540 post :create, :story => @attr, :format => :json
543 post :create, :story => @attr, :format => :json
544 json = JSON.parse response.body
545 json["t"].should eq 0
549 context 'ユーザ権限がないとき' do
554 it 'ステータスコード302 Foundを返す' do
555 post :create, :story => @attr
556 response.status.should eq 302
558 it 'サインインページへ遷移する' do
559 post :create, :story => @attr
560 response.body.should redirect_to '/users/sign_in'
564 it 'ステータスコード401 Unauthorizedを返す' do
565 post :create, :story => @attr, :format => :json
566 response.status.should eq 401
568 it '応答メッセージにUnauthorizedを返す' do
569 post :create, :story => @attr, :format => :json
570 response.message.should match(/Unauthorized/)
574 context 'ユーザ権限はないが管理者権限があるとき' do
580 it 'ステータスコード302 Foundを返す' do
581 post :create, :story => @attr
582 response.status.should eq 302
584 it 'サインインページへ遷移する' do
585 post :create, :story => @attr
586 response.body.should redirect_to '/users/sign_in'
590 context 'ユーザだが作家登録していないとき' do
595 it 'ステータスコード302 Foundを返す' do
596 post :create, :story => @attr
597 response.status.should eq 302
600 post :create, :story => @attr
601 response.body.should redirect_to new_author_path
605 context '検証、保存に失敗した' do
607 Story.any_instance.stub(:store).and_return(false)
609 it "未保存のコマを保持している" do
610 post :create, :story => @attr
611 assigns(:story).should be_a_new(Story)
614 it 'ステータスコード200 OKを返す' do
615 post :create, :story => @attr
616 response.status.should eq 200
619 post :create, :story => @attr
620 response.should render_template("new")
624 it 'ステータスコード422 unprocessable_entity を返す' do
625 post :create, :story => @attr, :format => :json
626 response.status.should eq 422
628 it '応答メッセージUnprocessable Entityを返す' do
629 post :create, :story => @attr, :format => :json
630 response.message.should match(/Unprocessable/)
636 describe '編集フォーム表示に於いて' do
638 @story = FactoryGirl.create :story, :author_id => @author.id
640 Story.stub(:show).and_return(@story)
642 context 'つつがなく終わるとき' do
643 it 'ストーリーモデルに編集取得を問い合わせている' do
644 Story.should_receive(:edit).exactly(1)
645 get :edit, :id => @story.id
647 it '@storyにデータを用意している' do
648 get :edit, :id => @story.id
649 assigns(:story).should eq @story
652 it 'ステータスコード200 OKを返す' do
653 get :edit, :id => @story.id
654 response.should be_success
656 it 'editテンプレートを描画する' do
657 get :edit, :id => @story.id
658 response.should render_template("edit")
662 it 'ステータスコード200 OKを返す' do
663 get :edit, :id => @story.id, :format => :js
664 response.should be_success
666 it 'edit.jsテンプレートを描画する' do
667 get :edit, :id => @story.id, :format => :js
668 response.should render_template("edit")
672 context 'ユーザ権限がないとき' do
677 it 'ステータスコード302 Foundを返す' do
678 get :edit, :id => @story.id
679 response.status.should eq 302
681 it 'サインインページへ遷移する' do
682 get :edit, :id => @story.id
683 response.body.should redirect_to '/users/sign_in'
687 it 'ステータスコード401 Unauthorizedを返す' do
688 get :edit, :id => @story.id, :format => :js
689 response.status.should eq 401
691 it '応答メッセージにUnauthorizedを返す' do
692 get :edit, :id => @story.id, :format => :js
693 response.message.should match(/Unauthorized/)
697 context 'ユーザ権限はないが管理者権限があるとき' do
703 it 'ステータスコード302 Foundを返す' do
704 get :edit, :id => @story.id
705 response.status.should eq 302
707 it 'サインインページへ遷移する' do
708 get :edit, :id => @story.id
709 response.body.should redirect_to '/users/sign_in'
713 context 'ユーザだが作家登録していないとき' do
718 it 'ステータスコード302 Foundを返す' do
719 get :edit, :id => @story.id
720 response.status.should eq 302
723 get :edit, :id => @story.id
724 response.body.should redirect_to new_author_path
732 @story = FactoryGirl.create :story, :author_id => @user.author.id
733 @attr = FactoryGirl.attributes_for(:story, :author_id => @author.id)
736 context 'つつがなく終わるとき' do
738 Story.stub(:edit).with(any_args).and_return(@story)
739 Story.should_receive(:edit).exactly(1)
740 put :update, :id => @story.id, :story => @attr
742 it 'POSTデータから、カラム値を復元している' do
743 Story.any_instance.stub(:store).and_return(true)
744 Story.any_instance.should_receive(:attributes=).exactly(1)
745 put :update, :id => @story.id, :story => @attr
748 Story.any_instance.should_receive(:overwrite).exactly(1)
749 put :update, :id => @story.id, :story => @attr
752 Story.any_instance.should_receive(:store).exactly(1)
753 put :update, :id => @story.id, :story => @attr
755 it "@storyに作成されたストーリーを保持していて、それがDBにある" do
756 put :update, :id => @story.id, :story => @attr
757 assigns(:story).should be_a(Story)
758 assigns(:story).should be_persisted
761 it 'ステータスコード302 Foundを返す' do
762 Story.any_instance.stub(:store).and_return(true)
763 put :update, :id => @story.id, :story => @attr
764 response.status.should eq 302
767 # Story.any_instance.stub(:store).and_return(true)
768 put :update, :id => @story.id, :story => @attr
769 response.should redirect_to(:action => :comic, :id => @attr[:comic_id])
773 it 'ステータスコード200 OKを返す' do
774 # Story.any_instance.stub(:store).and_return(true)
775 put :update, :id => @story.id, :story => @attr, :format => :json
776 response.should be_success
780 context 'ユーザ権限がないとき' do
785 it 'ステータスコード302 Foundを返す' do
786 put :update, :id => @story.id, :story => @attr
787 response.status.should eq 302
789 it 'サインインページへ遷移する' do
790 put :update, :id => @story.id, :story => @attr
791 response.body.should redirect_to '/users/sign_in'
795 it 'ステータスコード401 Unauthorizedを返す' do
796 put :update, :id => @story.id, :story => @attr, :format => :json
797 response.status.should eq 401
799 it '応答メッセージにUnauthorizedを返す' do
800 put :update, :id => @story.id, :story => @attr, :format => :json
801 response.message.should match(/Unauthorized/)
805 context 'ユーザ権限はないが管理者権限があるとき' do
811 it 'ステータスコード302 Foundを返す' do
812 put :update, :id => @story.id, :story => @attr
813 response.status.should eq 302
815 it 'サインインページへ遷移する' do
816 put :update, :id => @story.id, :story => @attr
817 response.body.should redirect_to '/users/sign_in'
821 context 'ユーザだが作家登録していないとき' do
826 it 'ステータスコード302 Foundを返す' do
827 put :update, :id => @story.id, :story => @attr
828 response.status.should eq 302
831 put :update, :id => @story.id, :story => @attr
832 response.body.should redirect_to new_author_path
836 context '検証、保存に失敗した' do
838 Story.any_instance.stub(:store).and_return(false)
841 put :update, :id => @story.id, :story => @attr
842 assigns(:story).should eq @story
845 it 'ステータスコード200 OKを返す' do
846 put :update, :id => @story.id, :story => @attr
847 response.status.should eq 200
850 put :update, :id => @story.id, :story => @attr
851 response.should render_template("edit")
855 it 'ステータスコード422 unprocessable_entity を返す' do
856 put :update, :id => @story.id, :story => @attr, :format => :json
857 response.status.should eq 422
859 it '応答メッセージUnprocessable Entityを返す' do
860 put :update, :id => @story.id, :story => @attr, :format => :json
861 response.message.should match(/Unprocessable/)
869 @story = FactoryGirl.create :story, :author_id => @author.id
871 Story.stub(:edit).and_return(@story)
873 context '事前チェックしておく' do
875 Story.stub(:edit).with(any_args()).and_return @story
876 Story.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(true)
878 it 'ストーリーモデルに編集取得を問い合わせている' do
879 Story.should_receive(:edit).exactly(1)
880 delete :destroy, :id => @story.id
883 Story.any_instance.should_receive(:destroy_and_shorten).exactly(1)
884 delete :destroy, :id => @story.id
886 it '@storyにアレを取得している' do
887 delete :destroy, :id => @story.id
888 assigns(:story).id.should eq(@story.id)
891 context 'つつがなく終わるとき' do
893 Story.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(true)
896 it 'ステータスコード302 Foundを返す' do
897 delete :destroy, :id => @story.id
898 response.status.should eq 302
901 delete :destroy, :id => @story.id
902 response.should redirect_to(:controller => 'stories', :action => :comic, :id => @story.comic_id)
906 it 'ステータスコード200 OKを返す' do
907 delete :destroy, :id => @story.id, :format => :json
908 response.should be_success
912 context 'ユーザ権限がないとき' do
917 it 'ステータスコード302 Foundを返す' do
918 delete :destroy, :id => @story.id
919 response.status.should eq 302
921 it 'サインインページへ遷移する' do
922 delete :destroy, :id => @story.id
923 response.body.should redirect_to '/users/sign_in'
927 it 'ステータスコード401 Unauthorizedを返す' do
928 delete :destroy, :id => @story.id, :format => :json
929 response.status.should eq 401
931 it '応答メッセージにUnauthorizedを返す' do
932 delete :destroy, :id => @story.id, :format => :json
933 response.message.should match(/Unauthorized/)
937 context 'ユーザ権限はないが管理者権限があるとき' do
943 it 'ステータスコード302 Foundを返す' do
944 delete :destroy, :id => @story.id
945 response.status.should eq 302
947 it 'サインインページへ遷移する' do
948 delete :destroy, :id => @story.id
949 response.body.should redirect_to '/users/sign_in'
953 context 'ユーザだが作家登録していないとき' do
958 it 'ステータスコード302 Foundを返す' do
959 delete :destroy, :id => @story.id
960 response.status.should eq 302
963 delete :destroy, :id => @story.id
964 response.body.should redirect_to new_author_path
968 context '削除に失敗したとき' do
970 Story.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(false)
973 it 'ステータスコード302 Foundを返す' do
974 delete :destroy, :id => @story.id
975 response.status.should eq 302
977 it 'そのコミックの詳細ページへ遷移する' do
978 delete :destroy, :id => @story.id
979 response.should redirect_to(story_path(@story))
983 it 'ステータスコード422 unprocessable_entity を返す' do
984 delete :destroy, :id => @story.id, :format => :json
985 response.status.should eq 422
987 it '応答メッセージUnprocessable Entityを返す' do
988 delete :destroy, :id => @story.id, :format => :json
989 response.message.should match(/Unprocessable/)
994 context '対象ストーリーがないとき' do
996 context '他人のストーリーだったとき' do
1002 describe '一覧表示に於いて' do
1005 @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id
1006 Story.stub(:list).and_return([@story, @story, @story])
1008 context 'つつがなく終わるとき' do
1009 it 'ステータスコード200 OKを返す' do
1011 response.should be_success
1014 it 'indexテンプレートを描画する' do
1016 response.should render_template("index")
1021 get :index, :format => :json
1022 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1026 context 'ユーザ権限がないとき' do
1030 it 'ステータスコード200 OKを返す' do
1032 response.should be_success
1035 it 'indexテンプレートを描画する' do
1037 response.should render_template("index")
1042 get :index, :format => :json
1043 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1049 describe '単体表示に於いて' do
1052 @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id
1053 Comic.stub(:show).with(@comic.id.to_s, [nil, nil]).and_return(@comic)
1054 Comic.stub(:show).with(@comic.id.to_s, [@user, nil]).and_return(@comic)
1055 Comic.stub(:show).with(@comic.id.to_s, [nil, @admin]).and_return(@comic)
1056 Story.stub(:show).with(@story.id.to_s, [nil, nil]).and_return(@story)
1057 Story.stub(:show).with(@story.id.to_s, [@user, nil]).and_return(@story)
1058 Story.stub(:show).with(@story.id.to_s, [nil, @admin]).and_return(@story)
1060 context 'つつがなく終わるとき' do
1062 it 'ステータスコード200 OKを返す' do
1063 get :show, :id => @story.id
1064 response.should be_success
1066 it 'showテンプレートを描画する' do
1067 get :show, :id => @story.id
1068 response.should render_template("show")
1072 it 'ステータスコード200 OKを返す' do
1073 get :show, :id => @story.id, :format => :json
1074 response.should be_success
1077 get :show, :id => @story.id, :format => :json
1078 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1082 context 'ユーザ権限がないとき' do
1087 it 'ステータスコード200 OKを返す' do
1088 get :show, :id => @story.id
1089 response.should be_success
1091 it 'showテンプレートを描画する' do
1092 get :show, :id => @story.id
1093 response.should render_template("show")
1097 it 'ステータスコード200 OKを返す' do
1098 get :show, :id => @story.id, :format => :json
1099 response.should be_success
1102 get :show, :id => @story.id, :format => :json
1103 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1109 describe '閲覧に於いて' do
1111 @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id
1112 Comic.stub(:show).with(@comic.id.to_s, [nil, nil]).and_return(@comic)
1113 Comic.stub(:show).with(@comic.id.to_s, [@user, nil]).and_return(@comic)
1114 Comic.stub(:show).with(@comic.id.to_s, [nil, @admin]).and_return(@comic)
1115 Story.stub(:count).and_return(10)
1116 Story.stub(:play_list).with(any_args).and_return([@story, @story, @story])
1119 context 'つつがなく終わるとき' do
1121 it 'ステータスコード200 OKを返す' do
1122 get :comic, :id => @comic.id
1123 response.should be_success
1125 it 'comicテンプレートを描画する' do
1126 get :comic, :id => @comic.id
1127 response.should render_template("comic")
1131 it 'ステータスコード200 OKを返す' do
1132 get :comic, :id => @comic.id, :format => :json
1133 response.should be_success
1136 get :comic, :id => @comic.id, :format => :json
1137 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1141 context 'ユーザ権限がないとき' do
1146 it 'ステータスコード200 OKを返す' do
1147 get :comic, :id => @comic.id
1148 response.should be_success
1150 it 'comicテンプレートを描画する' do
1151 get :comic, :id => @comic.id
1152 response.should render_template("comic")
1156 it 'ステータスコード200 OKを返す' do
1157 get :comic, :id => @comic.id, :format => :json
1158 response.should be_success
1161 get :comic, :id => @comic.id, :format => :json
1162 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1168 describe '新規作成フォーム表示に於いて' do
1172 context 'つつがなく終わるとき' do
1174 it 'ステータスコード200 OKを返す' do
1176 response.should be_success
1178 it 'newテンプレートを描画する' do
1180 response.should render_template("new")
1184 it 'ステータスコード200 OKを返す' do
1185 get :new, :format => :js
1186 response.should be_success
1188 it 'new.jsテンプレートを描画する' do
1189 get :new, :format => :js
1190 response.should render_template("new")
1194 it 'ステータスコード200 OKを返す' do
1195 get :new, :format => :json
1196 response.should be_success
1199 get :new, :format => :json
1200 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1204 context 'ユーザ権限がないとき' do
1209 it 'ステータスコード302 Foundを返す' do
1211 response.status.should eq 302
1213 it 'サインインページへ遷移する' do
1215 response.body.should redirect_to '/users/sign_in'
1219 it 'ステータスコード401 Unauthorizedを返す' do
1220 get :new, :format => :json
1221 response.status.should eq 401
1223 it '応答メッセージにUnauthorizedを返す' do
1224 get :new, :format => :json
1225 response.message.should match(/Unauthorized/)
1231 describe '新規作成に於いて' do
1233 @attr = FactoryGirl.attributes_for(:story, :t => nil, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id)
1236 context 'つつがなく終わるとき' do
1238 it 'ステータスコード302 Foundを返す' do
1239 Story.any_instance.stub(:store).and_return(true)
1240 post :create, :story => @attr
1241 response.status.should eq 302
1243 it 'コミックのストーリー表示へ遷移する' do
1244 # Story.any_instance.stub(:store).and_return(true)
1245 post :create, :story => @attr
1246 response.should redirect_to(:action => :comic, :id => @attr[:comic_id])
1250 it 'ステータスコード200 OKを返す' do
1251 # Story.any_instance.stub(:store).and_return(true)
1252 post :create, :story => @attr, :format => :json
1253 response.should be_success
1255 it '作成されたコマをjsonデータで返す' do
1256 post :create, :story => @attr, :format => :json
1257 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1261 context 'ユーザ権限がないとき' do
1266 it 'ステータスコード302 Foundを返す' do
1267 post :create, :story => @attr
1268 response.status.should eq 302
1270 it 'サインインページへ遷移する' do
1271 post :create, :story => @attr
1272 response.body.should redirect_to '/users/sign_in'
1276 it 'ステータスコード401 Unauthorizedを返す' do
1277 post :create, :story => @attr, :format => :json
1278 response.status.should eq 401
1280 it '応答メッセージにUnauthorizedを返す' do
1281 post :create, :story => @attr, :format => :json
1282 response.message.should match(/Unauthorized/)
1288 describe '編集フォーム表示に於いて' do
1290 @story = FactoryGirl.create :story, :author_id => @author.id
1292 Story.stub(:show).and_return(@story)
1294 context 'つつがなく終わるとき' do
1296 it 'ステータスコード200 OKを返す' do
1297 get :edit, :id => @story.id
1298 response.should be_success
1300 it 'editテンプレートを描画する' do
1301 get :edit, :id => @story.id
1302 response.should render_template("edit")
1306 it 'ステータスコード200 OKを返す' do
1307 get :edit, :id => @story.id, :format => :js
1308 response.should be_success
1310 it 'edit.jsテンプレートを描画する' do
1311 get :edit, :id => @story.id, :format => :js
1312 response.should render_template("edit")
1316 context 'ユーザ権限がないとき' do
1321 it 'ステータスコード302 Foundを返す' do
1322 get :edit, :id => @story.id
1323 response.status.should eq 302
1325 it 'サインインページへ遷移する' do
1326 get :edit, :id => @story.id
1327 response.body.should redirect_to '/users/sign_in'
1331 it 'ステータスコード401 Unauthorizedを返す' do
1332 get :edit, :id => @story.id, :format => :js
1333 response.status.should eq 401
1335 it '応答メッセージにUnauthorizedを返す' do
1336 get :edit, :id => @story.id, :format => :js
1337 response.message.should match(/Unauthorized/)
1343 describe '更新に於いて' do
1345 @story = FactoryGirl.create :story, :author_id => @user.author.id
1346 @attr = FactoryGirl.attributes_for(:story, :author_id => @author.id)
1349 context 'つつがなく終わるとき' do
1351 it 'ステータスコード302 Foundを返す' do
1352 Story.any_instance.stub(:store).and_return(true)
1353 put :update, :id => @story.id, :story => @attr
1354 response.status.should eq 302
1356 it 'ストーリー表示へ遷移する' do
1357 # Story.any_instance.stub(:store).and_return(true)
1358 put :update, :id => @story.id, :story => @attr
1359 response.should redirect_to(:action => :comic, :id => @attr[:comic_id])
1363 it 'ステータスコード200 OKを返す' do
1364 # Story.any_instance.stub(:store).and_return(true)
1365 put :update, :id => @story.id, :story => @attr, :format => :json
1366 response.should be_success
1370 context 'ユーザ権限がないとき' do
1375 it 'ステータスコード302 Foundを返す' do
1376 put :update, :id => @story.id, :story => @attr
1377 response.status.should eq 302
1379 it 'サインインページへ遷移する' do
1380 put :update, :id => @story.id, :story => @attr
1381 response.body.should redirect_to '/users/sign_in'
1385 it 'ステータスコード401 Unauthorizedを返す' do
1386 put :update, :id => @story.id, :story => @attr, :format => :json
1387 response.status.should eq 401
1389 it '応答メッセージにUnauthorizedを返す' do
1390 put :update, :id => @story.id, :story => @attr, :format => :json
1391 response.message.should match(/Unauthorized/)
1397 describe '削除に於いて' do
1399 @story = FactoryGirl.create :story, :author_id => @author.id
1401 Story.stub(:edit).and_return(@story)
1403 context 'つつがなく終わるとき' do
1405 Story.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(true)
1408 it 'ステータスコード302 Foundを返す' do
1409 delete :destroy, :id => @story.id
1410 response.status.should eq 302
1413 delete :destroy, :id => @story.id
1414 response.should redirect_to(:controller => 'stories', :action => :comic, :id => @story.comic_id)
1418 it 'ステータスコード200 OKを返す' do
1419 delete :destroy, :id => @story.id, :format => :json
1420 response.should be_success
1424 context 'ユーザ権限がないとき' do
1429 it 'ステータスコード302 Foundを返す' do
1430 delete :destroy, :id => @story.id
1431 response.status.should eq 302
1433 it 'サインインページへ遷移する' do
1434 delete :destroy, :id => @story.id
1435 response.body.should redirect_to '/users/sign_in'
1439 it 'ステータスコード401 Unauthorizedを返す' do
1440 delete :destroy, :id => @story.id, :format => :json
1441 response.status.should eq 401
1443 it '応答メッセージにUnauthorizedを返す' do
1444 delete :destroy, :id => @story.id, :format => :json
1445 response.message.should match(/Unauthorized/)