1 # -*- encoding: utf-8 -*-
\r
2 require 'spec_helper'
\r
4 describe PanelsController 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 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
18 Panel.stub(:list).and_return([@panel, @panel, @panel])
\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 Panel.default_page_size
\r
38 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
\r
39 get :index, :page_size => 1500
\r
40 assigns(:page_size).should eq Panel.max_page_size
\r
42 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
\r
43 get :index, :page_size => 0
\r
44 assigns(:page_size).should eq Panel.default_page_size
\r
47 context 'つつがなく終わるとき' do
\r
48 it 'コマモデルに一覧を問い合わせている' do
\r
49 Panel.should_receive(:list).exactly(1)
\r
52 it '@panelsにリストを取得している' do
\r
54 assigns(:panels).should have_at_least(3).items
\r
57 it '@paginateにページ制御を取得している' do
\r
59 assigns(:paginate).is_a?(Kaminari::PaginatableArray).should be_true
\r
61 it 'ステータスコード200 OKを返す' do
\r
63 response.should be_success
\r
65 it 'indexテンプレートを描画する' do
\r
67 response.should render_template("index")
\r
71 it 'ステータスコード200 OKを返す' do
\r
72 get :index, :format => :json
\r
73 response.should be_success
\r
76 get :index, :format => :json
\r
77 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
79 it 'コマモデルにコマリストのjson出力を問い合わせている' do
\r
80 Panel.should_receive(:list_as_json_text).exactly(1)
\r
81 get :index, :format => :json
\r
83 it 'データがリスト構造になっている' do
\r
84 get :index, :format => :json
\r
85 json = JSON.parse response.body
\r
86 json.should have_at_least(3).items
\r
88 it 'リストの先頭くらいはコマっぽいものであって欲しい' do
\r
89 get :index, :format => :json
\r
90 json = JSON.parse response.body
\r
91 json.first.has_key?("border").should be_true
\r
95 context 'ユーザ権限がないとき' do
\r
100 it 'ステータスコード302 Foundを返す' do
\r
102 response.status.should eq 302
\r
104 it 'サインインページへ遷移する' do
\r
106 response.should redirect_to '/users/sign_in'
\r
109 context 'json形式' do
\r
110 it 'ステータスコード401 Unauthorizedを返す' do
\r
111 get :index, :format => :json
\r
112 response.status.should eq 401
\r
114 it '応答メッセージにUnauthorizedを返す' do
\r
115 get :index, :format => :json
\r
116 response.message.should match(/Unauthorized/)
\r
120 context 'ユーザ権限はないが管理者権限があるとき' do
\r
125 it 'ステータスコード200 OKを返す' do
\r
127 response.should be_success
\r
130 context 'ユーザだが作家登録していないとき' do
\r
134 it 'ステータスコード200 OKを返す' do
\r
136 response.should be_success
\r
141 describe '単体表示に於いて' do
\r
143 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
144 Panel.stub(:show).with(@panel.id.to_s, [@user, nil]).and_return(@panel)
\r
145 Panel.stub(:show).with(@panel.id.to_s, [nil, @admin]).and_return(@panel)
\r
148 context 'つつがなく終わるとき' do
\r
149 it 'コマモデルに単体取得を問い合わせている' do
\r
150 Panel.should_receive(:show).exactly(1)
\r
153 it '@panelにアレを取得している' do
\r
154 get :show, :id => @panel.id
\r
155 assigns(:panel).id.should eq(@panel.id)
\r
157 context 'html形式' do
\r
158 it 'ステータスコード200 OKを返す' do
\r
159 get :show, :id => @panel.id
\r
160 response.should be_success
\r
162 it 'showテンプレートを描画する' do
\r
163 get :show, :id => @panel.id
\r
164 response.should render_template("show")
\r
167 context 'json形式' do
\r
168 it 'ステータスコード200 OKを返す' do
\r
169 get :show, :id => @panel.id, :format => :json
\r
170 response.should be_success
\r
173 get :show, :id => @panel.id, :format => :json
\r
174 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
176 it 'コマモデルにコマのjson出力を問い合わせている' do
\r
177 Panel.any_instance.should_receive(:panel_elements_as_json).exactly(1)
\r
178 get :show, :id => @panel.id, :format => :json
\r
180 it 'データがアレになっている' do
\r
181 get :show, :id => @panel.id, :format => :json
\r
182 json = JSON.parse response.body
\r
183 json["width"].should eq 100
\r
187 context 'ユーザ権限がないとき' do
\r
191 context 'html形式' do
\r
192 it 'ステータスコード302 Foundを返す' do
\r
193 get :show, :id => @panel.id
\r
194 response.status.should eq 302
\r
196 it 'サインインページへ遷移する' do
\r
197 get :show, :id => @panel.id
\r
198 response.body.should redirect_to '/users/sign_in'
\r
201 context 'json形式' do
\r
202 it 'ステータスコード401 Unauthorizedを返す' do
\r
203 get :show, :id => @panel.id, :format => :json
\r
204 response.status.should eq 401
\r
206 it '応答メッセージにUnauthorizedを返す' do
\r
207 get :show, :id => @panel.id, :format => :json
\r
208 response.message.should match(/Unauthorized/)
\r
212 context 'ユーザ権限はないが管理者権限があるとき' do
\r
217 it 'ステータスコード200 OKを返す' do
\r
218 get :show, :id => @panel.id
\r
219 response.should be_success
\r
222 context 'ユーザだが作家登録していないとき' do
\r
226 it 'ステータスコード200 OKを返す' do
\r
227 get :show, :id => @panel.id
\r
228 response.should be_success
\r
232 context '対象コマがないとき' do
\r
233 context 'html形式' do
\r
234 it '例外404 not_foundを返す' do
\r
236 get :show, :id => 0
\r
237 }.should raise_error(ActiveRecord::RecordNotFound)
\r
240 context 'json形式' do
\r
241 it '例外404 not_foundを返す' do
\r
243 get :show, :id => 0, :format => :json
\r
244 }.should raise_error(ActiveRecord::RecordNotFound)
\r
248 context '非公開コマを見ようとしたとき' do
\r
249 context 'html形式' do
\r
250 it '例外403 forbiddenを返す' do
\r
251 Panel.any_instance.stub(:visible?).with(any_args()).and_return(false)
\r
252 hidden = FactoryGirl.create :hidden_panel, :author_id => @author.id
\r
254 get :show, :id => hidden
\r
255 }.should raise_error(ActiveRecord::Forbidden)
\r
258 context 'json形式' do
\r
259 it '例外403 forbiddenを返す' do
\r
260 Panel.any_instance.stub(:visible?).with(any_args()).and_return(false)
\r
261 hidden = FactoryGirl.create :hidden_panel, :author_id => @author.id
\r
263 get :show, :id => hidden, :format => :json
\r
264 }.should raise_error(ActiveRecord::Forbidden)
\r
271 describe 'コマ数取得に於いて' do
\r
273 Panel.should_receive(:visible_count).and_return(3)
\r
276 context 'つつがなく終わるとき' do
\r
277 it 'ステータスコード200 OKを返す' do
\r
278 get :count, :format => :json
\r
279 response.should be_success
\r
281 context 'json形式' do
\r
283 get :count, :format => :json
\r
284 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
286 it 'データがHash構造になっていてコマ数が1である' do
\r
287 get :count, :format => :json
\r
288 json = JSON.parse response.body
\r
289 json["count"].should == 3
\r
295 describe '新規作成フォーム表示に於いて' do
\r
299 context 'つつがなく終わるとき' do
\r
300 it '@panelに新規データを用意している' do
\r
302 assigns(:panel).should be_a_new(Panel)
\r
304 it 'コマモデルにデフォルト値補充を依頼している' do
\r
305 Panel.any_instance.should_receive(:supply_default).exactly(1)
\r
308 context 'html形式' do
\r
309 it 'ステータスコード200 OKを返す' do
\r
311 response.should be_success
\r
313 it 'newテンプレートを描画する' do
\r
315 response.should render_template("new")
\r
319 it 'new.jsテンプレートを描画する' do
\r
320 get :new, :format => :js
\r
321 response.should render_template("new")
\r
324 context 'json形式' do
\r
326 get :new, :format => :json
\r
327 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
329 it 'コマモデルにコマのjson出力を問い合わせている' do
\r
330 Panel.any_instance.should_receive(:panel_elements_as_json).exactly(1)
\r
331 get :new, :format => :json
\r
335 context 'ユーザ権限がないとき' do
\r
339 context 'html形式' do
\r
340 it 'ステータスコード302 Foundを返す' do
\r
342 response.status.should eq 302
\r
344 it 'サインインページへ遷移する' do
\r
346 response.body.should redirect_to '/users/sign_in'
\r
350 it 'ステータスコード401 Unauthorizedを返す' do
\r
351 get :new, :format => :js
\r
352 response.status.should eq 401
\r
354 it '応答メッセージにUnauthorizedを返す' do
\r
355 get :new, :format => :js
\r
356 response.message.should match(/Unauthorized/)
\r
360 context 'ユーザ権限はないが管理者権限があるとき' do
\r
365 context 'html形式' do
\r
366 it 'ステータスコード302 Foundを返す' do
\r
368 response.status.should eq 302
\r
370 it 'サインインページへ遷移する' do
\r
372 response.body.should redirect_to '/users/sign_in'
\r
376 context 'ユーザだが作家登録していないとき' do
\r
380 context 'html形式' do
\r
381 it 'ステータスコード302 Foundを返す' do
\r
383 response.status.should eq 302
\r
385 it '作家登録ページへ遷移する' do
\r
387 response.body.should redirect_to new_author_path
\r
393 describe '新規作成に於いて' do
\r
395 @panel = FactoryGirl.build :panel, :author_id => @author.id
\r
396 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
399 context '事前チェックする' do
\r
401 Panel.stub(:count).and_return(10)
\r
403 it 'panelがパラメータにあれば、展開する' do
\r
404 post :create, :panel => @attr
\r
405 assigns(:prm)['border'].to_i.should eq @panel.border
\r
407 it 'jsonがパラメータにあれば、展開する' do
\r
408 post :create, :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
409 assigns(:prm)['border'].to_i.should eq 4
\r
411 it 'panel・json両パラメータがあれば、panelを優先して展開する' do
\r
413 :panel => FactoryGirl.attributes_for(:panel),
\r
414 :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
416 assigns(:prm)['border'].to_i.should eq @panel.border
\r
418 it 'コマモデルにデフォルト値補充を依頼している' do
\r
419 Panel.any_instance.should_receive(:supply_default).exactly(1)
\r
420 post :create, :panel => @attr
\r
423 Panel.any_instance.should_receive(:store).exactly(1)
\r
424 post :create, :panel => @attr
\r
427 context 'つつがなく終わるとき' do
\r
428 it "@panelに作成されたコマを保持していて、それがDBにある" do
\r
429 post :create, :panel => @attr
\r
430 assigns(:panel).should be_a(Panel)
\r
431 assigns(:panel).should be_persisted
\r
433 context 'html形式' do
\r
434 it 'ステータスコード302 Foundを返す' do
\r
435 Panel.any_instance.stub(:store).and_return(true)
\r
436 post :create, :panel => @attr
\r
437 response.status.should eq 302
\r
439 it '作成されたコマの表示ページへ遷移する' do
\r
440 # Panel.any_instance.stub(:store).and_return(true)
\r
441 post :create, :panel => @attr
\r
442 response.should redirect_to(Panel.last)
\r
445 context 'json形式' do
\r
446 it 'ステータスコード200 OKを返す' do
\r
447 # Panel.any_instance.stub(:store).and_return(true)
\r
448 post :create, :panel => @attr, :format => :json
\r
449 response.should be_success
\r
451 it '作成されたコマをjsonデータで返す' do
\r
452 post :create, :panel => @attr, :format => :json
\r
453 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
455 it 'コマモデルにコマのjson出力を問い合わせている' do
\r
456 Panel.any_instance.should_receive(:panel_elements_as_json).exactly(1)
\r
457 post :create, :panel => @attr, :format => :json
\r
459 it 'データがアレになっている' do
\r
460 post :create, :panel => @attr, :format => :json
\r
461 json = JSON.parse response.body
\r
462 json["width"].should eq @panel.width
\r
466 context 'ユーザ権限がないとき' do
\r
470 context 'html形式' do
\r
471 it 'ステータスコード302 Foundを返す' do
\r
472 post :create, :panel => @attr
\r
473 response.status.should eq 302
\r
475 it 'サインインページへ遷移する' do
\r
476 post :create, :panel => @attr
\r
477 response.body.should redirect_to '/users/sign_in'
\r
480 context 'json形式' do
\r
481 it 'ステータスコード401 Unauthorizedを返す' do
\r
482 post :create, :panel => @attr, :format => :json
\r
483 response.status.should eq 401
\r
485 it '応答メッセージにUnauthorizedを返す' do
\r
486 post :create, :panel => @attr, :format => :json
\r
487 response.message.should match(/Unauthorized/)
\r
491 context 'ユーザ権限はないが管理者権限があるとき' do
\r
496 context 'html形式' do
\r
497 it 'ステータスコード302 Foundを返す' do
\r
498 post :create, :panel => @attr
\r
499 response.status.should eq 302
\r
501 it 'サインインページへ遷移する' do
\r
502 post :create, :panel => @attr
\r
503 response.body.should redirect_to '/users/sign_in'
\r
507 context 'ユーザだが作家登録していないとき' do
\r
511 context 'html形式' do
\r
512 it 'ステータスコード302 Foundを返す' do
\r
513 post :create, :panel => @attr
\r
514 response.status.should eq 302
\r
516 it '作家登録ページへ遷移する' do
\r
517 post :create, :panel => @attr
\r
518 response.body.should redirect_to new_author_path
\r
522 context '検証、保存に失敗した' do
\r
524 Panel.any_instance.stub(:store).and_return(false)
\r
526 it "未保存のコマを保持している" do
\r
527 post :create, :panel => @attr
\r
528 assigns(:panel).should be_a_new(Panel)
\r
530 context 'html形式' do
\r
531 it 'ステータスコード200 OKを返す' do
\r
532 post :create, :panel => @attr
\r
533 response.status.should eq 200
\r
536 post :create, :panel => @attr
\r
537 response.should render_template("new")
\r
540 context 'json形式' do
\r
541 it 'ステータスコード422 unprocessable_entity を返す' do
\r
542 post :create, :panel => @attr, :format => :json
\r
543 response.status.should eq 422
\r
545 it '応答メッセージUnprocessable Entityを返す' do
\r
546 post :create, :panel => @attr, :format => :json
\r
547 response.message.should match(/Unprocessable/)
\r
553 describe '編集フォーム表示に於いて' do
\r
555 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
557 Panel.stub(:show).and_return(@panel)
\r
559 context 'つつがなく終わるとき' do
\r
560 it 'コマモデルに編集取得を問い合わせている' do
\r
561 Panel.should_receive(:edit).exactly(1)
\r
562 get :edit, :id => @panel.id
\r
564 it '@panelにデータを用意している' do
\r
565 get :edit, :id => @panel.id
\r
566 assigns(:panel).should eq @panel
\r
568 context 'html形式' do
\r
569 it 'ステータスコード200 OKを返す' do
\r
570 get :edit, :id => @panel.id
\r
571 response.should be_success
\r
573 it 'editテンプレートを描画する' do
\r
574 get :edit, :id => @panel.id
\r
575 response.should render_template("edit")
\r
579 it 'ステータスコード200 OKを返す' do
\r
580 get :edit, :id => @panel.id, :format => :js
\r
581 response.should be_success
\r
583 it 'edit.jsテンプレートを描画する' do
\r
584 get :edit, :id => @panel.id, :format => :js
\r
585 response.should render_template("edit")
\r
589 context 'ユーザ権限がないとき' do
\r
593 context 'html形式' do
\r
594 it 'ステータスコード302 Foundを返す' do
\r
595 get :edit, :id => @panel.id
\r
596 response.status.should eq 302
\r
598 it 'サインインページへ遷移する' do
\r
599 get :edit, :id => @panel.id
\r
600 response.body.should redirect_to '/users/sign_in'
\r
604 it 'ステータスコード401 Unauthorizedを返す' do
\r
605 get :edit, :id => @panel.id, :format => :js
\r
606 response.status.should eq 401
\r
608 it '応答メッセージにUnauthorizedを返す' do
\r
609 get :edit, :id => @panel.id, :format => :js
\r
610 response.message.should match(/Unauthorized/)
\r
614 context 'ユーザ権限はないが管理者権限があるとき' do
\r
619 context 'html形式' do
\r
620 it 'ステータスコード302 Foundを返す' do
\r
621 get :edit, :id => @panel.id
\r
622 response.status.should eq 302
\r
624 it 'サインインページへ遷移する' do
\r
625 get :edit, :id => @panel.id
\r
626 response.body.should redirect_to '/users/sign_in'
\r
630 context 'ユーザだが作家登録していないとき' do
\r
634 context 'html形式' do
\r
635 it 'ステータスコード302 Foundを返す' do
\r
636 get :edit, :id => @panel.id
\r
637 response.status.should eq 302
\r
639 it '作家登録ページへ遷移する' do
\r
640 get :edit, :id => @panel.id
\r
641 response.body.should redirect_to new_author_path
\r
647 describe '更新に於いて' do
\r
649 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
650 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
653 context '事前チェックする' do
\r
656 Panel.stub(:count).and_return(10)
\r
658 it 'panelがパラメータにあれば、展開する' do
\r
659 put :update, :id => @panel.id, :panel => @attr
\r
660 assigns(:prm)['border'].to_i.should eq @panel.border
\r
662 it 'jsonがパラメータにあれば、展開する' do
\r
663 put :update, :id => @panel.id, :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
664 assigns(:prm)['border'].to_i.should eq 4
\r
666 it 'panel・json両パラメータがあれば、panelを優先して展開する' do
\r
669 :panel => FactoryGirl.attributes_for(:panel),
\r
670 :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
672 assigns(:prm)['border'].to_i.should eq @panel.border
\r
675 context 'つつがなく終わるとき' do
\r
676 it 'モデルに編集取得依頼する' do
\r
677 Panel.stub(:edit).with(any_args).and_return(@panel)
\r
678 Panel.should_receive(:edit).exactly(1)
\r
679 put :update, :id => @panel.id, :panel => @attr
\r
682 Panel.any_instance.should_receive(:store).exactly(1)
\r
683 put :update, :id => @panel.id, :panel => @attr
\r
685 it "@panelに作成されたコマを保持していて、それがDBにある" do
\r
686 put :update, :id => @panel.id, :panel => @attr
\r
687 assigns(:panel).should be_a(Panel)
\r
688 assigns(:panel).should be_persisted
\r
690 context 'html形式' do
\r
691 it 'ステータスコード302 Foundを返す' do
\r
692 Panel.any_instance.stub(:store).and_return(true)
\r
693 put :update, :id => @panel.id, :panel => @attr
\r
694 response.status.should eq 302
\r
696 it '作成されたコマの表示ページへ遷移する' do
\r
697 # Panel.any_instance.stub(:store).and_return(true)
\r
698 put :update, :id => @panel.id, :panel => @attr
\r
699 response.should redirect_to(Panel.last)
\r
702 context 'json形式' do
\r
703 it 'ステータスコード200 OKを返す' do
\r
704 # Panel.any_instance.stub(:store).and_return(true)
\r
705 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
706 response.should be_success
\r
708 it 'ページ本体は特に返さない' do
\r
709 Panel.any_instance.stub(:save).with(any_args()).and_return(true)
\r
710 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
711 response.body.should match /./
\r
715 context 'ユーザ権限がないとき' do
\r
719 context 'html形式' do
\r
720 it 'ステータスコード302 Foundを返す' do
\r
721 put :update, :id => @panel.id, :panel => @attr
\r
722 response.status.should eq 302
\r
724 it 'サインインページへ遷移する' do
\r
725 put :update, :id => @panel.id, :panel => @attr
\r
726 response.body.should redirect_to '/users/sign_in'
\r
729 context 'json形式' do
\r
730 it 'ステータスコード401 Unauthorizedを返す' do
\r
731 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
732 response.status.should eq 401
\r
734 it '応答メッセージにUnauthorizedを返す' do
\r
735 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
736 response.message.should match(/Unauthorized/)
\r
740 context 'ユーザ権限はないが管理者権限があるとき' do
\r
745 context 'html形式' do
\r
746 it 'ステータスコード302 Foundを返す' do
\r
747 put :update, :id => @panel.id, :panel => @attr
\r
748 response.status.should eq 302
\r
750 it 'サインインページへ遷移する' do
\r
751 put :update, :id => @panel.id, :panel => @attr
\r
752 response.body.should redirect_to '/users/sign_in'
\r
756 context 'ユーザだが作家登録していないとき' do
\r
760 context 'html形式' do
\r
761 it 'ステータスコード302 Foundを返す' do
\r
762 put :update, :id => @panel.id, :panel => @attr
\r
763 response.status.should eq 302
\r
765 it '作家登録ページへ遷移する' do
\r
766 put :update, :id => @panel.id, :panel => @attr
\r
767 response.body.should redirect_to new_author_path
\r
771 context '検証、保存に失敗した' do
\r
773 Panel.any_instance.stub(:store).and_return(false)
\r
775 it "指定のコマを保持している" do
\r
776 put :update, :id => @panel.id, :panel => @attr
\r
777 assigns(:panel).should eq @panel
\r
779 context 'html形式' do
\r
780 it 'ステータスコード200 OKを返す' do
\r
781 put :update, :id => @panel.id, :panel => @attr
\r
782 response.status.should eq 200
\r
785 put :update, :id => @panel.id, :panel => @attr
\r
786 response.should render_template("edit")
\r
789 context 'json形式' do
\r
790 it 'ステータスコード422 unprocessable_entity を返す' do
\r
791 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
792 response.status.should eq 422
\r
794 it '応答メッセージUnprocessable Entityを返す' do
\r
795 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
796 response.message.should match(/Unprocessable/)
\r
802 describe '削除に於いて' do
\r
804 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
805 Panel.stub(:edit).and_return(@panel)
\r
808 context 'つつがなく終わるとき' do
\r
809 it 'コマモデルに編集取得を問い合わせている' do
\r
810 Panel.should_receive(:edit).exactly(1)
\r
811 delete :destroy, :id => @panel.id
\r
813 it '@panelにアレを取得している' do
\r
814 delete :destroy, :id => @panel.id
\r
815 assigns(:panel).id.should eq(@panel.id)
\r
819 delete :destroy, :id => @panel.id
\r
820 }.should change(Panel, :count)
\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.should redirect_to('/home/panel')
\r
832 context 'json形式' do
\r
833 it 'ステータスコード200 OKを返す' do
\r
834 delete :destroy, :id => @panel.id, :format => :json
\r
835 response.should be_success
\r
839 context 'ユーザ権限がないとき' do
\r
843 context 'html形式' do
\r
844 it 'ステータスコード302 Foundを返す' do
\r
845 delete :destroy, :id => @panel.id
\r
846 response.status.should eq 302
\r
848 it 'サインインページへ遷移する' do
\r
849 delete :destroy, :id => @panel.id
\r
850 response.body.should redirect_to '/users/sign_in'
\r
853 context 'json形式' do
\r
854 it 'ステータスコード401 Unauthorizedを返す' do
\r
855 delete :destroy, :id => @panel.id, :format => :json
\r
856 response.status.should eq 401
\r
858 it '応答メッセージにUnauthorizedを返す' do
\r
859 delete :destroy, :id => @panel.id, :format => :json
\r
860 response.message.should match(/Unauthorized/)
\r
864 context 'ユーザ権限はないが管理者権限があるとき' do
\r
869 context 'html形式' do
\r
870 it 'ステータスコード302 Foundを返す' do
\r
871 delete :destroy, :id => @panel.id
\r
872 response.status.should eq 302
\r
874 it 'サインインページへ遷移する' do
\r
875 delete :destroy, :id => @panel.id
\r
876 response.body.should redirect_to '/users/sign_in'
\r
880 context 'ユーザだが作家登録していないとき' do
\r
884 context 'html形式' do
\r
885 it 'ステータスコード302 Foundを返す' do
\r
886 delete :destroy, :id => @panel.id
\r
887 response.status.should eq 302
\r
889 it '作家登録ページへ遷移する' do
\r
890 delete :destroy, :id => @panel.id
\r
891 response.body.should redirect_to new_author_path
\r
895 context '削除に失敗したとき' do
\r
897 Panel.any_instance.stub(:destroy_with_elements).and_return(false)
\r
899 context 'html形式' do
\r
900 it 'ステータスコード302 Foundを返す' do
\r
901 delete :destroy, :id => @panel.id
\r
902 response.status.should eq 302
\r
904 it 'そのコマの詳細ページへ遷移する' do
\r
905 delete :destroy, :id => @panel.id
\r
906 response.should redirect_to(panel_path(@panel))
\r
909 context 'json形式' do
\r
910 it 'ステータスコード422 unprocessable_entity を返す' do
\r
911 delete :destroy, :id => @panel.id, :format => :json
\r
912 response.status.should eq 422
\r
914 it '応答メッセージUnprocessable Entityを返す' do
\r
915 delete :destroy, :id => @panel.id, :format => :json
\r
916 response.message.should match(/Unprocessable/)
\r
921 context '対象コマがないとき' do
\r
923 context '他人のコマだったとき' do
\r
929 describe '一覧表示に於いて' do
\r
931 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
932 Panel.stub(:list).and_return([@panel, @panel, @panel])
\r
935 context 'つつがなく終わるとき' do
\r
936 context 'html形式' do
\r
937 it 'ステータスコード200 OKを返す' do
\r
939 response.should be_success
\r
941 it 'indexテンプレートを描画する' do
\r
943 response.should render_template("index")
\r
946 context 'json形式' do
\r
947 it 'ステータスコード200 OKを返す' do
\r
948 get :index, :format => :json
\r
949 response.should be_success
\r
952 get :index, :format => :json
\r
953 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
957 context 'ユーザ権限がないとき' do
\r
961 context 'html形式' do
\r
962 it 'ステータスコード200 OKを返す' do
\r
964 response.should be_success
\r
966 it 'indexテンプレートを描画する' do
\r
968 response.should render_template("index")
\r
971 context 'json形式' do
\r
972 it 'ステータスコード200 OKを返す' do
\r
973 get :index, :format => :json
\r
974 response.should be_success
\r
977 get :index, :format => :json
\r
978 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
984 describe '単体表示に於いて' do
\r
986 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
987 Panel.stub(:show).with(@panel.id.to_s, [nil, nil]).and_return(@panel)
\r
988 Panel.stub(:show).with(@panel.id.to_s, [@user, nil]).and_return(@panel)
\r
989 Panel.stub(:show).with(@panel.id.to_s, [nil, @admin]).and_return(@panel)
\r
992 context 'つつがなく終わるとき' do
\r
993 context 'html形式' do
\r
994 it 'ステータスコード200 OKを返す' do
\r
995 get :show, :id => @panel.id
\r
996 response.should be_success
\r
998 it 'showテンプレートを描画する' do
\r
999 get :show, :id => @panel.id
\r
1000 response.should render_template("show")
\r
1003 context 'json形式' do
\r
1004 it 'ステータスコード200 OKを返す' do
\r
1005 get :show, :id => @panel.id, :format => :json
\r
1006 response.should be_success
\r
1008 it 'jsonデータを返す' do
\r
1009 get :show, :id => @panel.id, :format => :json
\r
1010 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1014 context 'ユーザ権限がないとき' do
\r
1018 context 'html形式' do
\r
1019 it 'ステータスコード200 OKを返す' do
\r
1020 get :show, :id => @panel.id
\r
1021 response.should be_success
\r
1023 it 'showテンプレートを描画する' do
\r
1024 get :show, :id => @panel.id
\r
1025 response.should render_template("show")
\r
1028 context 'json形式' do
\r
1029 it 'ステータスコード200 OKを返す' do
\r
1030 get :show, :id => @panel.id, :format => :json
\r
1031 response.should be_success
\r
1033 it 'jsonデータを返す' do
\r
1034 get :show, :id => @panel.id, :format => :json
\r
1035 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1041 describe 'コマ数取得に於いて' do
\r
1043 Panel.should_receive(:visible_count).and_return(3)
\r
1046 context 'つつがなく終わるとき' do
\r
1047 it 'ステータスコード200 OKを返す' do
\r
1048 get :count, :format => :json
\r
1049 response.should be_success
\r
1051 context 'json形式' do
\r
1052 it 'jsonデータを返す' do
\r
1053 get :count, :format => :json
\r
1054 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1060 describe '新規作成フォーム表示に於いて' do
\r
1064 context 'つつがなく終わるとき' do
\r
1065 context 'html形式' do
\r
1066 it 'ステータスコード200 OKを返す' do
\r
1068 response.should be_success
\r
1070 it 'newテンプレートを描画する' do
\r
1072 response.should render_template("new")
\r
1076 it 'new.jsテンプレートを描画する' do
\r
1077 get :new, :format => :js
\r
1078 response.should render_template("new")
\r
1081 context 'json形式' do
\r
1082 it 'jsonデータを返す' do
\r
1083 get :new, :format => :json
\r
1084 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1088 context 'ユーザ権限がないとき' do
\r
1092 context 'html形式' do
\r
1093 it 'ステータスコード302 Foundを返す' do
\r
1095 response.status.should eq 302
\r
1097 it 'サインインページへ遷移する' do
\r
1099 response.body.should redirect_to '/users/sign_in'
\r
1103 it 'ステータスコード401 Unauthorizedを返す' do
\r
1104 get :new, :format => :js
\r
1105 response.status.should eq 401
\r
1107 it '応答メッセージにUnauthorizedを返す' do
\r
1108 get :new, :format => :js
\r
1109 response.message.should match(/Unauthorized/)
\r
1115 describe '新規作成に於いて' do
\r
1117 @panel = FactoryGirl.build :panel, :author_id => @author.id
\r
1118 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
1121 context 'つつがなく終わるとき' do
\r
1122 context 'html形式' do
\r
1123 it 'ステータスコード302 Foundを返す' do
\r
1124 Panel.any_instance.stub(:store).and_return(true)
\r
1125 post :create, :panel => @attr
\r
1126 response.status.should eq 302
\r
1128 it '作成されたコマの表示ページへ遷移する' do
\r
1129 # Panel.any_instance.stub(:store).and_return(true)
\r
1130 post :create, :panel => @attr
\r
1131 response.should redirect_to(Panel.last)
\r
1134 context 'json形式' do
\r
1135 it 'ステータスコード200 OKを返す' do
\r
1136 # Panel.any_instance.stub(:store).and_return(true)
\r
1137 post :create, :panel => @attr, :format => :json
\r
1138 response.should be_success
\r
1140 it '作成されたコマをjsonデータで返す' do
\r
1141 post :create, :panel => @attr, :format => :json
\r
1142 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1146 context 'ユーザ権限がないとき' do
\r
1150 context 'html形式' do
\r
1151 it 'ステータスコード302 Foundを返す' do
\r
1152 post :create, :panel => @attr
\r
1153 response.status.should eq 302
\r
1155 it 'サインインページへ遷移する' do
\r
1156 post :create, :panel => @attr
\r
1157 response.body.should redirect_to '/users/sign_in'
\r
1160 context 'json形式' do
\r
1161 it 'ステータスコード401 Unauthorizedを返す' do
\r
1162 post :create, :panel => @attr, :format => :json
\r
1163 response.status.should eq 401
\r
1165 it '応答メッセージにUnauthorizedを返す' do
\r
1166 post :create, :panel => @attr, :format => :json
\r
1167 response.message.should match(/Unauthorized/)
\r
1173 describe '編集フォーム表示に於いて' do
\r
1175 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
1177 Panel.stub(:show).and_return(@panel)
\r
1179 context 'つつがなく終わるとき' do
\r
1180 context 'html形式' do
\r
1181 it 'ステータスコード200 OKを返す' do
\r
1182 get :edit, :id => @panel.id
\r
1183 response.should be_success
\r
1185 it 'editテンプレートを描画する' do
\r
1186 get :edit, :id => @panel.id
\r
1187 response.should render_template("edit")
\r
1191 it 'ステータスコード200 OKを返す' do
\r
1192 get :edit, :id => @panel.id, :format => :js
\r
1193 response.should be_success
\r
1195 it 'edit.jsテンプレートを描画する' do
\r
1196 get :edit, :id => @panel.id, :format => :js
\r
1197 response.should render_template("edit")
\r
1201 context 'ユーザ権限がないとき' do
\r
1205 context 'html形式' do
\r
1206 it 'ステータスコード302 Foundを返す' do
\r
1207 get :edit, :id => @panel.id
\r
1208 response.status.should eq 302
\r
1210 it 'サインインページへ遷移する' do
\r
1211 get :edit, :id => @panel.id
\r
1212 response.body.should redirect_to '/users/sign_in'
\r
1216 it 'ステータスコード401 Unauthorizedを返す' do
\r
1217 get :edit, :id => @panel.id, :format => :js
\r
1218 response.status.should eq 401
\r
1220 it '応答メッセージにUnauthorizedを返す' do
\r
1221 get :edit, :id => @panel.id, :format => :js
\r
1222 response.message.should match(/Unauthorized/)
\r
1228 describe '更新に於いて' do
\r
1230 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
1231 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
1234 context 'つつがなく終わるとき' do
\r
1235 context 'html形式' do
\r
1236 it 'ステータスコード302 Foundを返す' do
\r
1237 Panel.any_instance.stub(:store).and_return(true)
\r
1238 put :update, :id => @panel.id, :panel => @attr
\r
1239 response.status.should eq 302
\r
1241 it '作成されたコマの表示ページへ遷移する' do
\r
1242 # Panel.any_instance.stub(:store).and_return(true)
\r
1243 put :update, :id => @panel.id, :panel => @attr
\r
1244 response.should redirect_to(Panel.last)
\r
1247 context 'json形式' do
\r
1248 it 'ステータスコード200 OKを返す' do
\r
1249 # Panel.any_instance.stub(:store).and_return(true)
\r
1250 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1251 response.should be_success
\r
1253 it 'ページ本体は特に返さない' do
\r
1254 Panel.any_instance.stub(:save).with(any_args()).and_return(true)
\r
1255 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1256 response.body.should match /./
\r
1260 context 'ユーザ権限がないとき' do
\r
1264 context 'html形式' do
\r
1265 it 'ステータスコード302 Foundを返す' do
\r
1266 put :update, :id => @panel.id, :panel => @attr
\r
1267 response.status.should eq 302
\r
1269 it 'サインインページへ遷移する' do
\r
1270 put :update, :id => @panel.id, :panel => @attr
\r
1271 response.body.should redirect_to '/users/sign_in'
\r
1274 context 'json形式' do
\r
1275 it 'ステータスコード401 Unauthorizedを返す' do
\r
1276 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1277 response.status.should eq 401
\r
1279 it '応答メッセージにUnauthorizedを返す' do
\r
1280 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1281 response.message.should match(/Unauthorized/)
\r
1287 describe '削除に於いて' do
\r
1289 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
1290 Panel.stub(:edit).and_return(@panel)
\r
1293 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.should redirect_to('/home/panel')
\r
1304 context 'json形式' do
\r
1305 it 'ステータスコード200 OKを返す' do
\r
1306 delete :destroy, :id => @panel.id, :format => :json
\r
1307 response.should be_success
\r
1311 context 'ユーザ権限がないとき' do
\r
1315 context 'html形式' do
\r
1316 it 'ステータスコード302 Foundを返す' do
\r
1317 delete :destroy, :id => @panel.id
\r
1318 response.status.should eq 302
\r
1320 it 'サインインページへ遷移する' do
\r
1321 delete :destroy, :id => @panel.id
\r
1322 response.body.should redirect_to '/users/sign_in'
\r
1325 context 'json形式' do
\r
1326 it 'ステータスコード401 Unauthorizedを返す' do
\r
1327 delete :destroy, :id => @panel.id, :format => :json
\r
1328 response.status.should eq 401
\r
1330 it '応答メッセージにUnauthorizedを返す' do
\r
1331 delete :destroy, :id => @panel.id, :format => :json
\r
1332 response.message.should match(/Unauthorized/)
\r