1 # -*- encoding: utf-8 -*-
\r
2 require 'spec_helper'
\r
4 describe ComicsController do
\r
6 @admin =FactoryGirl.create :admin
\r
7 @sp = FactoryGirl.create :system_picture
\r
8 @lg = FactoryGirl.create :license_group
\r
9 @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
\r
10 @user = FactoryGirl.create :user_yas
\r
11 @author = FactoryGirl.create :author, :user_id => @user.id
\r
14 if MagicNumber['run_mode'] == 1
\r
15 describe '一覧表示に於いて' do
\r
17 @comic = FactoryGirl.create :comic, :author_id => @user.author.id
\r
18 Comic.stub(:list).and_return([@comic, @comic, @comic])
\r
21 context '事前チェックする' do
\r
22 it '与えられたpageがセットされている' do
\r
23 get :index, :page => 5
\r
24 assigns(:page).should eq 5
\r
26 it '省略されると@pageに1値が入る' do
\r
28 assigns(:page).should eq 1
\r
30 it '与えられたpage_sizeがセットされている' do
\r
31 get :index, :page_size => 15
\r
32 assigns(:page_size).should eq 15
\r
34 it '省略されると@page_sizeにデフォルト値が入る' do
\r
36 assigns(:page_size).should eq Comic.default_page_size
\r
38 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
\r
39 get :index, :page_size => 1500
\r
40 assigns(:page_size).should eq Comic.max_page_size
\r
42 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
\r
43 get :index, :page_size => 0
\r
44 assigns(:page_size).should eq Comic.default_page_size
\r
47 context 'つつがなく終わるとき' do
\r
48 it 'ステータスコード200 OKを返す' do
\r
50 response.should be_success
\r
52 it 'コミックモデルに一覧を問い合わせている' do
\r
53 Comic.should_receive(:list).exactly(1)
\r
56 it '@comicsにリストを取得している' do
\r
58 assigns(:comics).should have_at_least(3).items
\r
61 it 'indexテンプレートを描画する' do
\r
63 response.should render_template("index")
\r
68 get :index, :format => :json
\r
69 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
71 it 'コミックモデルにjson一覧出力オプションを問い合わせている' do
\r
72 Comic.should_receive(:list_json_opt).exactly(1)
\r
73 get :index, :format => :json
\r
75 it 'データがリスト構造になっている' do
\r
76 get :index, :format => :json
\r
77 json = JSON.parse response.body
\r
78 json.should have_at_least(3).items
\r
80 it 'リストの先頭くらいはコミックっぽいものであって欲しい' do
\r
81 get :index, :format => :json
\r
82 json = JSON.parse response.body
\r
83 json.first.has_key?("title").should be_true
\r
84 json.first.has_key?("visible").should be_true
\r
88 context '作家権限がないとき' do
\r
93 it 'ステータスコード302 Foundを返す' do
\r
95 response.status.should eq 302
\r
97 it 'サインインページへ遷移する' do
\r
99 response.should redirect_to '/users/sign_in'
\r
102 context 'json形式' do
\r
103 it 'ステータスコード401 Unauthorizedを返す' do
\r
104 get :index, :format => :json
\r
105 response.status.should eq 401
\r
107 it '応答メッセージにUnauthorizedを返す' do
\r
108 get :index, :format => :json
\r
109 response.message.should match(/Unauthorized/)
\r
115 describe '単体表示に於いて' do
\r
117 @comic = FactoryGirl.create :comic, :author_id => @user.author.id, :title => 'normal'
\r
118 Comic.stub(:show).and_return(@comic)
\r
121 context 'つつがなく終わるとき' do
\r
122 it 'ステータスコード200 OKを返す' do
\r
123 get :show, :id => @comic.id
\r
124 response.should be_success
\r
126 it 'コミックモデルに単体取得を問い合わせている' do
\r
127 Comic.should_receive(:show).exactly(1)
\r
130 it '@comicにアレを取得している' do
\r
131 get :show, :id => @comic.id
\r
132 assigns(:comic).id.should eq(@comic.id)
\r
134 context 'html形式' do
\r
135 it 'showテンプレートを描画する' do
\r
136 get :show, :id => @comic.id
\r
137 response.should render_template("show")
\r
140 context 'json形式' do
\r
142 get :show, :id => @comic.id, :format => :json
\r
143 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
145 it 'コミックモデルにjson単体出力オプションを問い合わせている' do
\r
146 Comic.should_receive(:show_json_opt).exactly(1)
\r
147 get :show, :id => @comic.id, :format => :json
\r
149 it 'データがアレになっている' do
\r
150 get :show, :id => @comic.id, :format => :json
\r
151 json = JSON.parse response.body
\r
152 json["title"].should match(/normal/)
\r
153 json["visible"].should_not be_nil
\r
157 context '作家権限がないとき' do
\r
161 context 'html形式' do
\r
162 it 'ステータスコード302 Foundを返す' do
\r
163 get :show, :id => @comic.id
\r
164 response.status.should eq 302
\r
166 it 'サインインページへ遷移する' do
\r
167 get :show, :id => @comic.id
\r
168 response.body.should redirect_to '/users/sign_in'
\r
171 context 'json形式' do
\r
172 it 'ステータスコード401 Unauthorizedを返す' do
\r
173 get :show, :id => @comic.id, :format => :json
\r
174 response.status.should eq 401
\r
176 it '応答メッセージにUnauthorizedを返す' do
\r
177 get :show, :id => @comic.id, :format => :json
\r
178 response.message.should match(/Unauthorized/)
\r
183 context '対象コミックがないとき' do
\r
184 context 'html形式' do
\r
185 it '例外404 not_foundを返す' do
\r
187 get :show, :id => 0
\r
188 }.should raise_error(ActiveRecord::RecordNotFound)
\r
191 context 'json形式' do
\r
192 it '例外404 not_foundを返す' do
\r
194 get :show, :id => 0, :format => :json
\r
195 }.should raise_error(ActiveRecord::RecordNotFound)
\r
199 context '非公開コミックを見ようとしたとき' do
\r
200 context 'html形式' do
\r
201 it '例外403 forbiddenを返す' do
\r
202 Comic.any_instance.stub(:visible?).with(any_args()).and_return(false)
\r
203 hidden = FactoryGirl.create :hidden_comic, :author_id => @author.id
\r
205 get :show, :id => hidden
\r
206 }.should raise_error(ActiveRecord::Forbidden)
\r
209 context 'json形式' do
\r
210 it '例外403 forbiddenを返す' do
\r
211 Comic.any_instance.stub(:visible?).with(any_args()).and_return(false)
\r
212 hidden = FactoryGirl.create :hidden_comic, :author_id => @author.id
\r
214 get :show, :id => hidden, :format => :json
\r
215 }.should raise_error(ActiveRecord::Forbidden)
\r
221 describe 'コミック数取得に於いて' do
\r
223 Comic.should_receive(:visible_count).and_return(3)
\r
226 context 'つつがなく終わるとき' do
\r
227 it 'ステータスコード200 OKを返す' do
\r
228 get :count, :format => :json
\r
229 response.should be_success
\r
231 context 'json形式' do
\r
233 get :count, :format => :json
\r
234 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
236 it 'データがHash構造になっていてコミック数が1である' do
\r
237 get :count, :format => :json
\r
238 json = JSON.parse response.body
\r
239 json["count"].should == 3
\r
245 describe '新規作成フォーム表示に於いて' do
\r
249 context 'つつがなく終わるとき' do
\r
250 it 'ステータスコード200 OKを返す' do
\r
252 response.should be_success
\r
254 it '@comicに新規データを用意している' do
\r
256 assigns(:comic).should be_a_new(Comic)
\r
258 it 'コミックモデルにデフォルト値補充を依頼している' do
\r
259 Comic.any_instance.should_receive(:supply_default).exactly(1)
\r
262 context 'html形式' do
\r
263 it 'newテンプレートを描画する' do
\r
265 response.should render_template("new")
\r
269 it 'new.jsテンプレートを描画する' do
\r
270 get :new, :format => :js
\r
271 response.should render_template("new")
\r
274 context 'json形式' do
\r
276 get :new, :format => :json
\r
277 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
279 it 'コミックモデルにjson単体出力オプションを問い合わせている' do
\r
280 Comic.should_receive(:show_json_opt).exactly(1)
\r
281 get :new, :format => :json
\r
285 context '作家権限がないとき' do
\r
289 context 'html形式' do
\r
290 it 'ステータスコード302 Foundを返す' do
\r
292 response.status.should eq 302
\r
294 it 'サインインページへ遷移する' do
\r
296 response.body.should redirect_to '/users/sign_in'
\r
300 it 'ステータスコード401 Unauthorizedを返す' do
\r
301 get :new, :format => :js
\r
302 response.status.should eq 401
\r
304 it '応答メッセージにUnauthorizedを返す' do
\r
305 get :new, :format => :js
\r
306 response.message.should match(/Unauthorized/)
\r
309 context 'json形式' do
\r
310 it 'ステータスコード401 Unauthorizedを返す' do
\r
311 get :new, :format => :json
\r
312 response.status.should eq 401
\r
314 it '応答メッセージにUnauthorizedを返す' do
\r
315 get :new, :format => :json
\r
316 response.message.should match(/Unauthorized/)
\r
322 describe '新規作成に於いて' do
\r
325 @attr = FactoryGirl.attributes_for(:comic, :author_id => @author.id, :title => 'normal')
\r
327 context '事前チェックしておく' do
\r
328 it 'コミックモデルにデフォルト値補充を依頼している' do
\r
329 Comic.any_instance.should_receive(:supply_default).exactly(1)
\r
330 post :create, :comic => @attr
\r
332 it 'コミックモデルにカラム値復元を依頼している' do
\r
333 Comic.any_instance.should_receive(:attributes=).exactly(1)
\r
334 post :create, :comic => @attr
\r
336 it 'コミックモデルに上書き補充を依頼している' do
\r
337 Comic.any_instance.should_receive(:overwrite).exactly(1)
\r
338 post :create, :comic => @attr
\r
341 Comic.any_instance.should_receive(:save).exactly(1)
\r
342 post :create, :comic => @attr
\r
345 context 'つつがなく終わるとき' do
\r
346 it "@comicに作成されたコミックを保持していて、それがDBにある" do
\r
347 post :create, :comic => @attr
\r
348 assigns(:comic).should be_a(Comic)
\r
349 assigns(:comic).should be_persisted
\r
351 context 'html形式' do
\r
352 it 'ステータスコード302 Foundを返す' do
\r
353 Comic.any_instance.stub(:save).and_return(true)
\r
354 post :create, :comic => @attr
\r
355 response.status.should eq 302
\r
357 it '作成されたコミックの表示ページへ遷移する' do
\r
358 # Comic.any_instance.stub(:save).and_return(true)
\r
359 post :create, :comic => @attr
\r
360 response.should redirect_to(Comic.last)
\r
363 context 'json形式' do
\r
364 it 'ステータスコード200 OKを返す' do
\r
365 # Comic.any_instance.stub(:save).and_return(true)
\r
366 post :create, :comic => @attr, :format => :json
\r
367 response.should be_success
\r
369 it '作成されたコミックをjsonデータで返す' do
\r
370 post :create, :comic => @attr, :format => :json
\r
371 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
373 it 'データがアレになっている' do
\r
374 post :create, :comic => @attr, :format => :json
\r
375 json = JSON.parse response.body
\r
376 json["title"].should match(/normal/)
\r
377 json["visible"].should_not be_nil
\r
381 context '作家権限がないとき' do
\r
385 context 'html形式' do
\r
386 it 'ステータスコード302 Foundを返す' do
\r
387 post :create, :comic => @attr
\r
388 response.status.should eq 302
\r
390 it 'サインインページへ遷移する' do
\r
391 post :create, :comic => @attr
\r
392 response.body.should redirect_to '/users/sign_in'
\r
395 context 'json形式' do
\r
396 it 'ステータスコード401 Unauthorizedを返す' do
\r
397 post :create, :comic => @attr, :format => :json
\r
398 response.status.should eq 401
\r
400 it '応答メッセージにUnauthorizedを返す' do
\r
401 post :create, :comic => @attr, :format => :json
\r
402 response.message.should match(/Unauthorized/)
\r
406 context '検証、保存に失敗した' do
\r
408 Comic.any_instance.stub(:save).and_return(false)
\r
410 it "未保存のコミックを保持している" do
\r
411 post :create, :comic => @attr
\r
412 assigns(:comic).should be_a_new(Comic)
\r
414 context 'html形式' do
\r
415 it 'ステータスコード200 OKを返す' do
\r
416 post :create, :comic => @attr
\r
417 response.status.should eq 200
\r
420 post :create, :comic => @attr
\r
421 response.should render_template("new")
\r
424 context 'json形式' do
\r
425 it 'ステータスコード422 unprocessable_entity を返す' do
\r
426 post :create, :comic => @attr, :format => :json
\r
427 response.status.should eq 422
\r
429 it '応答メッセージUnprocessable Entityを返す' do
\r
430 post :create, :comic => @attr, :format => :json
\r
431 response.message.should match(/Unprocessable/)
\r
437 describe '編集フォーム表示に於いて' do
\r
439 @comic = FactoryGirl.create :comic, :author_id => @user.author.id
\r
441 Comic.stub(:edit).and_return(@comic)
\r
443 context 'つつがなく終わるとき' do
\r
444 it 'ステータスコード200 OKを返す' do
\r
445 get :edit, :id => @comic.id
\r
446 response.should be_success
\r
448 it 'コミックモデルに編集取得を問い合わせている' do
\r
449 Comic.should_receive(:edit).exactly(1)
\r
450 get :edit, :id => @comic.id
\r
452 it '@comicにデータを用意している' do
\r
453 get :edit, :id => @comic.id
\r
454 assigns(:comic).should eq @comic
\r
456 context 'html形式' do
\r
457 it 'editテンプレートを描画する' do
\r
458 get :edit, :id => @comic.id
\r
459 response.should render_template("edit")
\r
463 it 'edit.jsテンプレートを描画する' do
\r
464 get :edit, :id => @comic.id, :format => :js
\r
465 response.should render_template("edit")
\r
469 context '作家権限がないとき' do
\r
473 context 'html形式' do
\r
474 it 'ステータスコード302 Foundを返す' do
\r
475 get :edit, :id => @comic.id
\r
476 response.status.should eq 302
\r
478 it 'サインインページへ遷移する' do
\r
479 get :edit, :id => @comic.id
\r
480 response.body.should redirect_to '/users/sign_in'
\r
484 it 'ステータスコード401 Unauthorizedを返す' do
\r
485 get :edit, :id => @comic.id, :format => :js
\r
486 response.status.should eq 401
\r
488 it '応答メッセージにUnauthorizedを返す' do
\r
489 get :edit, :id => @comic.id, :format => :js
\r
490 response.message.should match(/Unauthorized/)
\r
496 describe '更新に於いて' do
\r
498 @comic = FactoryGirl.create :comic, :author => @author
\r
499 @attr = FactoryGirl.attributes_for(:comic, :author_id => @author.id, :title => 'updated title', :visible => 0)
\r
502 context '事前チェックしておく' do
\r
503 it 'コミックモデルに編集取得を問い合わせている' do
\r
504 Comic.stub(:edit).with(any_args()).and_return @comic
\r
505 Comic.should_receive(:edit).exactly(1)
\r
506 put :update, :id => @comic.id, :comic => @attr
\r
508 it 'コミックモデルにカラム値復元を依頼している' do
\r
509 Comic.any_instance.should_receive(:attributes=).exactly(1)
\r
510 put :update, :id => @comic.id, :comic => @attr
\r
512 it 'コミックモデルに上書き補充を依頼している' do
\r
513 Comic.any_instance.should_receive(:overwrite).exactly(1)
\r
514 put :update, :id => @comic.id, :comic => @attr
\r
516 it 'モデルに更新を依頼する' do
\r
517 Comic.any_instance.stub(:save).with(any_args).and_return true
\r
518 Comic.any_instance.should_receive(:save).exactly(1)
\r
519 put :update, :id => @comic.id, :comic => @attr
\r
521 it '@comicにアレを取得している' do
\r
522 put :update, :id => @comic.id, :comic => @attr
\r
523 assigns(:comic).id.should eq(@comic.id)
\r
526 context 'つつがなく終わるとき' do
\r
528 put :update, :id => @comic.id, :comic => @attr
\r
529 Comic.find(@comic.id).visible.should eq 0
\r
531 context 'html形式' do
\r
532 it 'ステータスコード302 Foundを返す' do
\r
533 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
534 put :update, :id => @comic.id, :comic => @attr
\r
535 response.status.should eq 302
\r
537 it '更新されたコミックの表示ページへ遷移する' do
\r
538 put :update, :id => @comic.id, :comic => @attr
\r
539 response.should redirect_to(@comic)
\r
542 context 'json形式' do
\r
543 it 'ステータスコード200 OKを返す' do
\r
544 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
545 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
546 response.should be_success
\r
548 it 'ページ本体は特に返さない' do
\r
549 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
550 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
551 response.body.should match /./
\r
555 context '作家権限がないとき' do
\r
559 it 'ステータスコード302 Foundを返す' do
\r
560 put :update, :id => @comic.id, :comic => @attr
\r
561 response.status.should eq 302
\r
563 context 'html形式' do
\r
564 it 'サインインページへ遷移する' do
\r
565 put :update, :id => @comic.id, :comic => @attr
\r
566 response.body.should redirect_to '/users/sign_in'
\r
569 context 'json形式' do
\r
570 it '応答メッセージにUnauthorizedを返す' do
\r
571 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
572 response.message.should match(/Unauthorized/)
\r
576 context '検証、保存に失敗したとき' do
\r
578 Comic.any_instance.stub(:save).and_return(false)
\r
580 context 'html形式' do
\r
581 it 'ステータスコード200 Okを返す' do
\r
582 put :update, :id => @comic.id, :comic => @attr
\r
583 response.status.should eq 200
\r
586 put :update, :id => @comic.id, :comic => @attr
\r
587 response.should render_template("edit")
\r
590 context 'json形式' do
\r
591 it 'ステータスコード422 unprocessable_entity を返す' do
\r
592 Comic.any_instance.stub(:save).and_return(false)
\r
593 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
594 response.status.should eq 422
\r
596 it '応答メッセージUnprocessable Entityを返す' do
\r
597 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
598 response.message.should match(/Unprocessable/)
\r
604 describe '削除に於いて' do
\r
606 @comic = FactoryGirl.create :comic, :author => @author
\r
609 context '事前チェックしておく' do
\r
611 Comic.stub(:edit).with(any_args()).and_return @comic
\r
612 Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)
\r
614 it 'コミックモデルに編集取得を問い合わせている' do
\r
615 Comic.should_receive(:edit).exactly(1)
\r
616 delete :destroy, :id => @comic.id
\r
618 it 'モデルに削除を依頼する' do
\r
619 Comic.any_instance.should_receive(:destroy_with_story).exactly(1)
\r
620 delete :destroy, :id => @comic.id
\r
622 it '@comicにアレを取得している' do
\r
623 delete :destroy, :id => @comic.id
\r
624 assigns(:comic).id.should eq(@comic.id)
\r
627 context 'つつがなく終わるとき' do
\r
630 delete :destroy, :id => @comic.id
\r
631 }.should change Comic, :count
\r
633 context 'html形式' do
\r
635 Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)
\r
637 it 'ステータスコード302 Foundを返す' do
\r
638 delete :destroy, :id => @comic.id
\r
639 response.status.should eq 302
\r
641 it 'マイコミックの一覧ページへ遷移する' do
\r
642 delete :destroy, :id => @comic.id
\r
643 response.should redirect_to('/home/comic')
\r
646 context 'json形式' do
\r
648 Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)
\r
650 it 'ステータスコード200 OKを返す' do
\r
651 delete :destroy, :id => @comic.id, :format => :json
\r
652 response.should be_success
\r
654 it 'ページ本体は特に返さない' do
\r
655 delete :destroy, :id => @comic.id, :format => :json
\r
656 response.body.should match /./
\r
660 context '作家権限がないとき' do
\r
664 it 'ステータスコード302 Foundを返す' do
\r
665 delete :destroy, :id => @comic.id
\r
666 response.status.should eq 302
\r
668 context 'html形式' do
\r
669 it 'サインインページへ遷移する' do
\r
670 delete :destroy, :id => @comic.id
\r
671 response.body.should redirect_to '/users/sign_in'
\r
674 context 'json形式' do
\r
675 it '応答メッセージにUnauthorizedを返す' do
\r
676 delete :destroy, :id => @comic.id, :format => :json
\r
677 response.message.should match(/Unauthorized/)
\r
681 context '削除に失敗したとき' do
\r
683 Comic.any_instance.stub(:destroy_with_story).and_return(false)
\r
685 context 'html形式' do
\r
686 it 'ステータスコード302 Foundを返す' do
\r
687 delete :destroy, :id => @comic.id
\r
688 response.status.should eq 302
\r
690 it 'そのコミックの詳細ページへ遷移する' do
\r
691 delete :destroy, :id => @comic.id
\r
692 response.should redirect_to(comic_path(@comic))
\r
695 context 'json形式' do
\r
696 it 'ステータスコード422 unprocessable_entity を返す' do
\r
697 delete :destroy, :id => @comic.id, :format => :json
\r
698 response.status.should eq 422
\r
700 it '応答メッセージUnprocessable Entityを返す' do
\r
701 delete :destroy, :id => @comic.id, :format => :json
\r
702 response.message.should match(/Unprocessable/)
\r
709 describe '一覧表示に於いて' do
\r
711 @comic = FactoryGirl.create :comic, :author_id => @user.author.id
\r
712 Comic.stub(:list).and_return([@comic, @comic, @comic])
\r
715 context 'つつがなく終わるとき' do
\r
716 it 'ステータスコード200 OKを返す' do
\r
718 response.should be_success
\r
720 context 'html形式' do
\r
721 it 'indexテンプレートを描画する' do
\r
723 response.should render_template("index")
\r
726 context 'json形式' do
\r
728 get :index, :format => :json
\r
729 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
733 context '作家権限がないとき' do
\r
737 it 'ステータスコード200 OKを返す' do
\r
739 response.should be_success
\r
741 context 'html形式' do
\r
742 it 'indexテンプレートを描画する' do
\r
744 response.should render_template("index")
\r
747 context 'json形式' do
\r
749 get :index, :format => :json
\r
750 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
756 describe '単体表示に於いて' do
\r
758 @comic = FactoryGirl.create :comic, :author_id => @user.author.id, :title => 'normal'
\r
759 Comic.stub(:show).and_return(@comic)
\r
762 context 'つつがなく終わるとき' do
\r
763 it 'ステータスコード200 OKを返す' do
\r
764 get :show, :id => @comic.id
\r
765 response.should be_success
\r
767 context 'html形式' do
\r
768 it 'showテンプレートを描画する' do
\r
769 get :show, :id => @comic.id
\r
770 response.should render_template("show")
\r
773 context 'json形式' do
\r
775 get :show, :id => @comic.id, :format => :json
\r
776 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
780 context '作家権限がないとき' do
\r
784 it 'ステータスコード200 OKを返す' do
\r
785 get :show, :id => @comic.id
\r
786 response.should be_success
\r
788 context 'html形式' do
\r
789 it 'showテンプレートを描画する' do
\r
790 get :show, :id => @comic.id
\r
791 response.should render_template("show")
\r
794 context 'json形式' do
\r
796 get :show, :id => @comic.id, :format => :json
\r
797 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
802 describe 'コミック数取得に於いて' do
\r
804 Comic.should_receive(:visible_count).and_return(3)
\r
807 context 'つつがなく終わるとき' do
\r
808 it 'ステータスコード200 OKを返す' do
\r
809 get :count, :format => :json
\r
810 response.should be_success
\r
812 context 'json形式' do
\r
814 get :count, :format => :json
\r
815 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
821 describe '新規作成フォーム表示に於いて' do
\r
825 context 'つつがなく終わるとき' do
\r
826 it 'ステータスコード200 OKを返す' do
\r
828 response.should be_success
\r
830 context 'html形式' do
\r
831 it 'newテンプレートを描画する' do
\r
833 response.should render_template("new")
\r
837 it 'new.jsテンプレートを描画する' do
\r
838 get :new, :format => :js
\r
839 response.should render_template("new")
\r
842 context 'json形式' do
\r
844 get :new, :format => :json
\r
845 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
849 context '作家権限がないとき' do
\r
853 context 'html形式' do
\r
854 it 'ステータスコード302 Foundを返す' do
\r
856 response.status.should eq 302
\r
858 it 'サインインページへ遷移する' do
\r
860 response.body.should redirect_to '/users/sign_in'
\r
864 it 'ステータスコード401 Unauthorizedを返す' do
\r
865 get :new, :format => :js
\r
866 response.status.should eq 401
\r
868 it '応答メッセージにUnauthorizedを返す' do
\r
869 get :new, :format => :js
\r
870 response.message.should match(/Unauthorized/)
\r
873 context 'json形式' do
\r
874 it 'ステータスコード401 Unauthorizedを返す' do
\r
875 get :new, :format => :json
\r
876 response.status.should eq 401
\r
878 it '応答メッセージにUnauthorizedを返す' do
\r
879 get :new, :format => :json
\r
880 response.message.should match(/Unauthorized/)
\r
886 describe '新規作成に於いて' do
\r
889 @attr = FactoryGirl.attributes_for(:comic, :author_id => @author.id, :title => 'normal')
\r
891 context 'つつがなく終わるとき' do
\r
892 context 'html形式' do
\r
893 it 'ステータスコード302 Foundを返す' do
\r
894 Comic.any_instance.stub(:save).and_return(true)
\r
895 post :create, :comic => @attr
\r
896 response.status.should eq 302
\r
898 it '作成されたコミックの表示ページへ遷移する' do
\r
899 # Comic.any_instance.stub(:save).and_return(true)
\r
900 post :create, :comic => @attr
\r
901 response.should redirect_to(Comic.last)
\r
904 context 'json形式' do
\r
905 it 'ステータスコード200 OKを返す' do
\r
906 # Comic.any_instance.stub(:save).and_return(true)
\r
907 post :create, :comic => @attr, :format => :json
\r
908 response.should be_success
\r
910 it '作成されたコミックをjsonデータで返す' do
\r
911 post :create, :comic => @attr, :format => :json
\r
912 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
916 context '作家権限がないとき' do
\r
920 context 'html形式' do
\r
921 it 'ステータスコード302 Foundを返す' do
\r
922 post :create, :comic => @attr
\r
923 response.status.should eq 302
\r
925 it 'サインインページへ遷移する' do
\r
926 post :create, :comic => @attr
\r
927 response.body.should redirect_to '/users/sign_in'
\r
930 context 'json形式' do
\r
931 it 'ステータスコード401 Unauthorizedを返す' do
\r
932 post :create, :comic => @attr, :format => :json
\r
933 response.status.should eq 401
\r
935 it '応答メッセージにUnauthorizedを返す' do
\r
936 post :create, :comic => @attr, :format => :json
\r
937 response.message.should match(/Unauthorized/)
\r
943 describe '編集フォーム表示に於いて' do
\r
945 @comic = FactoryGirl.create :comic, :author_id => @user.author.id
\r
947 Comic.stub(:edit).and_return(@comic)
\r
949 context 'つつがなく終わるとき' do
\r
950 it 'ステータスコード200 OKを返す' do
\r
951 get :edit, :id => @comic.id
\r
952 response.should be_success
\r
954 context 'html形式' do
\r
955 it 'editテンプレートを描画する' do
\r
956 get :edit, :id => @comic.id
\r
957 response.should render_template("edit")
\r
961 it 'edit.jsテンプレートを描画する' do
\r
962 get :edit, :id => @comic.id, :format => :js
\r
963 response.should render_template("edit")
\r
967 context '作家権限がないとき' do
\r
971 context 'html形式' do
\r
972 it 'ステータスコード302 Foundを返す' do
\r
973 get :edit, :id => @comic.id
\r
974 response.status.should eq 302
\r
976 it 'サインインページへ遷移する' do
\r
977 get :edit, :id => @comic.id
\r
978 response.body.should redirect_to '/users/sign_in'
\r
982 it 'ステータスコード401 Unauthorizedを返す' do
\r
983 get :edit, :id => @comic.id, :format => :js
\r
984 response.status.should eq 401
\r
986 it '応答メッセージにUnauthorizedを返す' do
\r
987 get :edit, :id => @comic.id, :format => :js
\r
988 response.message.should match(/Unauthorized/)
\r
994 describe '更新に於いて' do
\r
996 @comic = FactoryGirl.create :comic, :author => @author
\r
997 @attr = FactoryGirl.attributes_for(:comic, :author_id => @author.id, :title => 'updated title', :visible => 0)
\r
1000 context 'つつがなく終わるとき' do
\r
1001 context 'html形式' do
\r
1002 it 'ステータスコード302 Foundを返す' do
\r
1003 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
1004 put :update, :id => @comic.id, :comic => @attr
\r
1005 response.status.should eq 302
\r
1007 it '更新されたコミックの表示ページへ遷移する' do
\r
1008 put :update, :id => @comic.id, :comic => @attr
\r
1009 response.should redirect_to(@comic)
\r
1012 context 'json形式' do
\r
1013 it 'ステータスコード200 OKを返す' do
\r
1014 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
1015 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
1016 response.should be_success
\r
1018 it 'ページ本体は特に返さない' do
\r
1019 Comic.any_instance.stub(:save).with(any_args()).and_return(true)
\r
1020 put :update, :id => @comic.id, :comic => @attr, :format => :json
\r
1021 response.body.should match /./
\r
1025 context '作家権限がないとき' do
\r
1029 it 'ステータスコード302 Foundを返す' do
\r
1030 put :update, :id => @comic.id, :comic => @attr
\r
1031 response.status.should eq 302
\r
1033 context 'html形式' do
\r
1034 it 'サインインページへ遷移する' do
\r
1035 put :update, :id => @comic.id, :comic => @attr
\r
1036 response.body.should redirect_to '/users/sign_in'
\r
1042 describe '削除に於いて' do
\r
1044 @comic = FactoryGirl.create :comic, :author => @author
\r
1047 context 'つつがなく終わるとき' do
\r
1048 context 'html形式' do
\r
1050 Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)
\r
1052 it 'ステータスコード302 Foundを返す' do
\r
1053 delete :destroy, :id => @comic.id
\r
1054 response.status.should eq 302
\r
1056 it 'マイコミックの一覧ページへ遷移する' do
\r
1057 delete :destroy, :id => @comic.id
\r
1058 response.should redirect_to('/home/comic')
\r
1061 context 'json形式' do
\r
1063 Comic.any_instance.stub(:destroy_with_story).with(any_args()).and_return(true)
\r
1065 it 'ステータスコード200 OKを返す' do
\r
1066 delete :destroy, :id => @comic.id, :format => :json
\r
1067 response.should be_success
\r
1069 it 'ページ本体は特に返さない' do
\r
1070 delete :destroy, :id => @comic.id, :format => :json
\r
1071 response.body.should match /./
\r
1075 context '作家権限がないとき' do
\r
1079 it 'ステータスコード302 Foundを返す' do
\r
1080 delete :destroy, :id => @comic.id
\r
1081 response.status.should eq 302
\r
1083 context 'html形式' do
\r
1084 it 'サインインページへ遷移する' do
\r
1085 delete :destroy, :id => @comic.id
\r
1086 response.body.should redirect_to '/users/sign_in'
\r
1089 context 'json形式' do
\r
1090 it '応答メッセージにUnauthorizedを返す' do
\r
1091 delete :destroy, :id => @comic.id, :format => :json
\r
1092 response.message.should match(/Unauthorized/)
\r