1 # -*- encoding: utf-8 -*-
\r
2 require 'spec_helper'
\r
4 describe PanelsController do
\r
6 @admin =FactoryGirl.create :admin
\r
7 @user_yas = FactoryGirl.create :user_yas_with_owner
\r
8 @user_rom = FactoryGirl.create :user_rom
\r
9 @author_yas = @user_yas.author
\r
11 @my_model_class = Panel #操作モデル
\r
14 if Manifest.manifest.magic_numbers['run_mode'] == 1
\r
15 describe '一覧表示に於いて' do
\r
17 factory_contents :panel_hello, @author_yas
\r
19 @query = {:mode => 'filer'}
\r
20 @query_format_json = @query_play.merge(:format => :json)
\r
31 it 'コントローラのマニフェストから操作モデルを導出している' do
\r
32 set_model? @my_model_class
\r
34 it 'コントローラのマニフェストからリスト操作モデルを導出している' do
\r
35 set_list_model? @my_model_class
\r
37 it 'リストグループのマニフェストからリストgetter(新着リスト)を導出している' do
\r
38 set_list? 'panel', 'public'
\r
40 it '@itemsにリストを取得している' do
\r
41 expect(assigns(:items).size).to be >= 3
\r
48 it 'ステータス OKを返して、ファイラーを描画している' do
\r
52 it '@filerにファイラーを取得している' do
\r
58 get :index, @query_format_json
\r
60 it 'リストグループのマニフェストからリストgetter(新着リスト)を導出している' do
\r
61 set_list? 'panel', 'public'
\r
63 it 'ステータス OKを返して、jsonデータを返している' do
\r
67 it '@filerにファイラーをセットしていない' do
\r
68 expect(assigns(:filer)).to be nil
\r
74 it '必要ないので実装していない' do
\r
77 expect(response.status).to eq(406)
\r
81 it 'ステータス OKを返して、jsonデータを返している' do
\r
83 get :count, @query_format_json
\r
88 context 'ゲスト(サインインしていない)' do
\r
90 get :count, @query_format_json
\r
96 context 'サインインの状態が例外的なとき' do
\r
97 it 'ユーザではなく管理者でも通常通り応答している' do
\r
101 get :index, @query_format_json
\r
104 it '創作活動してないROM専の読者にも通常通り応答している' do
\r
108 get :index, @query_format_json
\r
111 it 'ゲスト(サインインしていない)はサインインページに遷移している' do
\r
113 redirect? sign_in_url
\r
114 get :index, @query_format_json
\r
115 render_unauthorized?
\r
120 describe '単体表示に於いて' do
\r
122 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
123 Panel.stub(:show).with(@panel.id.to_s, [@user, nil]).and_return(@panel)
\r
124 Panel.stub(:show).with(@panel.id.to_s, [nil, @admin]).and_return(@panel)
\r
127 context 'つつがなく終わるとき' do
\r
128 it 'コマモデルに単体取得を問い合わせている' do
\r
129 Panel.should_receive(:show).exactly(1)
\r
132 it '@panelにアレを取得している' do
\r
133 get :show, :id => @panel.id
\r
134 assigns(:panel).id.should eq(@panel.id)
\r
136 context 'html形式' do
\r
137 it 'ステータスコード200 OKを返す' do
\r
138 get :show, :id => @panel.id
\r
139 response.should be_success
\r
141 it 'showテンプレートを描画する' do
\r
142 get :show, :id => @panel.id
\r
143 response.should render_template("show")
\r
146 context 'json形式' do
\r
147 it 'ステータスコード200 OKを返す' do
\r
148 get :show, :id => @panel.id, :format => :json
\r
149 response.should be_success
\r
152 get :show, :id => @panel.id, :format => :json
\r
153 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
155 it 'コマモデルにコマのjson出力を問い合わせている' do
\r
156 Panel.any_instance.should_receive(:panel_elements_as_json).exactly(1)
\r
157 get :show, :id => @panel.id, :format => :json
\r
159 it 'データがアレになっている' do
\r
160 get :show, :id => @panel.id, :format => :json
\r
161 json = JSON.parse response.body
\r
162 json["width"].should eq 100
\r
166 context 'ユーザ権限がないとき' do
\r
170 context 'html形式' do
\r
171 it 'ステータスコード302 Foundを返す' do
\r
172 get :show, :id => @panel.id
\r
173 response.status.should eq 302
\r
175 it 'サインインページへ遷移する' do
\r
176 get :show, :id => @panel.id
\r
177 response.body.should redirect_to '/users/sign_in'
\r
180 context 'json形式' do
\r
181 it 'ステータスコード401 Unauthorizedを返す' do
\r
182 get :show, :id => @panel.id, :format => :json
\r
183 response.status.should eq 401
\r
185 it '応答メッセージにUnauthorizedを返す' do
\r
186 get :show, :id => @panel.id, :format => :json
\r
187 response.message.should match(/Unauthorized/)
\r
191 context 'ユーザ権限はないが管理者権限があるとき' do
\r
196 it 'ステータスコード200 OKを返す' do
\r
197 get :show, :id => @panel.id
\r
198 response.should be_success
\r
201 context 'ユーザだが作家登録していないとき' do
\r
205 it 'ステータスコード200 OKを返す' do
\r
206 get :show, :id => @panel.id
\r
207 response.should be_success
\r
211 context '対象コマがないとき' do
\r
212 context 'html形式' do
\r
213 it '例外404 not_foundを返す' do
\r
215 get :show, :id => 0
\r
216 }.should raise_error(ActiveRecord::RecordNotFound)
\r
219 context 'json形式' do
\r
220 it '例外404 not_foundを返す' do
\r
222 get :show, :id => 0, :format => :json
\r
223 }.should raise_error(ActiveRecord::RecordNotFound)
\r
227 context '非公開コマを見ようとしたとき' do
\r
228 context 'html形式' do
\r
229 it '例外403 forbiddenを返す' do
\r
230 Panel.any_instance.stub(:visible?).with(any_args()).and_return(false)
\r
231 hidden = FactoryGirl.create :hidden_panel, :author_id => @author.id
\r
233 get :show, :id => hidden
\r
234 }.should raise_error(ActiveRecord::Forbidden)
\r
237 context 'json形式' do
\r
238 it '例外403 forbiddenを返す' do
\r
239 Panel.any_instance.stub(:visible?).with(any_args()).and_return(false)
\r
240 hidden = FactoryGirl.create :hidden_panel, :author_id => @author.id
\r
242 get :show, :id => hidden, :format => :json
\r
243 }.should raise_error(ActiveRecord::Forbidden)
\r
250 describe 'コマ数取得に於いて' do
\r
252 Panel.should_receive(:visible_count).and_return(3)
\r
255 context 'つつがなく終わるとき' do
\r
256 it 'ステータスコード200 OKを返す' do
\r
257 get :count, :format => :json
\r
258 response.should be_success
\r
260 context 'json形式' do
\r
262 get :count, :format => :json
\r
263 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
265 it 'データがHash構造になっていてコマ数が1である' do
\r
266 get :count, :format => :json
\r
267 json = JSON.parse response.body
\r
268 json["count"].should == 3
\r
274 describe '新規作成フォーム表示に於いて' do
\r
278 context 'つつがなく終わるとき' do
\r
279 it '@panelに新規データを用意している' do
\r
281 assigns(:panel).should be_a_new(Panel)
\r
283 it 'コマモデルにデフォルト値補充を依頼している' do
\r
284 Panel.any_instance.should_receive(:supply_default).exactly(1)
\r
287 context 'html形式' do
\r
288 it 'ステータスコード200 OKを返す' do
\r
290 response.should be_success
\r
292 it 'newテンプレートを描画する' do
\r
294 response.should render_template("new")
\r
298 it 'new.jsテンプレートを描画する' do
\r
299 get :new, :format => :js
\r
300 response.should render_template("new")
\r
303 context 'json形式' do
\r
305 get :new, :format => :json
\r
306 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
308 it 'コマモデルにコマのjson出力を問い合わせている' do
\r
309 Panel.any_instance.should_receive(:panel_elements_as_json).exactly(1)
\r
310 get :new, :format => :json
\r
314 context 'ユーザ権限がないとき' do
\r
318 context 'html形式' do
\r
319 it 'ステータスコード302 Foundを返す' do
\r
321 response.status.should eq 302
\r
323 it 'サインインページへ遷移する' do
\r
325 response.body.should redirect_to '/users/sign_in'
\r
329 it 'ステータスコード401 Unauthorizedを返す' do
\r
330 get :new, :format => :js
\r
331 response.status.should eq 401
\r
333 it '応答メッセージにUnauthorizedを返す' do
\r
334 get :new, :format => :js
\r
335 response.message.should match(/Unauthorized/)
\r
339 context 'ユーザ権限はないが管理者権限があるとき' do
\r
344 context 'html形式' do
\r
345 it 'ステータスコード302 Foundを返す' do
\r
347 response.status.should eq 302
\r
349 it 'サインインページへ遷移する' do
\r
351 response.body.should redirect_to '/users/sign_in'
\r
355 context 'ユーザだが作家登録していないとき' do
\r
359 context 'html形式' do
\r
360 it 'ステータスコード302 Foundを返す' do
\r
362 response.status.should eq 302
\r
364 it '作家登録ページへ遷移する' do
\r
366 response.body.should redirect_to new_author_path
\r
372 describe '新規作成に於いて' do
\r
374 @panel = FactoryGirl.build :panel, :author_id => @author.id
\r
375 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
378 context '事前チェックする' do
\r
380 Panel.stub(:count).and_return(10)
\r
382 it 'panelがパラメータにあれば、展開する' do
\r
383 post :create, :panel => @attr
\r
384 assigns(:prm)['border'].to_i.should eq @panel.border
\r
386 it 'jsonがパラメータにあれば、展開する' do
\r
387 post :create, :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
388 assigns(:prm)['border'].to_i.should eq 4
\r
390 it 'panel・json両パラメータがあれば、panelを優先して展開する' do
\r
392 :panel => FactoryGirl.attributes_for(:panel),
\r
393 :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
395 assigns(:prm)['border'].to_i.should eq @panel.border
\r
397 it 'コマモデルにデフォルト値補充を依頼している' do
\r
398 Panel.any_instance.should_receive(:supply_default).exactly(1)
\r
399 post :create, :panel => @attr
\r
402 Panel.any_instance.should_receive(:store).exactly(1)
\r
403 post :create, :panel => @attr
\r
406 context 'つつがなく終わるとき' do
\r
407 it "@panelに作成されたコマを保持していて、それがDBにある" do
\r
408 post :create, :panel => @attr
\r
409 assigns(:panel).should be_a(Panel)
\r
410 assigns(:panel).should be_persisted
\r
412 context 'html形式' do
\r
413 it 'ステータスコード302 Foundを返す' do
\r
414 Panel.any_instance.stub(:store).and_return(true)
\r
415 post :create, :panel => @attr
\r
416 response.status.should eq 302
\r
418 it '作成されたコマの表示ページへ遷移する' do
\r
419 # Panel.any_instance.stub(:store).and_return(true)
\r
420 post :create, :panel => @attr
\r
421 response.should redirect_to(Panel.last)
\r
424 context 'json形式' do
\r
425 it 'ステータスコード200 OKを返す' do
\r
426 # Panel.any_instance.stub(:store).and_return(true)
\r
427 post :create, :panel => @attr, :format => :json
\r
428 response.should be_success
\r
430 it '作成されたコマをjsonデータで返す' do
\r
431 post :create, :panel => @attr, :format => :json
\r
432 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
434 it 'コマモデルにコマのjson出力を問い合わせている' do
\r
435 Panel.any_instance.should_receive(:panel_elements_as_json).exactly(1)
\r
436 post :create, :panel => @attr, :format => :json
\r
438 it 'データがアレになっている' do
\r
439 post :create, :panel => @attr, :format => :json
\r
440 json = JSON.parse response.body
\r
441 json["width"].should eq @panel.width
\r
445 context 'ユーザ権限がないとき' do
\r
449 context 'html形式' do
\r
450 it 'ステータスコード302 Foundを返す' do
\r
451 post :create, :panel => @attr
\r
452 response.status.should eq 302
\r
454 it 'サインインページへ遷移する' do
\r
455 post :create, :panel => @attr
\r
456 response.body.should redirect_to '/users/sign_in'
\r
459 context 'json形式' do
\r
460 it 'ステータスコード401 Unauthorizedを返す' do
\r
461 post :create, :panel => @attr, :format => :json
\r
462 response.status.should eq 401
\r
464 it '応答メッセージにUnauthorizedを返す' do
\r
465 post :create, :panel => @attr, :format => :json
\r
466 response.message.should match(/Unauthorized/)
\r
470 context 'ユーザ権限はないが管理者権限があるとき' do
\r
475 context 'html形式' do
\r
476 it 'ステータスコード302 Foundを返す' do
\r
477 post :create, :panel => @attr
\r
478 response.status.should eq 302
\r
480 it 'サインインページへ遷移する' do
\r
481 post :create, :panel => @attr
\r
482 response.body.should redirect_to '/users/sign_in'
\r
486 context 'ユーザだが作家登録していないとき' do
\r
490 context 'html形式' do
\r
491 it 'ステータスコード302 Foundを返す' do
\r
492 post :create, :panel => @attr
\r
493 response.status.should eq 302
\r
495 it '作家登録ページへ遷移する' do
\r
496 post :create, :panel => @attr
\r
497 response.body.should redirect_to new_author_path
\r
501 context '検証、保存に失敗した' do
\r
503 Panel.any_instance.stub(:store).and_return(false)
\r
505 it "未保存のコマを保持している" do
\r
506 post :create, :panel => @attr
\r
507 assigns(:panel).should be_a_new(Panel)
\r
509 context 'html形式' do
\r
510 it 'ステータスコード200 OKを返す' do
\r
511 post :create, :panel => @attr
\r
512 response.status.should eq 200
\r
515 post :create, :panel => @attr
\r
516 response.should render_template("new")
\r
519 context 'json形式' do
\r
520 it 'ステータスコード422 unprocessable_entity を返す' do
\r
521 post :create, :panel => @attr, :format => :json
\r
522 response.status.should eq 422
\r
524 it '応答メッセージUnprocessable Entityを返す' do
\r
525 post :create, :panel => @attr, :format => :json
\r
526 response.message.should match(/Unprocessable/)
\r
532 describe '編集フォーム表示に於いて' do
\r
534 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
536 Panel.stub(:show).and_return(@panel)
\r
538 context 'つつがなく終わるとき' do
\r
539 it 'コマモデルに編集取得を問い合わせている' do
\r
540 Panel.should_receive(:edit).exactly(1)
\r
541 get :edit, :id => @panel.id
\r
543 it '@panelにデータを用意している' do
\r
544 get :edit, :id => @panel.id
\r
545 assigns(:panel).should eq @panel
\r
547 context 'html形式' do
\r
548 it 'ステータスコード200 OKを返す' do
\r
549 get :edit, :id => @panel.id
\r
550 response.should be_success
\r
552 it 'editテンプレートを描画する' do
\r
553 get :edit, :id => @panel.id
\r
554 response.should render_template("edit")
\r
558 it 'ステータスコード200 OKを返す' do
\r
559 get :edit, :id => @panel.id, :format => :js
\r
560 response.should be_success
\r
562 it 'edit.jsテンプレートを描画する' do
\r
563 get :edit, :id => @panel.id, :format => :js
\r
564 response.should render_template("edit")
\r
568 context 'ユーザ権限がないとき' do
\r
572 context 'html形式' do
\r
573 it 'ステータスコード302 Foundを返す' do
\r
574 get :edit, :id => @panel.id
\r
575 response.status.should eq 302
\r
577 it 'サインインページへ遷移する' do
\r
578 get :edit, :id => @panel.id
\r
579 response.body.should redirect_to '/users/sign_in'
\r
583 it 'ステータスコード401 Unauthorizedを返す' do
\r
584 get :edit, :id => @panel.id, :format => :js
\r
585 response.status.should eq 401
\r
587 it '応答メッセージにUnauthorizedを返す' do
\r
588 get :edit, :id => @panel.id, :format => :js
\r
589 response.message.should match(/Unauthorized/)
\r
593 context 'ユーザ権限はないが管理者権限があるとき' do
\r
598 context 'html形式' do
\r
599 it 'ステータスコード302 Foundを返す' do
\r
600 get :edit, :id => @panel.id
\r
601 response.status.should eq 302
\r
603 it 'サインインページへ遷移する' do
\r
604 get :edit, :id => @panel.id
\r
605 response.body.should redirect_to '/users/sign_in'
\r
609 context 'ユーザだが作家登録していないとき' do
\r
613 context 'html形式' do
\r
614 it 'ステータスコード302 Foundを返す' do
\r
615 get :edit, :id => @panel.id
\r
616 response.status.should eq 302
\r
618 it '作家登録ページへ遷移する' do
\r
619 get :edit, :id => @panel.id
\r
620 response.body.should redirect_to new_author_path
\r
626 describe '更新に於いて' do
\r
628 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
629 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
632 context '事前チェックする' do
\r
635 Panel.stub(:count).and_return(10)
\r
637 it 'panelがパラメータにあれば、展開する' do
\r
638 put :update, :id => @panel.id, :panel => @attr
\r
639 assigns(:prm)['border'].to_i.should eq @panel.border
\r
641 it 'jsonがパラメータにあれば、展開する' do
\r
642 put :update, :id => @panel.id, :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
643 assigns(:prm)['border'].to_i.should eq 4
\r
645 it 'panel・json両パラメータがあれば、panelを優先して展開する' do
\r
648 :panel => FactoryGirl.attributes_for(:panel),
\r
649 :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
651 assigns(:prm)['border'].to_i.should eq @panel.border
\r
654 context 'つつがなく終わるとき' do
\r
655 it 'モデルに編集取得依頼する' do
\r
656 Panel.stub(:edit).with(any_args).and_return(@panel)
\r
657 Panel.should_receive(:edit).exactly(1)
\r
658 put :update, :id => @panel.id, :panel => @attr
\r
661 Panel.any_instance.should_receive(:store).exactly(1)
\r
662 put :update, :id => @panel.id, :panel => @attr
\r
664 it "@panelに作成されたコマを保持していて、それがDBにある" do
\r
665 put :update, :id => @panel.id, :panel => @attr
\r
666 assigns(:panel).should be_a(Panel)
\r
667 assigns(:panel).should be_persisted
\r
669 context 'html形式' do
\r
670 it 'ステータスコード302 Foundを返す' do
\r
671 Panel.any_instance.stub(:store).and_return(true)
\r
672 put :update, :id => @panel.id, :panel => @attr
\r
673 response.status.should eq 302
\r
675 it '作成されたコマの表示ページへ遷移する' do
\r
676 # Panel.any_instance.stub(:store).and_return(true)
\r
677 put :update, :id => @panel.id, :panel => @attr
\r
678 response.should redirect_to(Panel.last)
\r
681 context 'json形式' do
\r
682 it 'ステータスコード200 OKを返す' do
\r
683 # Panel.any_instance.stub(:store).and_return(true)
\r
684 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
685 response.should be_success
\r
687 it 'ページ本体は特に返さない' do
\r
688 Panel.any_instance.stub(:save).with(any_args()).and_return(true)
\r
689 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
690 response.body.should match /./
\r
694 context 'ユーザ権限がないとき' do
\r
698 context 'html形式' do
\r
699 it 'ステータスコード302 Foundを返す' do
\r
700 put :update, :id => @panel.id, :panel => @attr
\r
701 response.status.should eq 302
\r
703 it 'サインインページへ遷移する' do
\r
704 put :update, :id => @panel.id, :panel => @attr
\r
705 response.body.should redirect_to '/users/sign_in'
\r
708 context 'json形式' do
\r
709 it 'ステータスコード401 Unauthorizedを返す' do
\r
710 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
711 response.status.should eq 401
\r
713 it '応答メッセージにUnauthorizedを返す' do
\r
714 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
715 response.message.should match(/Unauthorized/)
\r
719 context 'ユーザ権限はないが管理者権限があるとき' do
\r
724 context 'html形式' do
\r
725 it 'ステータスコード302 Foundを返す' do
\r
726 put :update, :id => @panel.id, :panel => @attr
\r
727 response.status.should eq 302
\r
729 it 'サインインページへ遷移する' do
\r
730 put :update, :id => @panel.id, :panel => @attr
\r
731 response.body.should redirect_to '/users/sign_in'
\r
735 context 'ユーザだが作家登録していないとき' do
\r
739 context 'html形式' do
\r
740 it 'ステータスコード302 Foundを返す' do
\r
741 put :update, :id => @panel.id, :panel => @attr
\r
742 response.status.should eq 302
\r
744 it '作家登録ページへ遷移する' do
\r
745 put :update, :id => @panel.id, :panel => @attr
\r
746 response.body.should redirect_to new_author_path
\r
750 context '検証、保存に失敗した' do
\r
752 Panel.any_instance.stub(:store).and_return(false)
\r
754 it "指定のコマを保持している" do
\r
755 put :update, :id => @panel.id, :panel => @attr
\r
756 assigns(:panel).should eq @panel
\r
758 context 'html形式' do
\r
759 it 'ステータスコード200 OKを返す' do
\r
760 put :update, :id => @panel.id, :panel => @attr
\r
761 response.status.should eq 200
\r
764 put :update, :id => @panel.id, :panel => @attr
\r
765 response.should render_template("edit")
\r
768 context 'json形式' do
\r
769 it 'ステータスコード422 unprocessable_entity を返す' do
\r
770 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
771 response.status.should eq 422
\r
773 it '応答メッセージUnprocessable Entityを返す' do
\r
774 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
775 response.message.should match(/Unprocessable/)
\r
781 describe '削除に於いて' do
\r
783 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
784 Panel.stub(:edit).and_return(@panel)
\r
787 context 'つつがなく終わるとき' do
\r
788 it 'コマモデルに編集取得を問い合わせている' do
\r
789 Panel.should_receive(:edit).exactly(1)
\r
790 delete :destroy, :id => @panel.id
\r
792 it '@panelにアレを取得している' do
\r
793 delete :destroy, :id => @panel.id
\r
794 assigns(:panel).id.should eq(@panel.id)
\r
798 delete :destroy, :id => @panel.id
\r
799 }.should change(Panel, :count)
\r
801 context 'html形式' do
\r
802 it 'ステータスコード302 Foundを返す' do
\r
803 delete :destroy, :id => @panel.id
\r
804 response.status.should eq 302
\r
806 it 'マイコマ一覧ページへ遷移する' do
\r
807 delete :destroy, :id => @panel.id
\r
808 response.should redirect_to('/home/panels')
\r
811 context 'json形式' do
\r
812 it 'ステータスコード200 OKを返す' do
\r
813 delete :destroy, :id => @panel.id, :format => :json
\r
814 response.should be_success
\r
818 context 'ユーザ権限がないとき' do
\r
822 context 'html形式' do
\r
823 it 'ステータスコード302 Foundを返す' do
\r
824 delete :destroy, :id => @panel.id
\r
825 response.status.should eq 302
\r
827 it 'サインインページへ遷移する' do
\r
828 delete :destroy, :id => @panel.id
\r
829 response.body.should redirect_to '/users/sign_in'
\r
832 context 'json形式' do
\r
833 it 'ステータスコード401 Unauthorizedを返す' do
\r
834 delete :destroy, :id => @panel.id, :format => :json
\r
835 response.status.should eq 401
\r
837 it '応答メッセージにUnauthorizedを返す' do
\r
838 delete :destroy, :id => @panel.id, :format => :json
\r
839 response.message.should match(/Unauthorized/)
\r
843 context 'ユーザ権限はないが管理者権限があるとき' do
\r
848 context 'html形式' do
\r
849 it 'ステータスコード302 Foundを返す' do
\r
850 delete :destroy, :id => @panel.id
\r
851 response.status.should eq 302
\r
853 it 'サインインページへ遷移する' do
\r
854 delete :destroy, :id => @panel.id
\r
855 response.body.should redirect_to '/users/sign_in'
\r
859 context 'ユーザだが作家登録していないとき' do
\r
863 context 'html形式' do
\r
864 it 'ステータスコード302 Foundを返す' do
\r
865 delete :destroy, :id => @panel.id
\r
866 response.status.should eq 302
\r
868 it '作家登録ページへ遷移する' do
\r
869 delete :destroy, :id => @panel.id
\r
870 response.body.should redirect_to new_author_path
\r
874 context '削除に失敗したとき' do
\r
876 Panel.any_instance.stub(:destroy_with_elements).and_return(false)
\r
878 context 'html形式' do
\r
879 it 'ステータスコード302 Foundを返す' do
\r
880 delete :destroy, :id => @panel.id
\r
881 response.status.should eq 302
\r
883 it 'そのコマの詳細ページへ遷移する' do
\r
884 delete :destroy, :id => @panel.id
\r
885 response.should redirect_to(panel_path(@panel))
\r
888 context 'json形式' do
\r
889 it 'ステータスコード422 unprocessable_entity を返す' do
\r
890 delete :destroy, :id => @panel.id, :format => :json
\r
891 response.status.should eq 422
\r
893 it '応答メッセージUnprocessable Entityを返す' do
\r
894 delete :destroy, :id => @panel.id, :format => :json
\r
895 response.message.should match(/Unprocessable/)
\r
900 context '対象コマがないとき' do
\r
902 context '他人のコマだったとき' do
\r
908 describe '一覧表示に於いて' do
\r
910 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
911 Panel.stub(:list).and_return([@panel, @panel, @panel])
\r
914 context 'つつがなく終わるとき' do
\r
915 context 'html形式' do
\r
916 it 'ステータスコード200 OKを返す' do
\r
918 response.should be_success
\r
920 it 'indexテンプレートを描画する' do
\r
922 response.should render_template("index")
\r
925 context 'json形式' do
\r
926 it 'ステータスコード200 OKを返す' do
\r
927 get :index, :format => :json
\r
928 response.should be_success
\r
931 get :index, :format => :json
\r
932 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
936 context 'ユーザ権限がないとき' do
\r
940 context 'html形式' do
\r
941 it 'ステータスコード200 OKを返す' do
\r
943 response.should be_success
\r
945 it 'indexテンプレートを描画する' do
\r
947 response.should render_template("index")
\r
950 context 'json形式' do
\r
951 it 'ステータスコード200 OKを返す' do
\r
952 get :index, :format => :json
\r
953 response.should be_success
\r
956 get :index, :format => :json
\r
957 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
963 describe '単体表示に於いて' do
\r
965 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
966 Panel.stub(:show).with(@panel.id.to_s, [nil, nil]).and_return(@panel)
\r
967 Panel.stub(:show).with(@panel.id.to_s, [@user, nil]).and_return(@panel)
\r
968 Panel.stub(:show).with(@panel.id.to_s, [nil, @admin]).and_return(@panel)
\r
971 context 'つつがなく終わるとき' do
\r
972 context 'html形式' do
\r
973 it 'ステータスコード200 OKを返す' do
\r
974 get :show, :id => @panel.id
\r
975 response.should be_success
\r
977 it 'showテンプレートを描画する' do
\r
978 get :show, :id => @panel.id
\r
979 response.should render_template("show")
\r
982 context 'json形式' do
\r
983 it 'ステータスコード200 OKを返す' do
\r
984 get :show, :id => @panel.id, :format => :json
\r
985 response.should be_success
\r
988 get :show, :id => @panel.id, :format => :json
\r
989 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
993 context 'ユーザ権限がないとき' do
\r
997 context 'html形式' do
\r
998 it 'ステータスコード200 OKを返す' do
\r
999 get :show, :id => @panel.id
\r
1000 response.should be_success
\r
1002 it 'showテンプレートを描画する' do
\r
1003 get :show, :id => @panel.id
\r
1004 response.should render_template("show")
\r
1007 context 'json形式' do
\r
1008 it 'ステータスコード200 OKを返す' do
\r
1009 get :show, :id => @panel.id, :format => :json
\r
1010 response.should be_success
\r
1012 it 'jsonデータを返す' do
\r
1013 get :show, :id => @panel.id, :format => :json
\r
1014 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1020 describe 'コマ数取得に於いて' do
\r
1022 Panel.should_receive(:visible_count).and_return(3)
\r
1025 context 'つつがなく終わるとき' do
\r
1026 it 'ステータスコード200 OKを返す' do
\r
1027 get :count, :format => :json
\r
1028 response.should be_success
\r
1030 context 'json形式' do
\r
1031 it 'jsonデータを返す' do
\r
1032 get :count, :format => :json
\r
1033 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1039 describe '新規作成フォーム表示に於いて' do
\r
1043 context 'つつがなく終わるとき' do
\r
1044 context 'html形式' do
\r
1045 it 'ステータスコード200 OKを返す' do
\r
1047 response.should be_success
\r
1049 it 'newテンプレートを描画する' do
\r
1051 response.should render_template("new")
\r
1055 it 'new.jsテンプレートを描画する' do
\r
1056 get :new, :format => :js
\r
1057 response.should render_template("new")
\r
1060 context 'json形式' do
\r
1061 it 'jsonデータを返す' do
\r
1062 get :new, :format => :json
\r
1063 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1067 context 'ユーザ権限がないとき' do
\r
1071 context 'html形式' do
\r
1072 it 'ステータスコード302 Foundを返す' do
\r
1074 response.status.should eq 302
\r
1076 it 'サインインページへ遷移する' do
\r
1078 response.body.should redirect_to '/users/sign_in'
\r
1082 it 'ステータスコード401 Unauthorizedを返す' do
\r
1083 get :new, :format => :js
\r
1084 response.status.should eq 401
\r
1086 it '応答メッセージにUnauthorizedを返す' do
\r
1087 get :new, :format => :js
\r
1088 response.message.should match(/Unauthorized/)
\r
1094 describe '新規作成に於いて' do
\r
1096 @panel = FactoryGirl.build :panel, :author_id => @author.id
\r
1097 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
1100 context 'つつがなく終わるとき' do
\r
1101 context 'html形式' do
\r
1102 it 'ステータスコード302 Foundを返す' do
\r
1103 Panel.any_instance.stub(:store).and_return(true)
\r
1104 post :create, :panel => @attr
\r
1105 response.status.should eq 302
\r
1107 it '作成されたコマの表示ページへ遷移する' do
\r
1108 # Panel.any_instance.stub(:store).and_return(true)
\r
1109 post :create, :panel => @attr
\r
1110 response.should redirect_to(Panel.last)
\r
1113 context 'json形式' do
\r
1114 it 'ステータスコード200 OKを返す' do
\r
1115 # Panel.any_instance.stub(:store).and_return(true)
\r
1116 post :create, :panel => @attr, :format => :json
\r
1117 response.should be_success
\r
1119 it '作成されたコマをjsonデータで返す' do
\r
1120 post :create, :panel => @attr, :format => :json
\r
1121 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1125 context 'ユーザ権限がないとき' do
\r
1129 context 'html形式' do
\r
1130 it 'ステータスコード302 Foundを返す' do
\r
1131 post :create, :panel => @attr
\r
1132 response.status.should eq 302
\r
1134 it 'サインインページへ遷移する' do
\r
1135 post :create, :panel => @attr
\r
1136 response.body.should redirect_to '/users/sign_in'
\r
1139 context 'json形式' do
\r
1140 it 'ステータスコード401 Unauthorizedを返す' do
\r
1141 post :create, :panel => @attr, :format => :json
\r
1142 response.status.should eq 401
\r
1144 it '応答メッセージにUnauthorizedを返す' do
\r
1145 post :create, :panel => @attr, :format => :json
\r
1146 response.message.should match(/Unauthorized/)
\r
1152 describe '編集フォーム表示に於いて' do
\r
1154 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
1156 Panel.stub(:show).and_return(@panel)
\r
1158 context 'つつがなく終わるとき' do
\r
1159 context 'html形式' do
\r
1160 it 'ステータスコード200 OKを返す' do
\r
1161 get :edit, :id => @panel.id
\r
1162 response.should be_success
\r
1164 it 'editテンプレートを描画する' do
\r
1165 get :edit, :id => @panel.id
\r
1166 response.should render_template("edit")
\r
1170 it 'ステータスコード200 OKを返す' do
\r
1171 get :edit, :id => @panel.id, :format => :js
\r
1172 response.should be_success
\r
1174 it 'edit.jsテンプレートを描画する' do
\r
1175 get :edit, :id => @panel.id, :format => :js
\r
1176 response.should render_template("edit")
\r
1180 context 'ユーザ権限がないとき' do
\r
1184 context 'html形式' do
\r
1185 it 'ステータスコード302 Foundを返す' do
\r
1186 get :edit, :id => @panel.id
\r
1187 response.status.should eq 302
\r
1189 it 'サインインページへ遷移する' do
\r
1190 get :edit, :id => @panel.id
\r
1191 response.body.should redirect_to '/users/sign_in'
\r
1195 it 'ステータスコード401 Unauthorizedを返す' do
\r
1196 get :edit, :id => @panel.id, :format => :js
\r
1197 response.status.should eq 401
\r
1199 it '応答メッセージにUnauthorizedを返す' do
\r
1200 get :edit, :id => @panel.id, :format => :js
\r
1201 response.message.should match(/Unauthorized/)
\r
1207 describe '更新に於いて' do
\r
1209 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
1210 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
1213 context 'つつがなく終わるとき' do
\r
1214 context 'html形式' do
\r
1215 it 'ステータスコード302 Foundを返す' do
\r
1216 Panel.any_instance.stub(:store).and_return(true)
\r
1217 put :update, :id => @panel.id, :panel => @attr
\r
1218 response.status.should eq 302
\r
1220 it '作成されたコマの表示ページへ遷移する' do
\r
1221 # Panel.any_instance.stub(:store).and_return(true)
\r
1222 put :update, :id => @panel.id, :panel => @attr
\r
1223 response.should redirect_to(Panel.last)
\r
1226 context 'json形式' do
\r
1227 it 'ステータスコード200 OKを返す' do
\r
1228 # Panel.any_instance.stub(:store).and_return(true)
\r
1229 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1230 response.should be_success
\r
1232 it 'ページ本体は特に返さない' do
\r
1233 Panel.any_instance.stub(:save).with(any_args()).and_return(true)
\r
1234 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1235 response.body.should match /./
\r
1239 context 'ユーザ権限がないとき' do
\r
1243 context 'html形式' do
\r
1244 it 'ステータスコード302 Foundを返す' do
\r
1245 put :update, :id => @panel.id, :panel => @attr
\r
1246 response.status.should eq 302
\r
1248 it 'サインインページへ遷移する' do
\r
1249 put :update, :id => @panel.id, :panel => @attr
\r
1250 response.body.should redirect_to '/users/sign_in'
\r
1253 context 'json形式' do
\r
1254 it 'ステータスコード401 Unauthorizedを返す' do
\r
1255 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1256 response.status.should eq 401
\r
1258 it '応答メッセージにUnauthorizedを返す' do
\r
1259 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1260 response.message.should match(/Unauthorized/)
\r
1266 describe '削除に於いて' do
\r
1268 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
1269 Panel.stub(:edit).and_return(@panel)
\r
1272 context 'つつがなく終わるとき' do
\r
1273 context 'html形式' do
\r
1274 it 'ステータスコード302 Foundを返す' do
\r
1275 delete :destroy, :id => @panel.id
\r
1276 response.status.should eq 302
\r
1278 it 'マイコマ一覧ページへ遷移する' do
\r
1279 delete :destroy, :id => @panel.id
\r
1280 response.should redirect_to('/home/panel')
\r
1283 context 'json形式' do
\r
1284 it 'ステータスコード200 OKを返す' do
\r
1285 delete :destroy, :id => @panel.id, :format => :json
\r
1286 response.should be_success
\r
1290 context 'ユーザ権限がないとき' do
\r
1294 context 'html形式' do
\r
1295 it 'ステータスコード302 Foundを返す' do
\r
1296 delete :destroy, :id => @panel.id
\r
1297 response.status.should eq 302
\r
1299 it 'サインインページへ遷移する' do
\r
1300 delete :destroy, :id => @panel.id
\r
1301 response.body.should redirect_to '/users/sign_in'
\r
1304 context 'json形式' do
\r
1305 it 'ステータスコード401 Unauthorizedを返す' do
\r
1306 delete :destroy, :id => @panel.id, :format => :json
\r
1307 response.status.should eq 401
\r
1309 it '応答メッセージにUnauthorizedを返す' do
\r
1310 delete :destroy, :id => @panel.id, :format => :json
\r
1311 response.message.should match(/Unauthorized/)
\r