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 '@paginateにページ制御を取得している' do
65 assigns(:paginate).is_a?(Kaminari::PaginatableArray).should be_true
67 it 'indexテンプレートを描画する' do
69 response.should render_template("index")
74 get :index, :format => :json
75 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
77 it 'ストーリーモデルにjson一覧出力オプションを問い合わせている' do
78 Story.should_receive(:list_json_opt).exactly(1)
79 get :index, :format => :json
81 it 'データがリスト構造になっている' do
82 get :index, :format => :json
83 json = JSON.parse response.body
84 json.should have_at_least(3).items
86 it 'リストの先頭くらいはストーリーっぽいものであって欲しい' do
87 get :index, :format => :json
88 json = JSON.parse response.body
89 json.first.has_key?("panel_id").should be_true
90 json.first.has_key?("comic_id").should be_true
91 json.first.has_key?("t").should be_true
95 context 'ユーザ権限がないとき' do
100 it 'ステータスコード302 Foundを返す' do
102 response.status.should eq 302
104 it 'サインインページへ遷移する' do
106 response.should redirect_to '/users/sign_in'
110 it 'ステータスコード401 Unauthorizedを返す' do
111 get :index, :format => :json
112 response.status.should eq 401
114 it '応答メッセージにUnauthorizedを返す' do
115 get :index, :format => :json
116 response.message.should match(/Unauthorized/)
120 context 'ユーザ権限はないが管理者権限があるとき' do
125 it 'ステータスコード200 OKを返す' do
127 response.should be_success
130 context 'ユーザだが作家登録していないとき' do
134 it 'ステータスコード200 OKを返す' do
136 response.should be_success
141 describe '単体表示に於いて' do
144 @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id
145 Comic.stub(:show).with(@comic.id.to_s, [@user, nil]).and_return(@comic)
146 Comic.stub(:show).with(@comic.id.to_s, [nil, @admin]).and_return(@comic)
147 Story.stub(:show).with(@story.id.to_s, [@user, nil]).and_return(@story)
148 Story.stub(:show).with(@story.id.to_s, [nil, @admin]).and_return(@story)
150 context 'つつがなく終わるとき' do
151 it 'ストーリーモデルに単体取得を問い合わせている' do
152 Story.should_receive(:show).with(@story.id.to_s, [@user, nil]).exactly(1)
153 get :show, :id => @story.id
155 it '@storyにアレを取得している' do
156 get :show, :id => @story.id
157 assigns(:story).should eq @story
160 it 'ステータスコード200 OKを返す' do
161 get :show, :id => @story.id
162 response.should be_success
164 it 'showテンプレートを描画する' do
165 get :show, :id => @story.id
166 response.should render_template("show")
170 it 'ステータスコード200 OKを返す' do
171 get :show, :id => @story.id, :format => :json
172 response.should be_success
175 get :show, :id => @story.id, :format => :json
176 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
178 it 'ストーリーモデルにストーリーjson出力を問い合わせている' do
179 Story.any_instance.should_receive(:story_as_json).exactly(1)
180 get :show, :id => @story.id, :format => :json
183 get :show, :id => @story.id, :format => :json
184 json = JSON.parse response.body
185 json.has_key?("panel_id").should be_true
186 json.has_key?("comic_id").should be_true
187 json.has_key?("author_id").should be_true
191 context 'ユーザ権限がないとき' do
196 it 'ステータスコード302 Foundを返す' do
197 get :show, :id => @story.id
198 response.status.should eq 302
200 it 'サインインページへ遷移する' do
201 get :show, :id => @story.id
202 response.body.should redirect_to '/users/sign_in'
206 it 'ステータスコード401 Unauthorizedを返す' do
207 get :show, :id => @story.id, :format => :json
208 response.status.should eq 401
210 it '応答メッセージにUnauthorizedを返す' do
211 get :show, :id => @story.id, :format => :json
212 response.message.should match(/Unauthorized/)
216 context 'ユーザ権限はないが管理者権限があるとき' do
221 it 'ステータスコード200 OKを返す' do
222 get :show, :id => @story.id
223 response.should be_success
226 context 'ユーザだが作家登録していないとき' do
230 it 'ステータスコード200 OKを返す' do
231 get :show, :id => @story.id
232 response.should be_success
239 @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id
240 Comic.stub(:show).with(@comic.id.to_s, [@user, nil]).and_return(@comic)
241 Comic.stub(:show).with(@comic.id.to_s, [nil, @admin]).and_return(@comic)
242 Story.stub(:count).and_return(10)
243 Story.stub(:play_list).with(any_args).and_return([@story, @story, @story])
246 context 'パラメータチェックする' do
247 it '与えられたoffsetがセットされている' do
248 get :comic, :id => @comic.id, :offset => 5
249 assigns(:offset).should eq 5
251 it '省略されると@offsetに0値が入る' do
252 get :comic, :id => @comic.id
253 assigns(:offset).should eq 0
255 it '与えられたcountがセットされている' do
256 get :comic, :id => @comic.id, :count => 4
257 assigns(:panel_count).should eq 4
259 it '省略されると@panel_countにデフォルト値が入る' do
260 get :comic, :id => @comic.id
261 assigns(:panel_count).should eq Story.default_panel_size
263 it '最大を超えると@panel_countにデフォルト最大値が入る' do
264 get :comic, :id => @comic.id, :count => 1500
265 assigns(:panel_count).should eq Story.max_panel_size
267 it '不正な値が入ると@panel_countにデフォルト最大値が入る' do
268 get :comic, :id => @comic.id, :count => -1
269 assigns(:panel_count).should eq Story.default_panel_size
272 context '事前チェックする' do
273 it 'コミックモデルに単体取得を問い合わせている' do
274 Comic.should_receive(:show).with(@comic.id.to_s, [@user, nil]).exactly(1)
275 get :comic, :id => @comic.id
277 it 'ストーリーモデルにプレイリスト取得を問い合わせている' do
278 Story.should_receive(:play_list).with(@comic, @author, 0, 30).exactly(1)
279 get :comic, :id => @comic.id
282 context 'つつがなく終わるとき' do
283 it '@storiesにリストを取得している' do
284 get :comic, :id => @comic.id
285 assigns(:stories).should have_at_least(3).items
288 it 'ステータスコード200 OKを返す' do
289 get :comic, :id => @comic.id
290 response.should be_success
292 it 'comicテンプレートを描画する' do
293 get :comic, :id => @comic.id
294 response.should render_template("comic")
298 it 'ステータスコード200 OKを返す' do
299 get :comic, :id => @comic.id, :format => :json
300 response.should be_success
303 get :comic, :id => @comic.id, :format => :json
304 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
306 it 'ストーリーモデルにストーリーリストのjson出力を問い合わせている' do
307 Story.should_receive(:list_as_json_text).exactly(1)
308 get :comic, :id => @comic.id, :format => :json
310 it 'データがリスト構造になっている' do
311 get :comic, :id => @comic.id, :format => :json
312 json = JSON.parse response.body
313 json.should have_at_least(3).items
315 it 'リストの先頭くらいはストーリーっぽいものであって欲しい' do
316 get :comic, :id => @comic.id, :format => :json
317 json = JSON.parse response.body
318 json.first.has_key?("panel_id").should be_true
319 json.first.has_key?("comic_id").should be_true
320 json.first.has_key?("author_id").should be_true
324 context 'ユーザ権限がないとき' do
329 it 'ステータスコード302 Foundを返す' do
330 get :comic, :id => @comic.id
331 response.status.should eq 302
333 it 'サインインページへ遷移する' do
334 get :comic, :id => @comic.id
335 response.should redirect_to '/users/sign_in'
339 it 'ステータスコード401 Unauthorizedを返す' do
340 get :comic, :id => @comic.id, :format => :json
341 response.status.should eq 401
343 it '応答メッセージにUnauthorizedを返す' do
344 get :comic, :id => @comic.id, :format => :json
345 response.message.should match(/Unauthorized/)
349 context 'ユーザ権限はないが管理者権限があるとき' do
354 it 'ステータスコード200 OKを返す' do
355 get :comic, :id => @comic.id
356 response.should be_success
359 context 'ユーザだが作家登録していないとき' do
363 it 'ステータスコード200 OKを返す' do
364 get :comic, :id => @comic.id
365 response.should be_success
370 describe '新規作成フォーム表示に於いて' do
374 context 'つつがなく終わるとき' do
375 it '@storyに新規データを用意している' do
377 assigns(:story).should be_a_new(Story)
379 it 'モデルにデフォルト値補充を依頼している' do
380 Story.any_instance.should_receive(:supply_default).exactly(1)
384 it 'ステータスコード200 OKを返す' do
386 response.should be_success
388 it 'newテンプレートを描画する' do
390 response.should render_template("new")
394 it 'ステータスコード200 OKを返す' do
395 get :new, :format => :js
396 response.should be_success
398 it 'new.jsテンプレートを描画する' do
399 get :new, :format => :js
400 response.should render_template("new")
404 it 'ステータスコード200 OKを返す' do
405 get :new, :format => :json
406 response.should be_success
409 get :new, :format => :json
410 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
412 it 'ストーリーモデルのストーリーのjson出力を問い合わせている' do
413 Story.any_instance.should_receive(:story_as_json).exactly(1)
414 get :new, :format => :json
417 get :new, :format => :json
418 json = JSON.parse response.body
419 json.has_key?("panel_id").should be_true
420 json.has_key?("comic_id").should be_true
421 json.has_key?("author_id").should be_true
425 context 'ユーザ権限がないとき' do
430 it 'ステータスコード302 Foundを返す' do
432 response.status.should eq 302
434 it 'サインインページへ遷移する' do
436 response.body.should redirect_to '/users/sign_in'
440 it 'ステータスコード401 Unauthorizedを返す' do
441 get :new, :format => :json
442 response.status.should eq 401
444 it '応答メッセージにUnauthorizedを返す' do
445 get :new, :format => :json
446 response.message.should match(/Unauthorized/)
450 context 'ユーザ権限はないが管理者権限があるとき' do
456 it 'ステータスコード302 Foundを返す' do
458 response.status.should eq 302
460 it 'サインインページへ遷移する' do
462 response.body.should redirect_to '/users/sign_in'
466 context 'ユーザだが作家登録していないとき' do
471 it 'ステータスコード302 Foundを返す' do
473 response.status.should eq 302
477 response.body.should redirect_to new_author_path
483 describe '新規作成に於いて' do
485 @attr = FactoryGirl.attributes_for(:story, :t => nil, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id)
488 context 'つつがなく終わるとき' do
489 it 'デフォルト値補充を依頼する' do
490 Story.any_instance.should_receive(:supply_default).exactly(1)
491 post :create, :story => @attr
493 it 'POSTデータから、カラム値を復元している' do
494 Story.any_instance.stub(:store).and_return(true)
495 post :create, :story => @attr
496 assigns(:story).comic_id.should eq @comic.id
497 assigns(:story).panel_id.should eq @panel.id
500 Story.any_instance.should_receive(:overwrite).exactly(1)
501 post :create, :story => @attr
503 it 'コミックモデルに編集取得を依頼している' do
504 Comic.should_receive(:edit).with(@comic.id, @author).exactly(1)
505 post :create, :story => @attr
507 it 'コマモデルに単体取得を依頼している' do
508 Panel.should_receive(:show).with(@panel.id, @author).exactly(1)
509 post :create, :story => @attr
512 Story.any_instance.should_receive(:store).exactly(1)
513 post :create, :story => @attr
515 it "@storyに作成されたコマを保持していて、それがDBにある" do
516 post :create, :story => @attr
517 assigns(:story).should be_a(Story)
518 assigns(:story).should be_persisted
521 it 'ステータスコード302 Foundを返す' do
522 Story.any_instance.stub(:store).and_return(true)
523 post :create, :story => @attr
524 response.status.should eq 302
526 it 'コミックのストーリー表示へ遷移する' do
527 # Story.any_instance.stub(:store).and_return(true)
528 post :create, :story => @attr
529 response.should redirect_to(:action => :comic, :id => @attr[:comic_id])
533 it 'ステータスコード200 OKを返す' do
534 # Story.any_instance.stub(:store).and_return(true)
535 post :create, :story => @attr, :format => :json
536 response.should be_success
538 it '作成されたコマをjsonデータで返す' do
539 post :create, :story => @attr, :format => :json
540 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
542 it 'ストーリーモデルのストーリーのjson出力を問い合わせている' do
543 Story.any_instance.should_receive(:story_as_json).exactly(1)
544 post :create, :story => @attr, :format => :json
547 post :create, :story => @attr, :format => :json
548 json = JSON.parse response.body
549 json["t"].should eq 0
553 context 'ユーザ権限がないとき' do
558 it 'ステータスコード302 Foundを返す' do
559 post :create, :story => @attr
560 response.status.should eq 302
562 it 'サインインページへ遷移する' do
563 post :create, :story => @attr
564 response.body.should redirect_to '/users/sign_in'
568 it 'ステータスコード401 Unauthorizedを返す' do
569 post :create, :story => @attr, :format => :json
570 response.status.should eq 401
572 it '応答メッセージにUnauthorizedを返す' do
573 post :create, :story => @attr, :format => :json
574 response.message.should match(/Unauthorized/)
578 context 'ユーザ権限はないが管理者権限があるとき' do
584 it 'ステータスコード302 Foundを返す' do
585 post :create, :story => @attr
586 response.status.should eq 302
588 it 'サインインページへ遷移する' do
589 post :create, :story => @attr
590 response.body.should redirect_to '/users/sign_in'
594 context 'ユーザだが作家登録していないとき' do
599 it 'ステータスコード302 Foundを返す' do
600 post :create, :story => @attr
601 response.status.should eq 302
604 post :create, :story => @attr
605 response.body.should redirect_to new_author_path
609 context '検証、保存に失敗した' do
611 Story.any_instance.stub(:store).and_return(false)
613 it "未保存のコマを保持している" do
614 post :create, :story => @attr
615 assigns(:story).should be_a_new(Story)
618 it 'ステータスコード200 OKを返す' do
619 post :create, :story => @attr
620 response.status.should eq 200
623 post :create, :story => @attr
624 response.should render_template("new")
628 it 'ステータスコード422 unprocessable_entity を返す' do
629 post :create, :story => @attr, :format => :json
630 response.status.should eq 422
632 it '応答メッセージUnprocessable Entityを返す' do
633 post :create, :story => @attr, :format => :json
634 response.message.should match(/Unprocessable/)
640 describe '編集フォーム表示に於いて' do
642 @story = FactoryGirl.create :story, :author_id => @author.id
644 Story.stub(:show).and_return(@story)
646 context 'つつがなく終わるとき' do
647 it 'ストーリーモデルに編集取得を問い合わせている' do
648 Story.should_receive(:edit).exactly(1)
649 get :edit, :id => @story.id
651 it '@storyにデータを用意している' do
652 get :edit, :id => @story.id
653 assigns(:story).should eq @story
656 it 'ステータスコード200 OKを返す' do
657 get :edit, :id => @story.id
658 response.should be_success
660 it 'editテンプレートを描画する' do
661 get :edit, :id => @story.id
662 response.should render_template("edit")
666 it 'ステータスコード200 OKを返す' do
667 get :edit, :id => @story.id, :format => :js
668 response.should be_success
670 it 'edit.jsテンプレートを描画する' do
671 get :edit, :id => @story.id, :format => :js
672 response.should render_template("edit")
676 context 'ユーザ権限がないとき' do
681 it 'ステータスコード302 Foundを返す' do
682 get :edit, :id => @story.id
683 response.status.should eq 302
685 it 'サインインページへ遷移する' do
686 get :edit, :id => @story.id
687 response.body.should redirect_to '/users/sign_in'
691 it 'ステータスコード401 Unauthorizedを返す' do
692 get :edit, :id => @story.id, :format => :js
693 response.status.should eq 401
695 it '応答メッセージにUnauthorizedを返す' do
696 get :edit, :id => @story.id, :format => :js
697 response.message.should match(/Unauthorized/)
701 context 'ユーザ権限はないが管理者権限があるとき' do
707 it 'ステータスコード302 Foundを返す' do
708 get :edit, :id => @story.id
709 response.status.should eq 302
711 it 'サインインページへ遷移する' do
712 get :edit, :id => @story.id
713 response.body.should redirect_to '/users/sign_in'
717 context 'ユーザだが作家登録していないとき' do
722 it 'ステータスコード302 Foundを返す' do
723 get :edit, :id => @story.id
724 response.status.should eq 302
727 get :edit, :id => @story.id
728 response.body.should redirect_to new_author_path
736 @story = FactoryGirl.create :story, :author_id => @user.author.id
737 @attr = FactoryGirl.attributes_for(:story, :author_id => @author.id)
740 context 'つつがなく終わるとき' do
742 Story.stub(:edit).with(any_args).and_return(@story)
743 Story.should_receive(:edit).exactly(1)
744 put :update, :id => @story.id, :story => @attr
746 it 'POSTデータから、カラム値を復元している' do
747 Story.any_instance.stub(:store).and_return(true)
748 Story.any_instance.should_receive(:attributes=).exactly(1)
749 put :update, :id => @story.id, :story => @attr
752 Story.any_instance.should_receive(:overwrite).exactly(1)
753 put :update, :id => @story.id, :story => @attr
756 Story.any_instance.should_receive(:store).exactly(1)
757 put :update, :id => @story.id, :story => @attr
759 it "@storyに作成されたストーリーを保持していて、それがDBにある" do
760 put :update, :id => @story.id, :story => @attr
761 assigns(:story).should be_a(Story)
762 assigns(:story).should be_persisted
765 it 'ステータスコード302 Foundを返す' do
766 Story.any_instance.stub(:store).and_return(true)
767 put :update, :id => @story.id, :story => @attr
768 response.status.should eq 302
771 # Story.any_instance.stub(:store).and_return(true)
772 put :update, :id => @story.id, :story => @attr
773 response.should redirect_to(:action => :comic, :id => @attr[:comic_id])
777 it 'ステータスコード200 OKを返す' do
778 # Story.any_instance.stub(:store).and_return(true)
779 put :update, :id => @story.id, :story => @attr, :format => :json
780 response.should be_success
784 context 'ユーザ権限がないとき' do
789 it 'ステータスコード302 Foundを返す' do
790 put :update, :id => @story.id, :story => @attr
791 response.status.should eq 302
793 it 'サインインページへ遷移する' do
794 put :update, :id => @story.id, :story => @attr
795 response.body.should redirect_to '/users/sign_in'
799 it 'ステータスコード401 Unauthorizedを返す' do
800 put :update, :id => @story.id, :story => @attr, :format => :json
801 response.status.should eq 401
803 it '応答メッセージにUnauthorizedを返す' do
804 put :update, :id => @story.id, :story => @attr, :format => :json
805 response.message.should match(/Unauthorized/)
809 context 'ユーザ権限はないが管理者権限があるとき' do
815 it 'ステータスコード302 Foundを返す' do
816 put :update, :id => @story.id, :story => @attr
817 response.status.should eq 302
819 it 'サインインページへ遷移する' do
820 put :update, :id => @story.id, :story => @attr
821 response.body.should redirect_to '/users/sign_in'
825 context 'ユーザだが作家登録していないとき' do
830 it 'ステータスコード302 Foundを返す' do
831 put :update, :id => @story.id, :story => @attr
832 response.status.should eq 302
835 put :update, :id => @story.id, :story => @attr
836 response.body.should redirect_to new_author_path
840 context '検証、保存に失敗した' do
842 Story.any_instance.stub(:store).and_return(false)
845 put :update, :id => @story.id, :story => @attr
846 assigns(:story).should eq @story
849 it 'ステータスコード200 OKを返す' do
850 put :update, :id => @story.id, :story => @attr
851 response.status.should eq 200
854 put :update, :id => @story.id, :story => @attr
855 response.should render_template("edit")
859 it 'ステータスコード422 unprocessable_entity を返す' do
860 put :update, :id => @story.id, :story => @attr, :format => :json
861 response.status.should eq 422
863 it '応答メッセージUnprocessable Entityを返す' do
864 put :update, :id => @story.id, :story => @attr, :format => :json
865 response.message.should match(/Unprocessable/)
873 @story = FactoryGirl.create :story, :author_id => @author.id
875 Story.stub(:edit).and_return(@story)
877 context '事前チェックしておく' do
879 Story.stub(:edit).with(any_args()).and_return @story
880 Story.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(true)
882 it 'ストーリーモデルに編集取得を問い合わせている' do
883 Story.should_receive(:edit).exactly(1)
884 delete :destroy, :id => @story.id
887 Story.any_instance.should_receive(:destroy_and_shorten).exactly(1)
888 delete :destroy, :id => @story.id
890 it '@storyにアレを取得している' do
891 delete :destroy, :id => @story.id
892 assigns(:story).id.should eq(@story.id)
895 context 'つつがなく終わるとき' do
897 Story.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(true)
900 it 'ステータスコード302 Foundを返す' do
901 delete :destroy, :id => @story.id
902 response.status.should eq 302
905 delete :destroy, :id => @story.id
906 response.should redirect_to(:controller => 'stories', :action => :comic, :id => @story.comic_id)
910 it 'ステータスコード200 OKを返す' do
911 delete :destroy, :id => @story.id, :format => :json
912 response.should be_success
916 context 'ユーザ権限がないとき' do
921 it 'ステータスコード302 Foundを返す' do
922 delete :destroy, :id => @story.id
923 response.status.should eq 302
925 it 'サインインページへ遷移する' do
926 delete :destroy, :id => @story.id
927 response.body.should redirect_to '/users/sign_in'
931 it 'ステータスコード401 Unauthorizedを返す' do
932 delete :destroy, :id => @story.id, :format => :json
933 response.status.should eq 401
935 it '応答メッセージにUnauthorizedを返す' do
936 delete :destroy, :id => @story.id, :format => :json
937 response.message.should match(/Unauthorized/)
941 context 'ユーザ権限はないが管理者権限があるとき' do
947 it 'ステータスコード302 Foundを返す' do
948 delete :destroy, :id => @story.id
949 response.status.should eq 302
951 it 'サインインページへ遷移する' do
952 delete :destroy, :id => @story.id
953 response.body.should redirect_to '/users/sign_in'
957 context 'ユーザだが作家登録していないとき' do
962 it 'ステータスコード302 Foundを返す' do
963 delete :destroy, :id => @story.id
964 response.status.should eq 302
967 delete :destroy, :id => @story.id
968 response.body.should redirect_to new_author_path
972 context '削除に失敗したとき' do
974 Story.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(false)
977 it 'ステータスコード302 Foundを返す' do
978 delete :destroy, :id => @story.id
979 response.status.should eq 302
981 it 'そのコミックの詳細ページへ遷移する' do
982 delete :destroy, :id => @story.id
983 response.should redirect_to(story_path(@story))
987 it 'ステータスコード422 unprocessable_entity を返す' do
988 delete :destroy, :id => @story.id, :format => :json
989 response.status.should eq 422
991 it '応答メッセージUnprocessable Entityを返す' do
992 delete :destroy, :id => @story.id, :format => :json
993 response.message.should match(/Unprocessable/)
998 context '対象ストーリーがないとき' do
1000 context '他人のストーリーだったとき' do
1006 describe '一覧表示に於いて' do
1009 @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id
1010 Story.stub(:list).and_return([@story, @story, @story])
1012 context 'つつがなく終わるとき' do
1013 it 'ステータスコード200 OKを返す' do
1015 response.should be_success
1018 it 'indexテンプレートを描画する' do
1020 response.should render_template("index")
1025 get :index, :format => :json
1026 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1030 context 'ユーザ権限がないとき' do
1034 it 'ステータスコード200 OKを返す' do
1036 response.should be_success
1039 it 'indexテンプレートを描画する' do
1041 response.should render_template("index")
1046 get :index, :format => :json
1047 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1053 describe '単体表示に於いて' do
1056 @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id
1057 Comic.stub(:show).with(@comic.id.to_s, [nil, nil]).and_return(@comic)
1058 Comic.stub(:show).with(@comic.id.to_s, [@user, nil]).and_return(@comic)
1059 Comic.stub(:show).with(@comic.id.to_s, [nil, @admin]).and_return(@comic)
1060 Story.stub(:show).with(@story.id.to_s, [nil, nil]).and_return(@story)
1061 Story.stub(:show).with(@story.id.to_s, [@user, nil]).and_return(@story)
1062 Story.stub(:show).with(@story.id.to_s, [nil, @admin]).and_return(@story)
1064 context 'つつがなく終わるとき' do
1066 it 'ステータスコード200 OKを返す' do
1067 get :show, :id => @story.id
1068 response.should be_success
1070 it 'showテンプレートを描画する' do
1071 get :show, :id => @story.id
1072 response.should render_template("show")
1076 it 'ステータスコード200 OKを返す' do
1077 get :show, :id => @story.id, :format => :json
1078 response.should be_success
1081 get :show, :id => @story.id, :format => :json
1082 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1086 context 'ユーザ権限がないとき' do
1091 it 'ステータスコード200 OKを返す' do
1092 get :show, :id => @story.id
1093 response.should be_success
1095 it 'showテンプレートを描画する' do
1096 get :show, :id => @story.id
1097 response.should render_template("show")
1101 it 'ステータスコード200 OKを返す' do
1102 get :show, :id => @story.id, :format => :json
1103 response.should be_success
1106 get :show, :id => @story.id, :format => :json
1107 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1113 describe '閲覧に於いて' do
1115 @story = FactoryGirl.create :story, :t => 0, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id
1116 Comic.stub(:show).with(@comic.id.to_s, [nil, nil]).and_return(@comic)
1117 Comic.stub(:show).with(@comic.id.to_s, [@user, nil]).and_return(@comic)
1118 Comic.stub(:show).with(@comic.id.to_s, [nil, @admin]).and_return(@comic)
1119 Story.stub(:count).and_return(10)
1120 Story.stub(:play_list).with(any_args).and_return([@story, @story, @story])
1123 context 'つつがなく終わるとき' do
1125 it 'ステータスコード200 OKを返す' do
1126 get :comic, :id => @comic.id
1127 response.should be_success
1129 it 'comicテンプレートを描画する' do
1130 get :comic, :id => @comic.id
1131 response.should render_template("comic")
1135 it 'ステータスコード200 OKを返す' do
1136 get :comic, :id => @comic.id, :format => :json
1137 response.should be_success
1140 get :comic, :id => @comic.id, :format => :json
1141 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1145 context 'ユーザ権限がないとき' do
1150 it 'ステータスコード200 OKを返す' do
1151 get :comic, :id => @comic.id
1152 response.should be_success
1154 it 'comicテンプレートを描画する' do
1155 get :comic, :id => @comic.id
1156 response.should render_template("comic")
1160 it 'ステータスコード200 OKを返す' do
1161 get :comic, :id => @comic.id, :format => :json
1162 response.should be_success
1165 get :comic, :id => @comic.id, :format => :json
1166 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1172 describe '新規作成フォーム表示に於いて' do
1176 context 'つつがなく終わるとき' do
1178 it 'ステータスコード200 OKを返す' do
1180 response.should be_success
1182 it 'newテンプレートを描画する' do
1184 response.should render_template("new")
1188 it 'ステータスコード200 OKを返す' do
1189 get :new, :format => :js
1190 response.should be_success
1192 it 'new.jsテンプレートを描画する' do
1193 get :new, :format => :js
1194 response.should render_template("new")
1198 it 'ステータスコード200 OKを返す' do
1199 get :new, :format => :json
1200 response.should be_success
1203 get :new, :format => :json
1204 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1208 context 'ユーザ権限がないとき' do
1213 it 'ステータスコード302 Foundを返す' do
1215 response.status.should eq 302
1217 it 'サインインページへ遷移する' do
1219 response.body.should redirect_to '/users/sign_in'
1223 it 'ステータスコード401 Unauthorizedを返す' do
1224 get :new, :format => :json
1225 response.status.should eq 401
1227 it '応答メッセージにUnauthorizedを返す' do
1228 get :new, :format => :json
1229 response.message.should match(/Unauthorized/)
1235 describe '新規作成に於いて' do
1237 @attr = FactoryGirl.attributes_for(:story, :t => nil, :comic_id => @comic.id, :panel_id => @panel.id, :author_id => @author.id)
1240 context 'つつがなく終わるとき' do
1242 it 'ステータスコード302 Foundを返す' do
1243 Story.any_instance.stub(:store).and_return(true)
1244 post :create, :story => @attr
1245 response.status.should eq 302
1247 it 'コミックのストーリー表示へ遷移する' do
1248 # Story.any_instance.stub(:store).and_return(true)
1249 post :create, :story => @attr
1250 response.should redirect_to(:action => :comic, :id => @attr[:comic_id])
1254 it 'ステータスコード200 OKを返す' do
1255 # Story.any_instance.stub(:store).and_return(true)
1256 post :create, :story => @attr, :format => :json
1257 response.should be_success
1259 it '作成されたコマをjsonデータで返す' do
1260 post :create, :story => @attr, :format => :json
1261 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
1265 context 'ユーザ権限がないとき' do
1270 it 'ステータスコード302 Foundを返す' do
1271 post :create, :story => @attr
1272 response.status.should eq 302
1274 it 'サインインページへ遷移する' do
1275 post :create, :story => @attr
1276 response.body.should redirect_to '/users/sign_in'
1280 it 'ステータスコード401 Unauthorizedを返す' do
1281 post :create, :story => @attr, :format => :json
1282 response.status.should eq 401
1284 it '応答メッセージにUnauthorizedを返す' do
1285 post :create, :story => @attr, :format => :json
1286 response.message.should match(/Unauthorized/)
1292 describe '編集フォーム表示に於いて' do
1294 @story = FactoryGirl.create :story, :author_id => @author.id
1296 Story.stub(:show).and_return(@story)
1298 context 'つつがなく終わるとき' do
1300 it 'ステータスコード200 OKを返す' do
1301 get :edit, :id => @story.id
1302 response.should be_success
1304 it 'editテンプレートを描画する' do
1305 get :edit, :id => @story.id
1306 response.should render_template("edit")
1310 it 'ステータスコード200 OKを返す' do
1311 get :edit, :id => @story.id, :format => :js
1312 response.should be_success
1314 it 'edit.jsテンプレートを描画する' do
1315 get :edit, :id => @story.id, :format => :js
1316 response.should render_template("edit")
1320 context 'ユーザ権限がないとき' do
1325 it 'ステータスコード302 Foundを返す' do
1326 get :edit, :id => @story.id
1327 response.status.should eq 302
1329 it 'サインインページへ遷移する' do
1330 get :edit, :id => @story.id
1331 response.body.should redirect_to '/users/sign_in'
1335 it 'ステータスコード401 Unauthorizedを返す' do
1336 get :edit, :id => @story.id, :format => :js
1337 response.status.should eq 401
1339 it '応答メッセージにUnauthorizedを返す' do
1340 get :edit, :id => @story.id, :format => :js
1341 response.message.should match(/Unauthorized/)
1347 describe '更新に於いて' do
1349 @story = FactoryGirl.create :story, :author_id => @user.author.id
1350 @attr = FactoryGirl.attributes_for(:story, :author_id => @author.id)
1353 context 'つつがなく終わるとき' do
1355 it 'ステータスコード302 Foundを返す' do
1356 Story.any_instance.stub(:store).and_return(true)
1357 put :update, :id => @story.id, :story => @attr
1358 response.status.should eq 302
1360 it 'ストーリー表示へ遷移する' do
1361 # Story.any_instance.stub(:store).and_return(true)
1362 put :update, :id => @story.id, :story => @attr
1363 response.should redirect_to(:action => :comic, :id => @attr[:comic_id])
1367 it 'ステータスコード200 OKを返す' do
1368 # Story.any_instance.stub(:store).and_return(true)
1369 put :update, :id => @story.id, :story => @attr, :format => :json
1370 response.should be_success
1374 context 'ユーザ権限がないとき' do
1379 it 'ステータスコード302 Foundを返す' do
1380 put :update, :id => @story.id, :story => @attr
1381 response.status.should eq 302
1383 it 'サインインページへ遷移する' do
1384 put :update, :id => @story.id, :story => @attr
1385 response.body.should redirect_to '/users/sign_in'
1389 it 'ステータスコード401 Unauthorizedを返す' do
1390 put :update, :id => @story.id, :story => @attr, :format => :json
1391 response.status.should eq 401
1393 it '応答メッセージにUnauthorizedを返す' do
1394 put :update, :id => @story.id, :story => @attr, :format => :json
1395 response.message.should match(/Unauthorized/)
1401 describe '削除に於いて' do
1403 @story = FactoryGirl.create :story, :author_id => @author.id
1405 Story.stub(:edit).and_return(@story)
1407 context 'つつがなく終わるとき' do
1409 Story.any_instance.stub(:destroy_and_shorten).with(any_args()).and_return(true)
1412 it 'ステータスコード302 Foundを返す' do
1413 delete :destroy, :id => @story.id
1414 response.status.should eq 302
1417 delete :destroy, :id => @story.id
1418 response.should redirect_to(:controller => 'stories', :action => :comic, :id => @story.comic_id)
1422 it 'ステータスコード200 OKを返す' do
1423 delete :destroy, :id => @story.id, :format => :json
1424 response.should be_success
1428 context 'ユーザ権限がないとき' do
1433 it 'ステータスコード302 Foundを返す' do
1434 delete :destroy, :id => @story.id
1435 response.status.should eq 302
1437 it 'サインインページへ遷移する' do
1438 delete :destroy, :id => @story.id
1439 response.body.should redirect_to '/users/sign_in'
1443 it 'ステータスコード401 Unauthorizedを返す' do
1444 delete :destroy, :id => @story.id, :format => :json
1445 response.status.should eq 401
1447 it '応答メッセージにUnauthorizedを返す' do
1448 delete :destroy, :id => @story.id, :format => :json
1449 response.message.should match(/Unauthorized/)