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 'ステータスコード200 OKを返す' do
\r
59 response.should be_success
\r
61 it 'indexテンプレートを描画する' do
\r
63 response.should render_template("index")
\r
67 it 'ステータスコード200 OKを返す' do
\r
68 get :index, :format => :json
\r
69 response.should be_success
\r
72 get :index, :format => :json
\r
73 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
75 it 'コマモデルにコマリストのjson出力を問い合わせている' do
\r
76 Panel.should_receive(:list_as_json_text).exactly(1)
\r
77 get :index, :format => :json
\r
79 it 'データがリスト構造になっている' do
\r
80 get :index, :format => :json
\r
81 json = JSON.parse response.body
\r
82 json.should have_at_least(3).items
\r
84 it 'リストの先頭くらいはコマっぽいものであって欲しい' do
\r
85 get :index, :format => :json
\r
86 json = JSON.parse response.body
\r
87 json.first.has_key?("border").should be_true
\r
91 context '作家権限がないとき' do
\r
96 it 'ステータスコード302 Foundを返す' do
\r
98 response.status.should eq 302
\r
100 it 'サインインページへ遷移する' do
\r
102 response.should redirect_to '/users/sign_in'
\r
105 context 'json形式' do
\r
106 it 'ステータスコード401 Unauthorizedを返す' do
\r
107 get :index, :format => :json
\r
108 response.status.should eq 401
\r
110 it '応答メッセージにUnauthorizedを返す' do
\r
111 get :index, :format => :json
\r
112 response.message.should match(/Unauthorized/)
\r
116 context '作家権限はないが管理者権限があるとき' do
\r
121 it 'ステータスコード200 OKを返す' do
\r
123 response.should be_success
\r
128 describe '単体表示に於いて' do
\r
130 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
131 Panel.stub(:show).with(@panel.id.to_s, [@author, nil]).and_return(@panel)
\r
132 Panel.stub(:show).with(@panel.id.to_s, [nil, @admin]).and_return(@panel)
\r
135 context 'つつがなく終わるとき' do
\r
136 it 'コマモデルに単体取得を問い合わせている' do
\r
137 Panel.should_receive(:show).exactly(1)
\r
140 it '@panelにアレを取得している' do
\r
141 get :show, :id => @panel.id
\r
142 assigns(:panel).id.should eq(@panel.id)
\r
144 context 'html形式' do
\r
145 it 'ステータスコード200 OKを返す' do
\r
146 get :show, :id => @panel.id
\r
147 response.should be_success
\r
149 it 'showテンプレートを描画する' do
\r
150 get :show, :id => @panel.id
\r
151 response.should render_template("show")
\r
154 context 'json形式' do
\r
155 it 'ステータスコード200 OKを返す' do
\r
156 get :show, :id => @panel.id, :format => :json
\r
157 response.should be_success
\r
160 get :show, :id => @panel.id, :format => :json
\r
161 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
163 it 'コマモデルにコマのjson出力を問い合わせている' do
\r
164 Panel.any_instance.should_receive(:panel_elements_as_json).exactly(1)
\r
165 get :show, :id => @panel.id, :format => :json
\r
167 it 'データがアレになっている' do
\r
168 get :show, :id => @panel.id, :format => :json
\r
169 json = JSON.parse response.body
\r
170 json["width"].should eq 100
\r
174 context '作家権限がないとき' do
\r
178 context 'html形式' do
\r
179 it 'ステータスコード302 Foundを返す' do
\r
180 get :show, :id => @panel.id
\r
181 response.status.should eq 302
\r
183 it 'サインインページへ遷移する' do
\r
184 get :show, :id => @panel.id
\r
185 response.body.should redirect_to '/users/sign_in'
\r
188 context 'json形式' do
\r
189 it 'ステータスコード401 Unauthorizedを返す' do
\r
190 get :show, :id => @panel.id, :format => :json
\r
191 response.status.should eq 401
\r
193 it '応答メッセージにUnauthorizedを返す' do
\r
194 get :show, :id => @panel.id, :format => :json
\r
195 response.message.should match(/Unauthorized/)
\r
199 context '作家権限はないが管理者権限があるとき' do
\r
204 it 'ステータスコード200 OKを返す' do
\r
205 get :show, :id => @panel.id
\r
206 response.should be_success
\r
210 context '対象コマがないとき' do
\r
211 context 'html形式' do
\r
212 it '例外404 not_foundを返す' do
\r
214 get :show, :id => 0
\r
215 }.should raise_error(ActiveRecord::RecordNotFound)
\r
218 context 'json形式' do
\r
219 it '例外404 not_foundを返す' do
\r
221 get :show, :id => 0, :format => :json
\r
222 }.should raise_error(ActiveRecord::RecordNotFound)
\r
226 context '非公開コマを見ようとしたとき' do
\r
227 context 'html形式' do
\r
228 it '例外403 forbiddenを返す' do
\r
229 Panel.any_instance.stub(:visible?).with(any_args()).and_return(false)
\r
230 hidden = FactoryGirl.create :hidden_panel, :author_id => @author.id
\r
232 get :show, :id => hidden
\r
233 }.should raise_error(ActiveRecord::Forbidden)
\r
236 context 'json形式' do
\r
237 it '例外403 forbiddenを返す' do
\r
238 Panel.any_instance.stub(:visible?).with(any_args()).and_return(false)
\r
239 hidden = FactoryGirl.create :hidden_panel, :author_id => @author.id
\r
241 get :show, :id => hidden, :format => :json
\r
242 }.should raise_error(ActiveRecord::Forbidden)
\r
249 describe 'コマ数取得に於いて' do
\r
251 Panel.should_receive(:visible_count).and_return(3)
\r
254 context 'つつがなく終わるとき' do
\r
255 it 'ステータスコード200 OKを返す' do
\r
256 get :count, :format => :json
\r
257 response.should be_success
\r
259 context 'json形式' do
\r
261 get :count, :format => :json
\r
262 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
264 it 'データがHash構造になっていてコマ数が1である' do
\r
265 get :count, :format => :json
\r
266 json = JSON.parse response.body
\r
267 json["count"].should == 3
\r
273 describe '新規作成フォーム表示に於いて' do
\r
277 context 'つつがなく終わるとき' do
\r
278 it '@panelに新規データを用意している' do
\r
280 assigns(:panel).should be_a_new(Panel)
\r
282 it 'コマモデルにデフォルト値補充を依頼している' do
\r
283 Panel.any_instance.should_receive(:supply_default).exactly(1)
\r
286 context 'html形式' do
\r
287 it 'ステータスコード200 OKを返す' do
\r
289 response.should be_success
\r
291 it 'newテンプレートを描画する' do
\r
293 response.should render_template("new")
\r
297 it 'new.jsテンプレートを描画する' do
\r
298 get :new, :format => :js
\r
299 response.should render_template("new")
\r
302 context 'json形式' do
\r
304 get :new, :format => :json
\r
305 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
307 it 'コマモデルにコマのjson出力を問い合わせている' do
\r
308 Panel.any_instance.should_receive(:panel_elements_as_json).exactly(1)
\r
309 get :new, :format => :json
\r
313 context '作家権限がないとき' do
\r
317 context 'html形式' do
\r
318 it 'ステータスコード302 Foundを返す' do
\r
320 response.status.should eq 302
\r
322 it 'サインインページへ遷移する' do
\r
324 response.body.should redirect_to '/users/sign_in'
\r
328 it 'ステータスコード401 Unauthorizedを返す' do
\r
329 get :new, :format => :js
\r
330 response.status.should eq 401
\r
332 it '応答メッセージにUnauthorizedを返す' do
\r
333 get :new, :format => :js
\r
334 response.message.should match(/Unauthorized/)
\r
338 context '作家権限はないが管理者権限があるとき' do
\r
343 context 'html形式' do
\r
344 it 'ステータスコード302 Foundを返す' do
\r
346 response.status.should eq 302
\r
348 it 'サインインページへ遷移する' do
\r
350 response.body.should redirect_to '/users/sign_in'
\r
356 describe '新規作成に於いて' do
\r
358 @panel = FactoryGirl.build :panel, :author_id => @author.id
\r
359 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
362 context '事前チェックする' do
\r
364 Panel.stub(:count).and_return(10)
\r
366 it 'panelがパラメータにあれば、展開する' do
\r
367 post :create, :panel => @attr
\r
368 assigns(:prm)['border'].to_i.should eq @panel.border
\r
370 it 'jsonがパラメータにあれば、展開する' do
\r
371 post :create, :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
372 assigns(:prm)['border'].to_i.should eq 4
\r
374 it 'panel・json両パラメータがあれば、panelを優先して展開する' do
\r
376 :panel => FactoryGirl.attributes_for(:panel),
\r
377 :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
379 assigns(:prm)['border'].to_i.should eq @panel.border
\r
381 it 'コマモデルにデフォルト値補充を依頼している' do
\r
382 Panel.any_instance.should_receive(:supply_default).exactly(1)
\r
383 post :create, :panel => @attr
\r
386 Panel.any_instance.should_receive(:store).exactly(1)
\r
387 post :create, :panel => @attr
\r
390 context 'つつがなく終わるとき' do
\r
391 it "@panelに作成されたコマを保持していて、それがDBにある" do
\r
392 post :create, :panel => @attr
\r
393 assigns(:panel).should be_a(Panel)
\r
394 assigns(:panel).should be_persisted
\r
396 context 'html形式' do
\r
397 it 'ステータスコード302 Foundを返す' do
\r
398 Panel.any_instance.stub(:store).and_return(true)
\r
399 post :create, :panel => @attr
\r
400 response.status.should eq 302
\r
402 it '作成されたコマの表示ページへ遷移する' do
\r
403 # Panel.any_instance.stub(:store).and_return(true)
\r
404 post :create, :panel => @attr
\r
405 response.should redirect_to(Panel.last)
\r
408 context 'json形式' do
\r
409 it 'ステータスコード200 OKを返す' do
\r
410 # Panel.any_instance.stub(:store).and_return(true)
\r
411 post :create, :panel => @attr, :format => :json
\r
412 response.should be_success
\r
414 it '作成されたコマをjsonデータで返す' do
\r
415 post :create, :panel => @attr, :format => :json
\r
416 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
418 it 'コマモデルにコマのjson出力を問い合わせている' do
\r
419 Panel.any_instance.should_receive(:panel_elements_as_json).exactly(1)
\r
420 post :create, :panel => @attr, :format => :json
\r
422 it 'データがアレになっている' do
\r
423 post :create, :panel => @attr, :format => :json
\r
424 json = JSON.parse response.body
\r
425 json["width"].should eq @panel.width
\r
429 context '作家権限がないとき' do
\r
433 context 'html形式' do
\r
434 it 'ステータスコード302 Foundを返す' do
\r
435 post :create, :panel => @attr
\r
436 response.status.should eq 302
\r
438 it 'サインインページへ遷移する' do
\r
439 post :create, :panel => @attr
\r
440 response.body.should redirect_to '/users/sign_in'
\r
443 context 'json形式' do
\r
444 it 'ステータスコード401 Unauthorizedを返す' do
\r
445 post :create, :panel => @attr, :format => :json
\r
446 response.status.should eq 401
\r
448 it '応答メッセージにUnauthorizedを返す' do
\r
449 post :create, :panel => @attr, :format => :json
\r
450 response.message.should match(/Unauthorized/)
\r
454 context '作家権限はないが管理者権限があるとき' do
\r
459 context 'html形式' do
\r
460 it 'ステータスコード302 Foundを返す' do
\r
461 post :create, :panel => @attr
\r
462 response.status.should eq 302
\r
464 it 'サインインページへ遷移する' do
\r
465 post :create, :panel => @attr
\r
466 response.body.should redirect_to '/users/sign_in'
\r
470 context '検証、保存に失敗した' do
\r
472 Panel.any_instance.stub(:store).and_return(false)
\r
474 it "未保存のコマを保持している" do
\r
475 post :create, :panel => @attr
\r
476 assigns(:panel).should be_a_new(Panel)
\r
478 context 'html形式' do
\r
479 it 'ステータスコード200 OKを返す' do
\r
480 post :create, :panel => @attr
\r
481 response.status.should eq 200
\r
484 post :create, :panel => @attr
\r
485 response.should render_template("new")
\r
488 context 'json形式' do
\r
489 it 'ステータスコード422 unprocessable_entity を返す' do
\r
490 post :create, :panel => @attr, :format => :json
\r
491 response.status.should eq 422
\r
493 it '応答メッセージUnprocessable Entityを返す' do
\r
494 post :create, :panel => @attr, :format => :json
\r
495 response.message.should match(/Unprocessable/)
\r
501 describe '編集フォーム表示に於いて' do
\r
503 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
505 Panel.stub(:show).and_return(@panel)
\r
507 context 'つつがなく終わるとき' do
\r
508 it 'コマモデルに編集取得を問い合わせている' do
\r
509 Panel.should_receive(:edit).exactly(1)
\r
510 get :edit, :id => @panel.id
\r
512 it '@panelにデータを用意している' do
\r
513 get :edit, :id => @panel.id
\r
514 assigns(:panel).should eq @panel
\r
516 context 'html形式' do
\r
517 it 'ステータスコード200 OKを返す' do
\r
518 get :edit, :id => @panel.id
\r
519 response.should be_success
\r
521 it 'editテンプレートを描画する' do
\r
522 get :edit, :id => @panel.id
\r
523 response.should render_template("edit")
\r
527 it 'ステータスコード200 OKを返す' do
\r
528 get :edit, :id => @panel.id, :format => :js
\r
529 response.should be_success
\r
531 it 'edit.jsテンプレートを描画する' do
\r
532 get :edit, :id => @panel.id, :format => :js
\r
533 response.should render_template("edit")
\r
537 context '作家権限がないとき' do
\r
541 context 'html形式' do
\r
542 it 'ステータスコード302 Foundを返す' do
\r
543 get :edit, :id => @panel.id
\r
544 response.status.should eq 302
\r
546 it 'サインインページへ遷移する' do
\r
547 get :edit, :id => @panel.id
\r
548 response.body.should redirect_to '/users/sign_in'
\r
552 it 'ステータスコード401 Unauthorizedを返す' do
\r
553 get :edit, :id => @panel.id, :format => :js
\r
554 response.status.should eq 401
\r
556 it '応答メッセージにUnauthorizedを返す' do
\r
557 get :edit, :id => @panel.id, :format => :js
\r
558 response.message.should match(/Unauthorized/)
\r
562 context '作家権限はないが管理者権限があるとき' do
\r
567 context 'html形式' do
\r
568 it 'ステータスコード302 Foundを返す' do
\r
569 get :edit, :id => @panel.id
\r
570 response.status.should eq 302
\r
572 it 'サインインページへ遷移する' do
\r
573 get :edit, :id => @panel.id
\r
574 response.body.should redirect_to '/users/sign_in'
\r
580 describe '更新に於いて' do
\r
582 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
583 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
586 context '事前チェックする' do
\r
589 Panel.stub(:count).and_return(10)
\r
591 it 'panelがパラメータにあれば、展開する' do
\r
592 put :update, :id => @panel.id, :panel => @attr
\r
593 assigns(:prm)['border'].to_i.should eq @panel.border
\r
595 it 'jsonがパラメータにあれば、展開する' do
\r
596 put :update, :id => @panel.id, :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
597 assigns(:prm)['border'].to_i.should eq 4
\r
599 it 'panel・json両パラメータがあれば、panelを優先して展開する' do
\r
602 :panel => FactoryGirl.attributes_for(:panel),
\r
603 :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
605 assigns(:prm)['border'].to_i.should eq @panel.border
\r
608 context 'つつがなく終わるとき' do
\r
609 it 'モデルに編集取得依頼する' do
\r
610 Panel.stub(:edit).with(any_args).and_return(@panel)
\r
611 Panel.should_receive(:edit).exactly(1)
\r
612 put :update, :id => @panel.id, :panel => @attr
\r
615 Panel.any_instance.should_receive(:store).exactly(1)
\r
616 put :update, :id => @panel.id, :panel => @attr
\r
618 it "@panelに作成されたコマを保持していて、それがDBにある" do
\r
619 put :update, :id => @panel.id, :panel => @attr
\r
620 assigns(:panel).should be_a(Panel)
\r
621 assigns(:panel).should be_persisted
\r
623 context 'html形式' do
\r
624 it 'ステータスコード302 Foundを返す' do
\r
625 Panel.any_instance.stub(:store).and_return(true)
\r
626 put :update, :id => @panel.id, :panel => @attr
\r
627 response.status.should eq 302
\r
629 it '作成されたコマの表示ページへ遷移する' do
\r
630 # Panel.any_instance.stub(:store).and_return(true)
\r
631 put :update, :id => @panel.id, :panel => @attr
\r
632 response.should redirect_to(Panel.last)
\r
635 context 'json形式' do
\r
636 it 'ステータスコード200 OKを返す' do
\r
637 # Panel.any_instance.stub(:store).and_return(true)
\r
638 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
639 response.should be_success
\r
641 it 'ページ本体は特に返さない' do
\r
642 Panel.any_instance.stub(:save).with(any_args()).and_return(true)
\r
643 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
644 response.body.should match /./
\r
648 context '作家権限がないとき' do
\r
652 context 'html形式' do
\r
653 it 'ステータスコード302 Foundを返す' do
\r
654 put :update, :id => @panel.id, :panel => @attr
\r
655 response.status.should eq 302
\r
657 it 'サインインページへ遷移する' do
\r
658 put :update, :id => @panel.id, :panel => @attr
\r
659 response.body.should redirect_to '/users/sign_in'
\r
662 context 'json形式' do
\r
663 it 'ステータスコード401 Unauthorizedを返す' do
\r
664 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
665 response.status.should eq 401
\r
667 it '応答メッセージにUnauthorizedを返す' do
\r
668 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
669 response.message.should match(/Unauthorized/)
\r
673 context '作家権限はないが管理者権限があるとき' do
\r
678 context 'html形式' do
\r
679 it 'ステータスコード302 Foundを返す' do
\r
680 put :update, :id => @panel.id, :panel => @attr
\r
681 response.status.should eq 302
\r
683 it 'サインインページへ遷移する' do
\r
684 put :update, :id => @panel.id, :panel => @attr
\r
685 response.body.should redirect_to '/users/sign_in'
\r
689 context '検証、保存に失敗した' do
\r
691 Panel.any_instance.stub(:store).and_return(false)
\r
693 it "指定のコマを保持している" do
\r
694 put :update, :id => @panel.id, :panel => @attr
\r
695 assigns(:panel).should eq @panel
\r
697 context 'html形式' do
\r
698 it 'ステータスコード200 OKを返す' do
\r
699 put :update, :id => @panel.id, :panel => @attr
\r
700 response.status.should eq 200
\r
703 put :update, :id => @panel.id, :panel => @attr
\r
704 response.should render_template("edit")
\r
707 context 'json形式' do
\r
708 it 'ステータスコード422 unprocessable_entity を返す' do
\r
709 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
710 response.status.should eq 422
\r
712 it '応答メッセージUnprocessable Entityを返す' do
\r
713 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
714 response.message.should match(/Unprocessable/)
\r
720 describe '削除に於いて' do
\r
722 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
723 Panel.stub(:edit).and_return(@panel)
\r
726 context 'つつがなく終わるとき' do
\r
727 it 'コマモデルに編集取得を問い合わせている' do
\r
728 Panel.should_receive(:edit).exactly(1)
\r
729 delete :destroy, :id => @panel.id
\r
731 it '@panelにアレを取得している' do
\r
732 delete :destroy, :id => @panel.id
\r
733 assigns(:panel).id.should eq(@panel.id)
\r
737 delete :destroy, :id => @panel.id
\r
738 }.should change(Panel, :count)
\r
740 context 'html形式' do
\r
741 it 'ステータスコード302 Foundを返す' do
\r
742 delete :destroy, :id => @panel.id
\r
743 response.status.should eq 302
\r
745 it 'マイコマ一覧ページへ遷移する' do
\r
746 delete :destroy, :id => @panel.id
\r
747 response.should redirect_to('/home/panel')
\r
750 context 'json形式' do
\r
751 it 'ステータスコード200 OKを返す' do
\r
752 delete :destroy, :id => @panel.id, :format => :json
\r
753 response.should be_success
\r
757 context '作家権限がないとき' do
\r
761 context 'html形式' do
\r
762 it 'ステータスコード302 Foundを返す' do
\r
763 delete :destroy, :id => @panel.id
\r
764 response.status.should eq 302
\r
766 it 'サインインページへ遷移する' do
\r
767 delete :destroy, :id => @panel.id
\r
768 response.body.should redirect_to '/users/sign_in'
\r
771 context 'json形式' do
\r
772 it 'ステータスコード401 Unauthorizedを返す' do
\r
773 delete :destroy, :id => @panel.id, :format => :json
\r
774 response.status.should eq 401
\r
776 it '応答メッセージにUnauthorizedを返す' do
\r
777 delete :destroy, :id => @panel.id, :format => :json
\r
778 response.message.should match(/Unauthorized/)
\r
782 context '作家権限はないが管理者権限があるとき' do
\r
787 context 'html形式' do
\r
788 it 'ステータスコード302 Foundを返す' do
\r
789 delete :destroy, :id => @panel.id
\r
790 response.status.should eq 302
\r
792 it 'サインインページへ遷移する' do
\r
793 delete :destroy, :id => @panel.id
\r
794 response.body.should redirect_to '/users/sign_in'
\r
798 context '削除に失敗したとき' do
\r
800 Panel.any_instance.stub(:destroy_with_elements).and_return(false)
\r
802 context 'html形式' do
\r
803 it 'ステータスコード302 Foundを返す' do
\r
804 delete :destroy, :id => @panel.id
\r
805 response.status.should eq 302
\r
807 it 'そのコマの詳細ページへ遷移する' do
\r
808 delete :destroy, :id => @panel.id
\r
809 response.should redirect_to(panel_path(@panel))
\r
812 context 'json形式' do
\r
813 it 'ステータスコード422 unprocessable_entity を返す' do
\r
814 delete :destroy, :id => @panel.id, :format => :json
\r
815 response.status.should eq 422
\r
817 it '応答メッセージUnprocessable Entityを返す' do
\r
818 delete :destroy, :id => @panel.id, :format => :json
\r
819 response.message.should match(/Unprocessable/)
\r
824 context '対象コマがないとき' do
\r
826 context '他人のコマだったとき' do
\r
832 describe '一覧表示に於いて' do
\r
834 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
835 Panel.stub(:list).and_return([@panel, @panel, @panel])
\r
838 context 'つつがなく終わるとき' do
\r
839 context 'html形式' do
\r
840 it 'ステータスコード200 OKを返す' do
\r
842 response.should be_success
\r
844 it 'indexテンプレートを描画する' do
\r
846 response.should render_template("index")
\r
849 context 'json形式' do
\r
850 it 'ステータスコード200 OKを返す' do
\r
851 get :index, :format => :json
\r
852 response.should be_success
\r
855 get :index, :format => :json
\r
856 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
860 context '作家権限がないとき' do
\r
864 context 'html形式' do
\r
865 it 'ステータスコード200 OKを返す' do
\r
867 response.should be_success
\r
869 it 'indexテンプレートを描画する' do
\r
871 response.should render_template("index")
\r
874 context 'json形式' do
\r
875 it 'ステータスコード200 OKを返す' do
\r
876 get :index, :format => :json
\r
877 response.should be_success
\r
880 get :index, :format => :json
\r
881 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
887 describe '単体表示に於いて' do
\r
889 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
890 Panel.stub(:show).with(@panel.id.to_s, @author).and_return(@panel)
\r
891 Panel.stub(:show).with(@panel.id.to_s, nil).and_return(@panel)
\r
894 context 'つつがなく終わるとき' do
\r
895 context 'html形式' do
\r
896 it 'ステータスコード200 OKを返す' do
\r
897 get :show, :id => @panel.id
\r
898 response.should be_success
\r
900 it 'showテンプレートを描画する' do
\r
901 get :show, :id => @panel.id
\r
902 response.should render_template("show")
\r
905 context 'json形式' do
\r
906 it 'ステータスコード200 OKを返す' do
\r
907 get :show, :id => @panel.id, :format => :json
\r
908 response.should be_success
\r
911 get :show, :id => @panel.id, :format => :json
\r
912 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
916 context '作家権限がないとき' do
\r
920 context 'html形式' do
\r
921 it 'ステータスコード200 OKを返す' do
\r
922 get :show, :id => @panel.id
\r
923 response.should be_success
\r
925 it 'showテンプレートを描画する' do
\r
926 get :show, :id => @panel.id
\r
927 response.should render_template("show")
\r
930 context 'json形式' do
\r
931 it 'ステータスコード200 OKを返す' do
\r
932 get :show, :id => @panel.id, :format => :json
\r
933 response.should be_success
\r
936 get :show, :id => @panel.id, :format => :json
\r
937 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
943 describe 'コマ数取得に於いて' do
\r
945 Panel.should_receive(:visible_count).and_return(3)
\r
948 context 'つつがなく終わるとき' do
\r
949 it 'ステータスコード200 OKを返す' do
\r
950 get :count, :format => :json
\r
951 response.should be_success
\r
953 context 'json形式' do
\r
955 get :count, :format => :json
\r
956 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
962 describe '新規作成フォーム表示に於いて' do
\r
966 context 'つつがなく終わるとき' do
\r
967 context 'html形式' do
\r
968 it 'ステータスコード200 OKを返す' do
\r
970 response.should be_success
\r
972 it 'newテンプレートを描画する' do
\r
974 response.should render_template("new")
\r
978 it 'new.jsテンプレートを描画する' do
\r
979 get :new, :format => :js
\r
980 response.should render_template("new")
\r
983 context 'json形式' do
\r
985 get :new, :format => :json
\r
986 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
990 context '作家権限がないとき' do
\r
994 context 'html形式' do
\r
995 it 'ステータスコード302 Foundを返す' do
\r
997 response.status.should eq 302
\r
999 it 'サインインページへ遷移する' do
\r
1001 response.body.should redirect_to '/users/sign_in'
\r
1005 it 'ステータスコード401 Unauthorizedを返す' do
\r
1006 get :new, :format => :js
\r
1007 response.status.should eq 401
\r
1009 it '応答メッセージにUnauthorizedを返す' do
\r
1010 get :new, :format => :js
\r
1011 response.message.should match(/Unauthorized/)
\r
1017 describe '新規作成に於いて' do
\r
1019 @panel = FactoryGirl.build :panel, :author_id => @author.id
\r
1020 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
1023 context 'つつがなく終わるとき' do
\r
1024 context 'html形式' do
\r
1025 it 'ステータスコード302 Foundを返す' do
\r
1026 Panel.any_instance.stub(:store).and_return(true)
\r
1027 post :create, :panel => @attr
\r
1028 response.status.should eq 302
\r
1030 it '作成されたコマの表示ページへ遷移する' do
\r
1031 # Panel.any_instance.stub(:store).and_return(true)
\r
1032 post :create, :panel => @attr
\r
1033 response.should redirect_to(Panel.last)
\r
1036 context 'json形式' do
\r
1037 it 'ステータスコード200 OKを返す' do
\r
1038 # Panel.any_instance.stub(:store).and_return(true)
\r
1039 post :create, :panel => @attr, :format => :json
\r
1040 response.should be_success
\r
1042 it '作成されたコマをjsonデータで返す' do
\r
1043 post :create, :panel => @attr, :format => :json
\r
1044 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
1048 context '作家権限がないとき' do
\r
1052 context 'html形式' do
\r
1053 it 'ステータスコード302 Foundを返す' do
\r
1054 post :create, :panel => @attr
\r
1055 response.status.should eq 302
\r
1057 it 'サインインページへ遷移する' do
\r
1058 post :create, :panel => @attr
\r
1059 response.body.should redirect_to '/users/sign_in'
\r
1062 context 'json形式' do
\r
1063 it 'ステータスコード401 Unauthorizedを返す' do
\r
1064 post :create, :panel => @attr, :format => :json
\r
1065 response.status.should eq 401
\r
1067 it '応答メッセージにUnauthorizedを返す' do
\r
1068 post :create, :panel => @attr, :format => :json
\r
1069 response.message.should match(/Unauthorized/)
\r
1075 describe '編集フォーム表示に於いて' do
\r
1077 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
1079 Panel.stub(:show).and_return(@panel)
\r
1081 context 'つつがなく終わるとき' do
\r
1082 context 'html形式' do
\r
1083 it 'ステータスコード200 OKを返す' do
\r
1084 get :edit, :id => @panel.id
\r
1085 response.should be_success
\r
1087 it 'editテンプレートを描画する' do
\r
1088 get :edit, :id => @panel.id
\r
1089 response.should render_template("edit")
\r
1093 it 'ステータスコード200 OKを返す' do
\r
1094 get :edit, :id => @panel.id, :format => :js
\r
1095 response.should be_success
\r
1097 it 'edit.jsテンプレートを描画する' do
\r
1098 get :edit, :id => @panel.id, :format => :js
\r
1099 response.should render_template("edit")
\r
1103 context '作家権限がないとき' do
\r
1107 context 'html形式' do
\r
1108 it 'ステータスコード302 Foundを返す' do
\r
1109 get :edit, :id => @panel.id
\r
1110 response.status.should eq 302
\r
1112 it 'サインインページへ遷移する' do
\r
1113 get :edit, :id => @panel.id
\r
1114 response.body.should redirect_to '/users/sign_in'
\r
1118 it 'ステータスコード401 Unauthorizedを返す' do
\r
1119 get :edit, :id => @panel.id, :format => :js
\r
1120 response.status.should eq 401
\r
1122 it '応答メッセージにUnauthorizedを返す' do
\r
1123 get :edit, :id => @panel.id, :format => :js
\r
1124 response.message.should match(/Unauthorized/)
\r
1130 describe '更新に於いて' do
\r
1132 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
1133 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
1136 context 'つつがなく終わるとき' do
\r
1137 context 'html形式' do
\r
1138 it 'ステータスコード302 Foundを返す' do
\r
1139 Panel.any_instance.stub(:store).and_return(true)
\r
1140 put :update, :id => @panel.id, :panel => @attr
\r
1141 response.status.should eq 302
\r
1143 it '作成されたコマの表示ページへ遷移する' do
\r
1144 # Panel.any_instance.stub(:store).and_return(true)
\r
1145 put :update, :id => @panel.id, :panel => @attr
\r
1146 response.should redirect_to(Panel.last)
\r
1149 context 'json形式' do
\r
1150 it 'ステータスコード200 OKを返す' do
\r
1151 # Panel.any_instance.stub(:store).and_return(true)
\r
1152 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1153 response.should be_success
\r
1155 it 'ページ本体は特に返さない' do
\r
1156 Panel.any_instance.stub(:save).with(any_args()).and_return(true)
\r
1157 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1158 response.body.should match /./
\r
1162 context '作家権限がないとき' do
\r
1166 context 'html形式' do
\r
1167 it 'ステータスコード302 Foundを返す' do
\r
1168 put :update, :id => @panel.id, :panel => @attr
\r
1169 response.status.should eq 302
\r
1171 it 'サインインページへ遷移する' do
\r
1172 put :update, :id => @panel.id, :panel => @attr
\r
1173 response.body.should redirect_to '/users/sign_in'
\r
1176 context 'json形式' do
\r
1177 it 'ステータスコード401 Unauthorizedを返す' do
\r
1178 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1179 response.status.should eq 401
\r
1181 it '応答メッセージにUnauthorizedを返す' do
\r
1182 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1183 response.message.should match(/Unauthorized/)
\r
1189 describe '削除に於いて' do
\r
1191 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
1192 Panel.stub(:edit).and_return(@panel)
\r
1195 context 'つつがなく終わるとき' do
\r
1196 context 'html形式' do
\r
1197 it 'ステータスコード302 Foundを返す' do
\r
1198 delete :destroy, :id => @panel.id
\r
1199 response.status.should eq 302
\r
1201 it 'マイコマ一覧ページへ遷移する' do
\r
1202 delete :destroy, :id => @panel.id
\r
1203 response.should redirect_to('/home/panel')
\r
1206 context 'json形式' do
\r
1207 it 'ステータスコード200 OKを返す' do
\r
1208 delete :destroy, :id => @panel.id, :format => :json
\r
1209 response.should be_success
\r
1213 context '作家権限がないとき' do
\r
1217 context 'html形式' do
\r
1218 it 'ステータスコード302 Foundを返す' do
\r
1219 delete :destroy, :id => @panel.id
\r
1220 response.status.should eq 302
\r
1222 it 'サインインページへ遷移する' do
\r
1223 delete :destroy, :id => @panel.id
\r
1224 response.body.should redirect_to '/users/sign_in'
\r
1227 context 'json形式' do
\r
1228 it 'ステータスコード401 Unauthorizedを返す' do
\r
1229 delete :destroy, :id => @panel.id, :format => :json
\r
1230 response.status.should eq 401
\r
1232 it '応答メッセージにUnauthorizedを返す' do
\r
1233 delete :destroy, :id => @panel.id, :format => :json
\r
1234 response.message.should match(/Unauthorized/)
\r