1 # -*- encoding: utf-8 -*-
\r
2 require 'spec_helper'
\r
4 describe PanelsController do
\r
6 SpeechBalloonTemplate.delete_all
\r
7 @admin = FactoryGirl.create :admin
\r
8 @sp = FactoryGirl.create :system_picture
\r
9 @lg = FactoryGirl.create :license_group
\r
10 @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
\r
11 @user = FactoryGirl.create :user_yas
\r
12 @author = FactoryGirl.create :author, :user_id => @user.id
\r
15 if MagicNumber['run_mode'] == 1
\r
16 describe '一覧表示に於いて' do
\r
18 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
19 Panel.stub(:list).and_return([@panel, @panel, @panel])
\r
22 context '事前チェックする' do
\r
23 it '与えられたpageがセットされている' do
\r
24 get :index, :page => 5
\r
25 assigns(:page).should eq 5
\r
27 it '省略されると@pageに1値が入る' do
\r
29 assigns(:page).should eq 1
\r
31 it '与えられたpage_sizeがセットされている' do
\r
32 get :index, :page_size => 15
\r
33 assigns(:page_size).should eq 15
\r
35 it '省略されると@page_sizeにデフォルト値が入る' do
\r
37 assigns(:page_size).should eq Panel.default_page_size
\r
39 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
\r
40 get :index, :page_size => 1500
\r
41 assigns(:page_size).should eq Panel.max_page_size
\r
43 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
\r
44 get :index, :page_size => 0
\r
45 assigns(:page_size).should eq Panel.default_page_size
\r
48 context 'つつがなく終わるとき' do
\r
49 it 'コマモデルに一覧を問い合わせている' do
\r
50 Panel.should_receive(:list).exactly(1)
\r
53 it '@panelsにリストを取得している' do
\r
55 assigns(:panels).should have_at_least(3).items
\r
58 it '@paginateにページ制御を取得している' do
\r
60 assigns(:paginate).is_a?(Kaminari::PaginatableArray).should be_true
\r
62 it 'ステータスコード200 OKを返す' do
\r
64 response.should be_success
\r
66 it 'indexテンプレートを描画する' do
\r
68 response.should render_template("index")
\r
72 it 'ステータスコード200 OKを返す' do
\r
73 get :index, :format => :json
\r
74 response.should be_success
\r
77 get :index, :format => :json
\r
78 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
80 it 'コマモデルにコマリストのjson出力を問い合わせている' do
\r
81 Panel.should_receive(:list_as_json_text).exactly(1)
\r
82 get :index, :format => :json
\r
84 it 'データがリスト構造になっている' do
\r
85 get :index, :format => :json
\r
86 json = JSON.parse response.body
\r
87 json.should have_at_least(3).items
\r
89 it 'リストの先頭くらいはコマっぽいものであって欲しい' do
\r
90 get :index, :format => :json
\r
91 json = JSON.parse response.body
\r
92 json.first.has_key?("border").should be_true
\r
96 context 'ユーザ権限がないとき' do
\r
100 context 'html形式' do
\r
101 it 'ステータスコード302 Foundを返す' do
\r
103 response.status.should eq 302
\r
105 it 'サインインページへ遷移する' do
\r
107 response.should redirect_to '/users/sign_in'
\r
110 context 'json形式' do
\r
111 it 'ステータスコード401 Unauthorizedを返す' do
\r
112 get :index, :format => :json
\r
113 response.status.should eq 401
\r
115 it '応答メッセージにUnauthorizedを返す' do
\r
116 get :index, :format => :json
\r
117 response.message.should match(/Unauthorized/)
\r
121 context 'ユーザ権限はないが管理者権限があるとき' do
\r
126 it 'ステータスコード200 OKを返す' do
\r
128 response.should be_success
\r
131 context 'ユーザだが作家登録していないとき' do
\r
135 it 'ステータスコード200 OKを返す' do
\r
137 response.should be_success
\r
142 describe '単体表示に於いて' do
\r
144 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
145 Panel.stub(:show).with(@panel.id.to_s, [@user, nil]).and_return(@panel)
\r
146 Panel.stub(:show).with(@panel.id.to_s, [nil, @admin]).and_return(@panel)
\r
149 context 'つつがなく終わるとき' do
\r
150 it 'コマモデルに単体取得を問い合わせている' do
\r
151 Panel.should_receive(:show).exactly(1)
\r
154 it '@panelにアレを取得している' do
\r
155 get :show, :id => @panel.id
\r
156 assigns(:panel).id.should eq(@panel.id)
\r
158 context 'html形式' do
\r
159 it 'ステータスコード200 OKを返す' do
\r
160 get :show, :id => @panel.id
\r
161 response.should be_success
\r
163 it 'showテンプレートを描画する' do
\r
164 get :show, :id => @panel.id
\r
165 response.should render_template("show")
\r
168 context 'json形式' do
\r
169 it 'ステータスコード200 OKを返す' do
\r
170 get :show, :id => @panel.id, :format => :json
\r
171 response.should be_success
\r
174 get :show, :id => @panel.id, :format => :json
\r
175 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
177 it 'コマモデルにコマのjson出力を問い合わせている' do
\r
178 Panel.any_instance.should_receive(:panel_elements_as_json).exactly(1)
\r
179 get :show, :id => @panel.id, :format => :json
\r
181 it 'データがアレになっている' do
\r
182 get :show, :id => @panel.id, :format => :json
\r
183 json = JSON.parse response.body
\r
184 json["width"].should eq 100
\r
188 context 'ユーザ権限がないとき' do
\r
192 context 'html形式' do
\r
193 it 'ステータスコード302 Foundを返す' do
\r
194 get :show, :id => @panel.id
\r
195 response.status.should eq 302
\r
197 it 'サインインページへ遷移する' do
\r
198 get :show, :id => @panel.id
\r
199 response.body.should redirect_to '/users/sign_in'
\r
202 context 'json形式' do
\r
203 it 'ステータスコード401 Unauthorizedを返す' do
\r
204 get :show, :id => @panel.id, :format => :json
\r
205 response.status.should eq 401
\r
207 it '応答メッセージにUnauthorizedを返す' do
\r
208 get :show, :id => @panel.id, :format => :json
\r
209 response.message.should match(/Unauthorized/)
\r
213 context 'ユーザ権限はないが管理者権限があるとき' do
\r
218 it 'ステータスコード200 OKを返す' do
\r
219 get :show, :id => @panel.id
\r
220 response.should be_success
\r
223 context 'ユーザだが作家登録していないとき' do
\r
227 it 'ステータスコード200 OKを返す' do
\r
228 get :show, :id => @panel.id
\r
229 response.should be_success
\r
233 context '対象コマがないとき' do
\r
234 context 'html形式' do
\r
235 it '例外404 not_foundを返す' do
\r
237 get :show, :id => 0
\r
238 }.should raise_error(ActiveRecord::RecordNotFound)
\r
241 context 'json形式' do
\r
242 it '例外404 not_foundを返す' do
\r
244 get :show, :id => 0, :format => :json
\r
245 }.should raise_error(ActiveRecord::RecordNotFound)
\r
249 context '非公開コマを見ようとしたとき' do
\r
250 context 'html形式' do
\r
251 it '例外403 forbiddenを返す' do
\r
252 Panel.any_instance.stub(:visible?).with(any_args()).and_return(false)
\r
253 hidden = FactoryGirl.create :hidden_panel, :author_id => @author.id
\r
255 get :show, :id => hidden
\r
256 }.should raise_error(ActiveRecord::Forbidden)
\r
259 context 'json形式' do
\r
260 it '例外403 forbiddenを返す' do
\r
261 Panel.any_instance.stub(:visible?).with(any_args()).and_return(false)
\r
262 hidden = FactoryGirl.create :hidden_panel, :author_id => @author.id
\r
264 get :show, :id => hidden, :format => :json
\r
265 }.should raise_error(ActiveRecord::Forbidden)
\r
272 describe 'コマ数取得に於いて' do
\r
274 Panel.should_receive(:visible_count).and_return(3)
\r
277 context 'つつがなく終わるとき' do
\r
278 it 'ステータスコード200 OKを返す' do
\r
279 get :count, :format => :json
\r
280 response.should be_success
\r
282 context 'json形式' do
\r
284 get :count, :format => :json
\r
285 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
287 it 'データがHash構造になっていてコマ数が1である' do
\r
288 get :count, :format => :json
\r
289 json = JSON.parse response.body
\r
290 json["count"].should == 3
\r
296 describe '新規作成フォーム表示に於いて' do
\r
300 context 'つつがなく終わるとき' do
\r
301 it '@panelに新規データを用意している' do
\r
303 assigns(:panel).should be_a_new(Panel)
\r
305 it 'コマモデルにデフォルト値補充を依頼している' do
\r
306 Panel.any_instance.should_receive(:supply_default).exactly(1)
\r
309 context 'html形式' do
\r
310 it 'ステータスコード200 OKを返す' do
\r
312 response.should be_success
\r
314 it 'newテンプレートを描画する' do
\r
316 response.should render_template("new")
\r
320 it 'new.jsテンプレートを描画する' do
\r
321 get :new, :format => :js
\r
322 response.should render_template("new")
\r
325 context 'json形式' do
\r
327 get :new, :format => :json
\r
328 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
330 it 'コマモデルにコマのjson出力を問い合わせている' do
\r
331 Panel.any_instance.should_receive(:panel_elements_as_json).exactly(1)
\r
332 get :new, :format => :json
\r
336 context 'ユーザ権限がないとき' do
\r
340 context 'html形式' do
\r
341 it 'ステータスコード302 Foundを返す' do
\r
343 response.status.should eq 302
\r
345 it 'サインインページへ遷移する' do
\r
347 response.body.should redirect_to '/users/sign_in'
\r
351 it 'ステータスコード401 Unauthorizedを返す' do
\r
352 get :new, :format => :js
\r
353 response.status.should eq 401
\r
355 it '応答メッセージにUnauthorizedを返す' do
\r
356 get :new, :format => :js
\r
357 response.message.should match(/Unauthorized/)
\r
361 context 'ユーザ権限はないが管理者権限があるとき' do
\r
366 context 'html形式' do
\r
367 it 'ステータスコード302 Foundを返す' do
\r
369 response.status.should eq 302
\r
371 it 'サインインページへ遷移する' do
\r
373 response.body.should redirect_to '/users/sign_in'
\r
377 context 'ユーザだが作家登録していないとき' do
\r
381 context 'html形式' do
\r
382 it 'ステータスコード302 Foundを返す' do
\r
384 response.status.should eq 302
\r
386 it '作家登録ページへ遷移する' do
\r
388 response.body.should redirect_to new_author_path
\r
394 describe '新規作成に於いて' do
\r
396 @panel = FactoryGirl.build :panel, :author_id => @author.id
\r
397 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
400 context '事前チェックする' do
\r
402 Panel.stub(:count).and_return(10)
\r
404 it 'panelがパラメータにあれば、展開する' do
\r
405 post :create, :panel => @attr
\r
406 assigns(:prm)['border'].to_i.should eq @panel.border
\r
408 it 'jsonがパラメータにあれば、展開する' do
\r
409 post :create, :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
410 assigns(:prm)['border'].to_i.should eq 4
\r
412 it 'panel・json両パラメータがあれば、panelを優先して展開する' do
\r
414 :panel => FactoryGirl.attributes_for(:panel),
\r
415 :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
417 assigns(:prm)['border'].to_i.should eq @panel.border
\r
419 it 'コマモデルにデフォルト値補充を依頼している' do
\r
420 Panel.any_instance.should_receive(:supply_default).exactly(1)
\r
421 post :create, :panel => @attr
\r
424 Panel.any_instance.should_receive(:store).exactly(1)
\r
425 post :create, :panel => @attr
\r
428 context 'つつがなく終わるとき' do
\r
429 it "@panelに作成されたコマを保持していて、それがDBにある" do
\r
430 post :create, :panel => @attr
\r
431 assigns(:panel).should be_a(Panel)
\r
432 assigns(:panel).should be_persisted
\r
434 context 'html形式' do
\r
435 it 'ステータスコード302 Foundを返す' do
\r
436 Panel.any_instance.stub(:store).and_return(true)
\r
437 post :create, :panel => @attr
\r
438 response.status.should eq 302
\r
440 it '作成されたコマの表示ページへ遷移する' do
\r
441 # Panel.any_instance.stub(:store).and_return(true)
\r
442 post :create, :panel => @attr
\r
443 response.should redirect_to(Panel.last)
\r
446 context 'json形式' do
\r
447 it 'ステータスコード200 OKを返す' do
\r
448 # Panel.any_instance.stub(:store).and_return(true)
\r
449 post :create, :panel => @attr, :format => :json
\r
450 response.should be_success
\r
452 it '作成されたコマをjsonデータで返す' do
\r
453 post :create, :panel => @attr, :format => :json
\r
454 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
456 it 'コマモデルにコマのjson出力を問い合わせている' do
\r
457 Panel.any_instance.should_receive(:panel_elements_as_json).exactly(1)
\r
458 post :create, :panel => @attr, :format => :json
\r
460 it 'データがアレになっている' do
\r
461 post :create, :panel => @attr, :format => :json
\r
462 json = JSON.parse response.body
\r
463 json["width"].should eq @panel.width
\r
467 context 'ユーザ権限がないとき' do
\r
471 context 'html形式' do
\r
472 it 'ステータスコード302 Foundを返す' do
\r
473 post :create, :panel => @attr
\r
474 response.status.should eq 302
\r
476 it 'サインインページへ遷移する' do
\r
477 post :create, :panel => @attr
\r
478 response.body.should redirect_to '/users/sign_in'
\r
481 context 'json形式' do
\r
482 it 'ステータスコード401 Unauthorizedを返す' do
\r
483 post :create, :panel => @attr, :format => :json
\r
484 response.status.should eq 401
\r
486 it '応答メッセージにUnauthorizedを返す' do
\r
487 post :create, :panel => @attr, :format => :json
\r
488 response.message.should match(/Unauthorized/)
\r
492 context 'ユーザ権限はないが管理者権限があるとき' do
\r
497 context 'html形式' do
\r
498 it 'ステータスコード302 Foundを返す' do
\r
499 post :create, :panel => @attr
\r
500 response.status.should eq 302
\r
502 it 'サインインページへ遷移する' do
\r
503 post :create, :panel => @attr
\r
504 response.body.should redirect_to '/users/sign_in'
\r
508 context 'ユーザだが作家登録していないとき' do
\r
512 context 'html形式' do
\r
513 it 'ステータスコード302 Foundを返す' do
\r
514 post :create, :panel => @attr
\r
515 response.status.should eq 302
\r
517 it '作家登録ページへ遷移する' do
\r
518 post :create, :panel => @attr
\r
519 response.body.should redirect_to new_author_path
\r
523 context '検証、保存に失敗した' do
\r
525 Panel.any_instance.stub(:store).and_return(false)
\r
527 it "未保存のコマを保持している" do
\r
528 post :create, :panel => @attr
\r
529 assigns(:panel).should be_a_new(Panel)
\r
531 context 'html形式' do
\r
532 it 'ステータスコード200 OKを返す' do
\r
533 post :create, :panel => @attr
\r
534 response.status.should eq 200
\r
537 post :create, :panel => @attr
\r
538 response.should render_template("new")
\r
541 context 'json形式' do
\r
542 it 'ステータスコード422 unprocessable_entity を返す' do
\r
543 post :create, :panel => @attr, :format => :json
\r
544 response.status.should eq 422
\r
546 it '応答メッセージUnprocessable Entityを返す' do
\r
547 post :create, :panel => @attr, :format => :json
\r
548 response.message.should match(/Unprocessable/)
\r
554 describe '編集フォーム表示に於いて' do
\r
556 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
558 Panel.stub(:show).and_return(@panel)
\r
560 context 'つつがなく終わるとき' do
\r
561 it 'コマモデルに編集取得を問い合わせている' do
\r
562 Panel.should_receive(:edit).exactly(1)
\r
563 get :edit, :id => @panel.id
\r
565 it '@panelにデータを用意している' do
\r
566 get :edit, :id => @panel.id
\r
567 assigns(:panel).should eq @panel
\r
569 context 'html形式' do
\r
570 it 'ステータスコード200 OKを返す' do
\r
571 get :edit, :id => @panel.id
\r
572 response.should be_success
\r
574 it 'editテンプレートを描画する' do
\r
575 get :edit, :id => @panel.id
\r
576 response.should render_template("edit")
\r
580 it 'ステータスコード200 OKを返す' do
\r
581 get :edit, :id => @panel.id, :format => :js
\r
582 response.should be_success
\r
584 it 'edit.jsテンプレートを描画する' do
\r
585 get :edit, :id => @panel.id, :format => :js
\r
586 response.should render_template("edit")
\r
590 context 'ユーザ権限がないとき' do
\r
594 context 'html形式' do
\r
595 it 'ステータスコード302 Foundを返す' do
\r
596 get :edit, :id => @panel.id
\r
597 response.status.should eq 302
\r
599 it 'サインインページへ遷移する' do
\r
600 get :edit, :id => @panel.id
\r
601 response.body.should redirect_to '/users/sign_in'
\r
605 it 'ステータスコード401 Unauthorizedを返す' do
\r
606 get :edit, :id => @panel.id, :format => :js
\r
607 response.status.should eq 401
\r
609 it '応答メッセージにUnauthorizedを返す' do
\r
610 get :edit, :id => @panel.id, :format => :js
\r
611 response.message.should match(/Unauthorized/)
\r
615 context 'ユーザ権限はないが管理者権限があるとき' do
\r
620 context 'html形式' do
\r
621 it 'ステータスコード302 Foundを返す' do
\r
622 get :edit, :id => @panel.id
\r
623 response.status.should eq 302
\r
625 it 'サインインページへ遷移する' do
\r
626 get :edit, :id => @panel.id
\r
627 response.body.should redirect_to '/users/sign_in'
\r
631 context 'ユーザだが作家登録していないとき' do
\r
635 context 'html形式' do
\r
636 it 'ステータスコード302 Foundを返す' do
\r
637 get :edit, :id => @panel.id
\r
638 response.status.should eq 302
\r
640 it '作家登録ページへ遷移する' do
\r
641 get :edit, :id => @panel.id
\r
642 response.body.should redirect_to new_author_path
\r
648 describe '更新に於いて' do
\r
650 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
651 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
654 context '事前チェックする' do
\r
657 Panel.stub(:count).and_return(10)
\r
659 it 'panelがパラメータにあれば、展開する' do
\r
660 put :update, :id => @panel.id, :panel => @attr
\r
661 assigns(:prm)['border'].to_i.should eq @panel.border
\r
663 it 'jsonがパラメータにあれば、展開する' do
\r
664 put :update, :id => @panel.id, :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
665 assigns(:prm)['border'].to_i.should eq 4
\r
667 it 'panel・json両パラメータがあれば、panelを優先して展開する' do
\r
670 :panel => FactoryGirl.attributes_for(:panel),
\r
671 :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
673 assigns(:prm)['border'].to_i.should eq @panel.border
\r
676 context 'つつがなく終わるとき' do
\r
677 it 'モデルに編集取得依頼する' do
\r
678 Panel.stub(:edit).with(any_args).and_return(@panel)
\r
679 Panel.should_receive(:edit).exactly(1)
\r
680 put :update, :id => @panel.id, :panel => @attr
\r
683 Panel.any_instance.should_receive(:store).exactly(1)
\r
684 put :update, :id => @panel.id, :panel => @attr
\r
686 it "@panelに作成されたコマを保持していて、それがDBにある" do
\r
687 put :update, :id => @panel.id, :panel => @attr
\r
688 assigns(:panel).should be_a(Panel)
\r
689 assigns(:panel).should be_persisted
\r
691 context 'html形式' do
\r
692 it 'ステータスコード302 Foundを返す' do
\r
693 Panel.any_instance.stub(:store).and_return(true)
\r
694 put :update, :id => @panel.id, :panel => @attr
\r
695 response.status.should eq 302
\r
697 it '作成されたコマの表示ページへ遷移する' do
\r
698 # Panel.any_instance.stub(:store).and_return(true)
\r
699 put :update, :id => @panel.id, :panel => @attr
\r
700 response.should redirect_to(Panel.last)
\r
703 context 'json形式' do
\r
704 it 'ステータスコード200 OKを返す' do
\r
705 # Panel.any_instance.stub(:store).and_return(true)
\r
706 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
707 response.should be_success
\r
709 it 'ページ本体は特に返さない' do
\r
710 Panel.any_instance.stub(:save).with(any_args()).and_return(true)
\r
711 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
712 response.body.should match /./
\r
716 context 'ユーザ権限がないとき' do
\r
720 context 'html形式' do
\r
721 it 'ステータスコード302 Foundを返す' do
\r
722 put :update, :id => @panel.id, :panel => @attr
\r
723 response.status.should eq 302
\r
725 it 'サインインページへ遷移する' do
\r
726 put :update, :id => @panel.id, :panel => @attr
\r
727 response.body.should redirect_to '/users/sign_in'
\r
730 context 'json形式' do
\r
731 it 'ステータスコード401 Unauthorizedを返す' do
\r
732 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
733 response.status.should eq 401
\r
735 it '応答メッセージにUnauthorizedを返す' do
\r
736 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
737 response.message.should match(/Unauthorized/)
\r
741 context 'ユーザ権限はないが管理者権限があるとき' do
\r
746 context 'html形式' do
\r
747 it 'ステータスコード302 Foundを返す' do
\r
748 put :update, :id => @panel.id, :panel => @attr
\r
749 response.status.should eq 302
\r
751 it 'サインインページへ遷移する' do
\r
752 put :update, :id => @panel.id, :panel => @attr
\r
753 response.body.should redirect_to '/users/sign_in'
\r
757 context 'ユーザだが作家登録していないとき' do
\r
761 context 'html形式' do
\r
762 it 'ステータスコード302 Foundを返す' do
\r
763 put :update, :id => @panel.id, :panel => @attr
\r
764 response.status.should eq 302
\r
766 it '作家登録ページへ遷移する' do
\r
767 put :update, :id => @panel.id, :panel => @attr
\r
768 response.body.should redirect_to new_author_path
\r
772 context '検証、保存に失敗した' do
\r
774 Panel.any_instance.stub(:store).and_return(false)
\r
776 it "指定のコマを保持している" do
\r
777 put :update, :id => @panel.id, :panel => @attr
\r
778 assigns(:panel).should eq @panel
\r
780 context 'html形式' do
\r
781 it 'ステータスコード200 OKを返す' do
\r
782 put :update, :id => @panel.id, :panel => @attr
\r
783 response.status.should eq 200
\r
786 put :update, :id => @panel.id, :panel => @attr
\r
787 response.should render_template("edit")
\r
790 context 'json形式' do
\r
791 it 'ステータスコード422 unprocessable_entity を返す' do
\r
792 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
793 response.status.should eq 422
\r
795 it '応答メッセージUnprocessable Entityを返す' do
\r
796 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
797 response.message.should match(/Unprocessable/)
\r
803 describe '削除に於いて' do
\r
805 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
806 Panel.stub(:edit).and_return(@panel)
\r
809 context 'つつがなく終わるとき' do
\r
810 it 'コマモデルに編集取得を問い合わせている' do
\r
811 Panel.should_receive(:edit).exactly(1)
\r
812 delete :destroy, :id => @panel.id
\r
814 it '@panelにアレを取得している' do
\r
815 delete :destroy, :id => @panel.id
\r
816 assigns(:panel).id.should eq(@panel.id)
\r
820 delete :destroy, :id => @panel.id
\r
821 }.should change(Panel, :count)
\r
823 context 'html形式' do
\r
824 it 'ステータスコード302 Foundを返す' do
\r
825 delete :destroy, :id => @panel.id
\r
826 response.status.should eq 302
\r
828 it 'マイコマ一覧ページへ遷移する' do
\r
829 delete :destroy, :id => @panel.id
\r
830 response.should redirect_to('/home/panels')
\r
833 context 'json形式' do
\r
834 it 'ステータスコード200 OKを返す' do
\r
835 delete :destroy, :id => @panel.id, :format => :json
\r
836 response.should be_success
\r
840 context 'ユーザ権限がないとき' do
\r
844 context 'html形式' do
\r
845 it 'ステータスコード302 Foundを返す' do
\r
846 delete :destroy, :id => @panel.id
\r
847 response.status.should eq 302
\r
849 it 'サインインページへ遷移する' do
\r
850 delete :destroy, :id => @panel.id
\r
851 response.body.should redirect_to '/users/sign_in'
\r
854 context 'json形式' do
\r
855 it 'ステータスコード401 Unauthorizedを返す' do
\r
856 delete :destroy, :id => @panel.id, :format => :json
\r
857 response.status.should eq 401
\r
859 it '応答メッセージにUnauthorizedを返す' do
\r
860 delete :destroy, :id => @panel.id, :format => :json
\r
861 response.message.should match(/Unauthorized/)
\r
865 context 'ユーザ権限はないが管理者権限があるとき' do
\r
870 context 'html形式' do
\r
871 it 'ステータスコード302 Foundを返す' do
\r
872 delete :destroy, :id => @panel.id
\r
873 response.status.should eq 302
\r
875 it 'サインインページへ遷移する' do
\r
876 delete :destroy, :id => @panel.id
\r
877 response.body.should redirect_to '/users/sign_in'
\r
881 context 'ユーザだが作家登録していないとき' do
\r
885 context 'html形式' do
\r
886 it 'ステータスコード302 Foundを返す' do
\r
887 delete :destroy, :id => @panel.id
\r
888 response.status.should eq 302
\r
890 it '作家登録ページへ遷移する' do
\r
891 delete :destroy, :id => @panel.id
\r
892 response.body.should redirect_to new_author_path
\r
896 context '削除に失敗したとき' do
\r
898 Panel.any_instance.stub(:destroy_with_elements).and_return(false)
\r
900 context 'html形式' do
\r
901 it 'ステータスコード302 Foundを返す' do
\r
902 delete :destroy, :id => @panel.id
\r
903 response.status.should eq 302
\r
905 it 'そのコマの詳細ページへ遷移する' do
\r
906 delete :destroy, :id => @panel.id
\r
907 response.should redirect_to(panel_path(@panel))
\r
910 context 'json形式' do
\r
911 it 'ステータスコード422 unprocessable_entity を返す' do
\r
912 delete :destroy, :id => @panel.id, :format => :json
\r
913 response.status.should eq 422
\r
915 it '応答メッセージUnprocessable Entityを返す' do
\r
916 delete :destroy, :id => @panel.id, :format => :json
\r
917 response.message.should match(/Unprocessable/)
\r
922 context '対象コマがないとき' do
\r
924 context '他人のコマだったとき' do
\r
930 describe '一覧表示に於いて' do
\r
932 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
933 Panel.stub(:list).and_return([@panel, @panel, @panel])
\r
936 context 'つつがなく終わるとき' do
\r
937 context 'html形式' do
\r
938 it 'ステータスコード200 OKを返す' do
\r
940 response.should be_success
\r
942 it 'indexテンプレートを描画する' do
\r
944 response.should render_template("index")
\r
947 context 'json形式' do
\r
948 it 'ステータスコード200 OKを返す' do
\r
949 get :index, :format => :json
\r
950 response.should be_success
\r
953 get :index, :format => :json
\r
954 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
958 context 'ユーザ権限がないとき' do
\r
962 context 'html形式' do
\r
963 it 'ステータスコード200 OKを返す' do
\r
965 response.should be_success
\r
967 it 'indexテンプレートを描画する' do
\r
969 response.should render_template("index")
\r
972 context 'json形式' do
\r
973 it 'ステータスコード200 OKを返す' do
\r
974 get :index, :format => :json
\r
975 response.should be_success
\r
978 get :index, :format => :json
\r
979 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
985 describe '単体表示に於いて' do
\r
987 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
988 Panel.stub(:show).with(@panel.id.to_s, [nil, nil]).and_return(@panel)
\r
989 Panel.stub(:show).with(@panel.id.to_s, [@user, nil]).and_return(@panel)
\r
990 Panel.stub(:show).with(@panel.id.to_s, [nil, @admin]).and_return(@panel)
\r
993 context 'つつがなく終わるとき' do
\r
994 context 'html形式' do
\r
995 it 'ステータスコード200 OKを返す' do
\r
996 get :show, :id => @panel.id
\r
997 response.should be_success
\r
999 it 'showテンプレートを描画する' do
\r
1000 get :show, :id => @panel.id
\r
1001 response.should render_template("show")
\r
1004 context 'json形式' do
\r
1005 it 'ステータスコード200 OKを返す' do
\r
1006 get :show, :id => @panel.id, :format => :json
\r
1007 response.should be_success
\r
1009 it 'jsonデータを返す' do
\r
1010 get :show, :id => @panel.id, :format => :json
\r
1011 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1015 context 'ユーザ権限がないとき' do
\r
1019 context 'html形式' do
\r
1020 it 'ステータスコード200 OKを返す' do
\r
1021 get :show, :id => @panel.id
\r
1022 response.should be_success
\r
1024 it 'showテンプレートを描画する' do
\r
1025 get :show, :id => @panel.id
\r
1026 response.should render_template("show")
\r
1029 context 'json形式' do
\r
1030 it 'ステータスコード200 OKを返す' do
\r
1031 get :show, :id => @panel.id, :format => :json
\r
1032 response.should be_success
\r
1034 it 'jsonデータを返す' do
\r
1035 get :show, :id => @panel.id, :format => :json
\r
1036 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1042 describe 'コマ数取得に於いて' do
\r
1044 Panel.should_receive(:visible_count).and_return(3)
\r
1047 context 'つつがなく終わるとき' do
\r
1048 it 'ステータスコード200 OKを返す' do
\r
1049 get :count, :format => :json
\r
1050 response.should be_success
\r
1052 context 'json形式' do
\r
1053 it 'jsonデータを返す' do
\r
1054 get :count, :format => :json
\r
1055 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1061 describe '新規作成フォーム表示に於いて' do
\r
1065 context 'つつがなく終わるとき' do
\r
1066 context 'html形式' do
\r
1067 it 'ステータスコード200 OKを返す' do
\r
1069 response.should be_success
\r
1071 it 'newテンプレートを描画する' do
\r
1073 response.should render_template("new")
\r
1077 it 'new.jsテンプレートを描画する' do
\r
1078 get :new, :format => :js
\r
1079 response.should render_template("new")
\r
1082 context 'json形式' do
\r
1083 it 'jsonデータを返す' do
\r
1084 get :new, :format => :json
\r
1085 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1089 context 'ユーザ権限がないとき' do
\r
1093 context 'html形式' do
\r
1094 it 'ステータスコード302 Foundを返す' do
\r
1096 response.status.should eq 302
\r
1098 it 'サインインページへ遷移する' do
\r
1100 response.body.should redirect_to '/users/sign_in'
\r
1104 it 'ステータスコード401 Unauthorizedを返す' do
\r
1105 get :new, :format => :js
\r
1106 response.status.should eq 401
\r
1108 it '応答メッセージにUnauthorizedを返す' do
\r
1109 get :new, :format => :js
\r
1110 response.message.should match(/Unauthorized/)
\r
1116 describe '新規作成に於いて' do
\r
1118 @panel = FactoryGirl.build :panel, :author_id => @author.id
\r
1119 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
1122 context 'つつがなく終わるとき' do
\r
1123 context 'html形式' do
\r
1124 it 'ステータスコード302 Foundを返す' do
\r
1125 Panel.any_instance.stub(:store).and_return(true)
\r
1126 post :create, :panel => @attr
\r
1127 response.status.should eq 302
\r
1129 it '作成されたコマの表示ページへ遷移する' do
\r
1130 # Panel.any_instance.stub(:store).and_return(true)
\r
1131 post :create, :panel => @attr
\r
1132 response.should redirect_to(Panel.last)
\r
1135 context 'json形式' do
\r
1136 it 'ステータスコード200 OKを返す' do
\r
1137 # Panel.any_instance.stub(:store).and_return(true)
\r
1138 post :create, :panel => @attr, :format => :json
\r
1139 response.should be_success
\r
1141 it '作成されたコマをjsonデータで返す' do
\r
1142 post :create, :panel => @attr, :format => :json
\r
1143 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1147 context 'ユーザ権限がないとき' do
\r
1151 context 'html形式' do
\r
1152 it 'ステータスコード302 Foundを返す' do
\r
1153 post :create, :panel => @attr
\r
1154 response.status.should eq 302
\r
1156 it 'サインインページへ遷移する' do
\r
1157 post :create, :panel => @attr
\r
1158 response.body.should redirect_to '/users/sign_in'
\r
1161 context 'json形式' do
\r
1162 it 'ステータスコード401 Unauthorizedを返す' do
\r
1163 post :create, :panel => @attr, :format => :json
\r
1164 response.status.should eq 401
\r
1166 it '応答メッセージにUnauthorizedを返す' do
\r
1167 post :create, :panel => @attr, :format => :json
\r
1168 response.message.should match(/Unauthorized/)
\r
1174 describe '編集フォーム表示に於いて' do
\r
1176 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
1178 Panel.stub(:show).and_return(@panel)
\r
1180 context 'つつがなく終わるとき' do
\r
1181 context 'html形式' do
\r
1182 it 'ステータスコード200 OKを返す' do
\r
1183 get :edit, :id => @panel.id
\r
1184 response.should be_success
\r
1186 it 'editテンプレートを描画する' do
\r
1187 get :edit, :id => @panel.id
\r
1188 response.should render_template("edit")
\r
1192 it 'ステータスコード200 OKを返す' do
\r
1193 get :edit, :id => @panel.id, :format => :js
\r
1194 response.should be_success
\r
1196 it 'edit.jsテンプレートを描画する' do
\r
1197 get :edit, :id => @panel.id, :format => :js
\r
1198 response.should render_template("edit")
\r
1202 context 'ユーザ権限がないとき' do
\r
1206 context 'html形式' do
\r
1207 it 'ステータスコード302 Foundを返す' do
\r
1208 get :edit, :id => @panel.id
\r
1209 response.status.should eq 302
\r
1211 it 'サインインページへ遷移する' do
\r
1212 get :edit, :id => @panel.id
\r
1213 response.body.should redirect_to '/users/sign_in'
\r
1217 it 'ステータスコード401 Unauthorizedを返す' do
\r
1218 get :edit, :id => @panel.id, :format => :js
\r
1219 response.status.should eq 401
\r
1221 it '応答メッセージにUnauthorizedを返す' do
\r
1222 get :edit, :id => @panel.id, :format => :js
\r
1223 response.message.should match(/Unauthorized/)
\r
1229 describe '更新に於いて' do
\r
1231 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
1232 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
1235 context 'つつがなく終わるとき' do
\r
1236 context 'html形式' do
\r
1237 it 'ステータスコード302 Foundを返す' do
\r
1238 Panel.any_instance.stub(:store).and_return(true)
\r
1239 put :update, :id => @panel.id, :panel => @attr
\r
1240 response.status.should eq 302
\r
1242 it '作成されたコマの表示ページへ遷移する' do
\r
1243 # Panel.any_instance.stub(:store).and_return(true)
\r
1244 put :update, :id => @panel.id, :panel => @attr
\r
1245 response.should redirect_to(Panel.last)
\r
1248 context 'json形式' do
\r
1249 it 'ステータスコード200 OKを返す' do
\r
1250 # Panel.any_instance.stub(:store).and_return(true)
\r
1251 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1252 response.should be_success
\r
1254 it 'ページ本体は特に返さない' do
\r
1255 Panel.any_instance.stub(:save).with(any_args()).and_return(true)
\r
1256 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1257 response.body.should match /./
\r
1261 context 'ユーザ権限がないとき' do
\r
1265 context 'html形式' do
\r
1266 it 'ステータスコード302 Foundを返す' do
\r
1267 put :update, :id => @panel.id, :panel => @attr
\r
1268 response.status.should eq 302
\r
1270 it 'サインインページへ遷移する' do
\r
1271 put :update, :id => @panel.id, :panel => @attr
\r
1272 response.body.should redirect_to '/users/sign_in'
\r
1275 context 'json形式' do
\r
1276 it 'ステータスコード401 Unauthorizedを返す' do
\r
1277 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1278 response.status.should eq 401
\r
1280 it '応答メッセージにUnauthorizedを返す' do
\r
1281 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1282 response.message.should match(/Unauthorized/)
\r
1288 describe '削除に於いて' do
\r
1290 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
1291 Panel.stub(:edit).and_return(@panel)
\r
1294 context 'つつがなく終わるとき' do
\r
1295 context 'html形式' do
\r
1296 it 'ステータスコード302 Foundを返す' do
\r
1297 delete :destroy, :id => @panel.id
\r
1298 response.status.should eq 302
\r
1300 it 'マイコマ一覧ページへ遷移する' do
\r
1301 delete :destroy, :id => @panel.id
\r
1302 response.should redirect_to('/home/panel')
\r
1305 context 'json形式' do
\r
1306 it 'ステータスコード200 OKを返す' do
\r
1307 delete :destroy, :id => @panel.id, :format => :json
\r
1308 response.should be_success
\r
1312 context 'ユーザ権限がないとき' do
\r
1316 context 'html形式' do
\r
1317 it 'ステータスコード302 Foundを返す' do
\r
1318 delete :destroy, :id => @panel.id
\r
1319 response.status.should eq 302
\r
1321 it 'サインインページへ遷移する' do
\r
1322 delete :destroy, :id => @panel.id
\r
1323 response.body.should redirect_to '/users/sign_in'
\r
1326 context 'json形式' do
\r
1327 it 'ステータスコード401 Unauthorizedを返す' do
\r
1328 delete :destroy, :id => @panel.id, :format => :json
\r
1329 response.status.should eq 401
\r
1331 it '応答メッセージにUnauthorizedを返す' do
\r
1332 delete :destroy, :id => @panel.id, :format => :json
\r
1333 response.message.should match(/Unauthorized/)
\r