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
118 describe '単体表示に於いて' do
\r
120 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
121 Panel.stub(:show).with(@panel.id.to_s, @author).and_return(@panel)
\r
124 context 'つつがなく終わるとき' do
\r
125 it 'コマモデルに単体取得を問い合わせている' do
\r
126 Panel.should_receive(:show).exactly(1)
\r
129 it '@panelにアレを取得している' do
\r
130 get :show, :id => @panel.id
\r
131 assigns(:panel).id.should eq(@panel.id)
\r
133 context 'html形式' do
\r
134 it 'ステータスコード200 OKを返す' do
\r
135 get :show, :id => @panel.id
\r
136 response.should be_success
\r
138 it 'showテンプレートを描画する' do
\r
139 get :show, :id => @panel.id
\r
140 response.should render_template("show")
\r
143 context 'json形式' do
\r
144 it 'ステータスコード200 OKを返す' do
\r
145 get :show, :id => @panel.id, :format => :json
\r
146 response.should be_success
\r
149 get :show, :id => @panel.id, :format => :json
\r
150 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
152 it 'コマモデルにコマのjson出力を問い合わせている' do
\r
153 Panel.any_instance.should_receive(:panel_elements_as_json).exactly(1)
\r
154 get :show, :id => @panel.id, :format => :json
\r
156 it 'データがアレになっている' do
\r
157 get :show, :id => @panel.id, :format => :json
\r
158 json = JSON.parse response.body
\r
159 json["width"].should eq 100
\r
163 context '作家権限がないとき' do
\r
167 context 'html形式' do
\r
168 it 'ステータスコード302 Foundを返す' do
\r
169 get :show, :id => @panel.id
\r
170 response.status.should eq 302
\r
172 it 'サインインページへ遷移する' do
\r
173 get :show, :id => @panel.id
\r
174 response.body.should redirect_to '/users/sign_in'
\r
177 context 'json形式' do
\r
178 it 'ステータスコード401 Unauthorizedを返す' do
\r
179 get :show, :id => @panel.id, :format => :json
\r
180 response.status.should eq 401
\r
182 it '応答メッセージにUnauthorizedを返す' do
\r
183 get :show, :id => @panel.id, :format => :json
\r
184 response.message.should match(/Unauthorized/)
\r
189 context '対象コマがないとき' do
\r
190 context 'html形式' do
\r
191 it '例外404 not_foundを返す' do
\r
193 get :show, :id => 0
\r
194 }.should raise_error(ActiveRecord::RecordNotFound)
\r
197 context 'json形式' do
\r
198 it '例外404 not_foundを返す' do
\r
200 get :show, :id => 0, :format => :json
\r
201 }.should raise_error(ActiveRecord::RecordNotFound)
\r
205 context '非公開コマを見ようとしたとき' do
\r
206 context 'html形式' do
\r
207 it '例外403 forbiddenを返す' do
\r
208 Panel.any_instance.stub(:visible?).with(any_args()).and_return(false)
\r
209 hidden = FactoryGirl.create :hidden_panel, :author_id => @author.id
\r
211 get :show, :id => hidden
\r
212 }.should raise_error(ActiveRecord::Forbidden)
\r
215 context 'json形式' do
\r
216 it '例外403 forbiddenを返す' do
\r
217 Panel.any_instance.stub(:visible?).with(any_args()).and_return(false)
\r
218 hidden = FactoryGirl.create :hidden_panel, :author_id => @author.id
\r
220 get :show, :id => hidden, :format => :json
\r
221 }.should raise_error(ActiveRecord::Forbidden)
\r
228 describe 'コマ数取得に於いて' do
\r
230 Panel.should_receive(:visible_count).and_return(3)
\r
233 context 'つつがなく終わるとき' do
\r
234 it 'ステータスコード200 OKを返す' do
\r
235 get :count, :format => :json
\r
236 response.should be_success
\r
238 context 'json形式' do
\r
240 get :count, :format => :json
\r
241 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
243 it 'データがHash構造になっていてコマ数が1である' do
\r
244 get :count, :format => :json
\r
245 json = JSON.parse response.body
\r
246 json["count"].should == 3
\r
252 describe '新規作成フォーム表示に於いて' do
\r
256 context 'つつがなく終わるとき' do
\r
257 it '@panelに新規データを用意している' do
\r
259 assigns(:panel).should be_a_new(Panel)
\r
261 it 'コマモデルにデフォルト値補充を依頼している' do
\r
262 Panel.any_instance.should_receive(:supply_default).exactly(1)
\r
265 context 'html形式' do
\r
266 it 'ステータスコード200 OKを返す' do
\r
268 response.should be_success
\r
270 it 'newテンプレートを描画する' do
\r
272 response.should render_template("new")
\r
276 it 'new.jsテンプレートを描画する' do
\r
277 get :new, :format => :js
\r
278 response.should render_template("new")
\r
281 context 'json形式' do
\r
283 get :new, :format => :json
\r
284 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
286 it 'コマモデルにコマのjson出力を問い合わせている' do
\r
287 Panel.any_instance.should_receive(:panel_elements_as_json).exactly(1)
\r
288 get :new, :format => :json
\r
292 context '作家権限がないとき' do
\r
296 context 'html形式' do
\r
297 it 'ステータスコード302 Foundを返す' do
\r
299 response.status.should eq 302
\r
301 it 'サインインページへ遷移する' do
\r
303 response.body.should redirect_to '/users/sign_in'
\r
307 it 'ステータスコード401 Unauthorizedを返す' do
\r
308 get :new, :format => :js
\r
309 response.status.should eq 401
\r
311 it '応答メッセージにUnauthorizedを返す' do
\r
312 get :new, :format => :js
\r
313 response.message.should match(/Unauthorized/)
\r
319 describe '新規作成に於いて' do
\r
321 @panel = FactoryGirl.build :panel, :author_id => @author.id
\r
322 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
325 context '事前チェックする' do
\r
327 Panel.stub(:count).and_return(10)
\r
329 it 'panelがパラメータにあれば、展開する' do
\r
330 post :create, :panel => @attr
\r
331 assigns(:prm)['border'].to_i.should eq @panel.border
\r
333 it 'jsonがパラメータにあれば、展開する' do
\r
334 post :create, :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
335 assigns(:prm)['border'].to_i.should eq 4
\r
337 it 'panel・json両パラメータがあれば、panelを優先して展開する' do
\r
339 :panel => FactoryGirl.attributes_for(:panel),
\r
340 :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
342 assigns(:prm)['border'].to_i.should eq @panel.border
\r
344 it 'コマモデルにデフォルト値補充を依頼している' do
\r
345 Panel.any_instance.should_receive(:supply_default).exactly(1)
\r
346 post :create, :panel => @attr
\r
349 Panel.any_instance.should_receive(:store).exactly(1)
\r
350 post :create, :panel => @attr
\r
353 context 'つつがなく終わるとき' do
\r
354 it "@panelに作成されたコマを保持していて、それがDBにある" do
\r
355 post :create, :panel => @attr
\r
356 assigns(:panel).should be_a(Panel)
\r
357 assigns(:panel).should be_persisted
\r
359 context 'html形式' do
\r
360 it 'ステータスコード302 Foundを返す' do
\r
361 Panel.any_instance.stub(:store).and_return(true)
\r
362 post :create, :panel => @attr
\r
363 response.status.should eq 302
\r
365 it '作成されたコマの表示ページへ遷移する' do
\r
366 # Panel.any_instance.stub(:store).and_return(true)
\r
367 post :create, :panel => @attr
\r
368 response.should redirect_to(Panel.last)
\r
371 context 'json形式' do
\r
372 it 'ステータスコード200 OKを返す' do
\r
373 # Panel.any_instance.stub(:store).and_return(true)
\r
374 post :create, :panel => @attr, :format => :json
\r
375 response.should be_success
\r
377 it '作成されたコマをjsonデータで返す' do
\r
378 post :create, :panel => @attr, :format => :json
\r
379 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
381 it 'コマモデルにコマのjson出力を問い合わせている' do
\r
382 Panel.any_instance.should_receive(:panel_elements_as_json).exactly(1)
\r
383 post :create, :panel => @attr, :format => :json
\r
385 it 'データがアレになっている' do
\r
386 post :create, :panel => @attr, :format => :json
\r
387 json = JSON.parse response.body
\r
388 json["width"].should eq @panel.width
\r
392 context '作家権限がないとき' do
\r
396 context 'html形式' do
\r
397 it 'ステータスコード302 Foundを返す' do
\r
398 post :create, :panel => @attr
\r
399 response.status.should eq 302
\r
401 it 'サインインページへ遷移する' do
\r
402 post :create, :panel => @attr
\r
403 response.body.should redirect_to '/users/sign_in'
\r
406 context 'json形式' do
\r
407 it 'ステータスコード401 Unauthorizedを返す' do
\r
408 post :create, :panel => @attr, :format => :json
\r
409 response.status.should eq 401
\r
411 it '応答メッセージにUnauthorizedを返す' do
\r
412 post :create, :panel => @attr, :format => :json
\r
413 response.message.should match(/Unauthorized/)
\r
417 context '検証、保存に失敗した' do
\r
419 Panel.any_instance.stub(:store).and_return(false)
\r
421 it "未保存のコマを保持している" do
\r
422 post :create, :panel => @attr
\r
423 assigns(:panel).should be_a_new(Panel)
\r
425 context 'html形式' do
\r
426 it 'ステータスコード200 OKを返す' do
\r
427 post :create, :panel => @attr
\r
428 response.status.should eq 200
\r
431 post :create, :panel => @attr
\r
432 response.should render_template("new")
\r
435 context 'json形式' do
\r
436 it 'ステータスコード422 unprocessable_entity を返す' do
\r
437 post :create, :panel => @attr, :format => :json
\r
438 response.status.should eq 422
\r
440 it '応答メッセージUnprocessable Entityを返す' do
\r
441 post :create, :panel => @attr, :format => :json
\r
442 response.message.should match(/Unprocessable/)
\r
448 describe '編集フォーム表示に於いて' do
\r
450 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
452 Panel.stub(:show).and_return(@panel)
\r
454 context 'つつがなく終わるとき' do
\r
455 it 'コマモデルに編集取得を問い合わせている' do
\r
456 Panel.should_receive(:edit).exactly(1)
\r
457 get :edit, :id => @panel.id
\r
459 it '@panelにデータを用意している' do
\r
460 get :edit, :id => @panel.id
\r
461 assigns(:panel).should eq @panel
\r
463 context 'html形式' do
\r
464 it 'ステータスコード200 OKを返す' do
\r
465 get :edit, :id => @panel.id
\r
466 response.should be_success
\r
468 it 'editテンプレートを描画する' do
\r
469 get :edit, :id => @panel.id
\r
470 response.should render_template("edit")
\r
474 it 'ステータスコード200 OKを返す' do
\r
475 get :edit, :id => @panel.id, :format => :js
\r
476 response.should be_success
\r
478 it 'edit.jsテンプレートを描画する' do
\r
479 get :edit, :id => @panel.id, :format => :js
\r
480 response.should render_template("edit")
\r
484 context '作家権限がないとき' do
\r
488 context 'html形式' do
\r
489 it 'ステータスコード302 Foundを返す' do
\r
490 get :edit, :id => @panel.id
\r
491 response.status.should eq 302
\r
493 it 'サインインページへ遷移する' do
\r
494 get :edit, :id => @panel.id
\r
495 response.body.should redirect_to '/users/sign_in'
\r
499 it 'ステータスコード401 Unauthorizedを返す' do
\r
500 get :edit, :id => @panel.id, :format => :js
\r
501 response.status.should eq 401
\r
503 it '応答メッセージにUnauthorizedを返す' do
\r
504 get :edit, :id => @panel.id, :format => :js
\r
505 response.message.should match(/Unauthorized/)
\r
511 describe '更新に於いて' do
\r
513 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
514 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
517 context '事前チェックする' do
\r
520 Panel.stub(:count).and_return(10)
\r
522 it 'panelがパラメータにあれば、展開する' do
\r
523 put :update, :id => @panel.id, :panel => @attr
\r
524 assigns(:prm)['border'].to_i.should eq @panel.border
\r
526 it 'jsonがパラメータにあれば、展開する' do
\r
527 put :update, :id => @panel.id, :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
528 assigns(:prm)['border'].to_i.should eq 4
\r
530 it 'panel・json両パラメータがあれば、panelを優先して展開する' do
\r
533 :panel => FactoryGirl.attributes_for(:panel),
\r
534 :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json
\r
536 assigns(:prm)['border'].to_i.should eq @panel.border
\r
539 context 'つつがなく終わるとき' do
\r
540 it 'モデルに編集取得依頼する' do
\r
541 Panel.stub(:edit).with(any_args).and_return(@panel)
\r
542 Panel.should_receive(:edit).exactly(1)
\r
543 put :update, :id => @panel.id, :panel => @attr
\r
546 Panel.any_instance.should_receive(:store).exactly(1)
\r
547 put :update, :id => @panel.id, :panel => @attr
\r
549 it "@panelに作成されたコマを保持していて、それがDBにある" do
\r
550 put :update, :id => @panel.id, :panel => @attr
\r
551 assigns(:panel).should be_a(Panel)
\r
552 assigns(:panel).should be_persisted
\r
554 context 'html形式' do
\r
555 it 'ステータスコード302 Foundを返す' do
\r
556 Panel.any_instance.stub(:store).and_return(true)
\r
557 put :update, :id => @panel.id, :panel => @attr
\r
558 response.status.should eq 302
\r
560 it '作成されたコマの表示ページへ遷移する' do
\r
561 # Panel.any_instance.stub(:store).and_return(true)
\r
562 put :update, :id => @panel.id, :panel => @attr
\r
563 response.should redirect_to(Panel.last)
\r
566 context 'json形式' do
\r
567 it 'ステータスコード200 OKを返す' do
\r
568 # Panel.any_instance.stub(:store).and_return(true)
\r
569 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
570 response.should be_success
\r
572 it 'ページ本体は特に返さない' do
\r
573 Panel.any_instance.stub(:save).with(any_args()).and_return(true)
\r
574 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
575 response.body.should match /./
\r
579 context '作家権限がないとき' do
\r
583 context 'html形式' do
\r
584 it 'ステータスコード302 Foundを返す' do
\r
585 put :update, :id => @panel.id, :panel => @attr
\r
586 response.status.should eq 302
\r
588 it 'サインインページへ遷移する' do
\r
589 put :update, :id => @panel.id, :panel => @attr
\r
590 response.body.should redirect_to '/users/sign_in'
\r
593 context 'json形式' do
\r
594 it 'ステータスコード401 Unauthorizedを返す' do
\r
595 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
596 response.status.should eq 401
\r
598 it '応答メッセージにUnauthorizedを返す' do
\r
599 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
600 response.message.should match(/Unauthorized/)
\r
604 context '検証、保存に失敗した' do
\r
606 Panel.any_instance.stub(:store).and_return(false)
\r
608 it "指定のコマを保持している" do
\r
609 put :update, :id => @panel.id, :panel => @attr
\r
610 assigns(:panel).should eq @panel
\r
612 context 'html形式' do
\r
613 it 'ステータスコード200 OKを返す' do
\r
614 put :update, :id => @panel.id, :panel => @attr
\r
615 response.status.should eq 200
\r
618 put :update, :id => @panel.id, :panel => @attr
\r
619 response.should render_template("edit")
\r
622 context 'json形式' do
\r
623 it 'ステータスコード422 unprocessable_entity を返す' do
\r
624 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
625 response.status.should eq 422
\r
627 it '応答メッセージUnprocessable Entityを返す' do
\r
628 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
629 response.message.should match(/Unprocessable/)
\r
635 describe '削除に於いて' do
\r
637 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
638 Panel.stub(:edit).and_return(@panel)
\r
641 context 'つつがなく終わるとき' do
\r
642 it 'コマモデルに編集取得を問い合わせている' do
\r
643 Panel.should_receive(:edit).exactly(1)
\r
644 delete :destroy, :id => @panel.id
\r
646 it '@panelにアレを取得している' do
\r
647 delete :destroy, :id => @panel.id
\r
648 assigns(:panel).id.should eq(@panel.id)
\r
652 delete :destroy, :id => @panel.id
\r
653 }.should change(Panel, :count)
\r
655 context 'html形式' do
\r
656 it 'ステータスコード302 Foundを返す' do
\r
657 delete :destroy, :id => @panel.id
\r
658 response.status.should eq 302
\r
660 it 'マイコマ一覧ページへ遷移する' do
\r
661 delete :destroy, :id => @panel.id
\r
662 response.should redirect_to('/home/panel')
\r
665 context 'json形式' do
\r
666 it 'ステータスコード200 OKを返す' do
\r
667 delete :destroy, :id => @panel.id, :format => :json
\r
668 response.should be_success
\r
672 context '作家権限がないとき' do
\r
676 context 'html形式' do
\r
677 it 'ステータスコード302 Foundを返す' do
\r
678 delete :destroy, :id => @panel.id
\r
679 response.status.should eq 302
\r
681 it 'サインインページへ遷移する' do
\r
682 delete :destroy, :id => @panel.id
\r
683 response.body.should redirect_to '/users/sign_in'
\r
686 context 'json形式' do
\r
687 it 'ステータスコード401 Unauthorizedを返す' do
\r
688 delete :destroy, :id => @panel.id, :format => :json
\r
689 response.status.should eq 401
\r
691 it '応答メッセージにUnauthorizedを返す' do
\r
692 delete :destroy, :id => @panel.id, :format => :json
\r
693 response.message.should match(/Unauthorized/)
\r
697 context '削除に失敗したとき' do
\r
699 Panel.any_instance.stub(:destroy_with_elements).and_return(false)
\r
701 context 'html形式' do
\r
702 it 'ステータスコード302 Foundを返す' do
\r
703 delete :destroy, :id => @panel.id
\r
704 response.status.should eq 302
\r
706 it 'そのコマの詳細ページへ遷移する' do
\r
707 delete :destroy, :id => @panel.id
\r
708 response.should redirect_to(panel_path(@panel))
\r
711 context 'json形式' do
\r
712 it 'ステータスコード422 unprocessable_entity を返す' do
\r
713 delete :destroy, :id => @panel.id, :format => :json
\r
714 response.status.should eq 422
\r
716 it '応答メッセージUnprocessable Entityを返す' do
\r
717 delete :destroy, :id => @panel.id, :format => :json
\r
718 response.message.should match(/Unprocessable/)
\r
723 context '対象コマがないとき' do
\r
725 context '他人のコマだったとき' do
\r
731 describe '一覧表示に於いて' do
\r
733 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
734 Panel.stub(:list).and_return([@panel, @panel, @panel])
\r
737 context 'つつがなく終わるとき' do
\r
738 context 'html形式' do
\r
739 it 'ステータスコード200 OKを返す' do
\r
741 response.should be_success
\r
743 it 'indexテンプレートを描画する' do
\r
745 response.should render_template("index")
\r
748 context 'json形式' do
\r
749 it 'ステータスコード200 OKを返す' do
\r
750 get :index, :format => :json
\r
751 response.should be_success
\r
754 get :index, :format => :json
\r
755 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
759 context '作家権限がないとき' do
\r
763 context 'html形式' do
\r
764 it 'ステータスコード200 OKを返す' do
\r
766 response.should be_success
\r
768 it 'indexテンプレートを描画する' do
\r
770 response.should render_template("index")
\r
773 context 'json形式' do
\r
774 it 'ステータスコード200 OKを返す' do
\r
775 get :index, :format => :json
\r
776 response.should be_success
\r
779 get :index, :format => :json
\r
780 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
786 describe '単体表示に於いて' do
\r
788 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
789 Panel.stub(:show).with(@panel.id.to_s, @author).and_return(@panel)
\r
790 Panel.stub(:show).with(@panel.id.to_s, nil).and_return(@panel)
\r
793 context 'つつがなく終わるとき' do
\r
794 context 'html形式' do
\r
795 it 'ステータスコード200 OKを返す' do
\r
796 get :show, :id => @panel.id
\r
797 response.should be_success
\r
799 it 'showテンプレートを描画する' do
\r
800 get :show, :id => @panel.id
\r
801 response.should render_template("show")
\r
804 context 'json形式' do
\r
805 it 'ステータスコード200 OKを返す' do
\r
806 get :show, :id => @panel.id, :format => :json
\r
807 response.should be_success
\r
810 get :show, :id => @panel.id, :format => :json
\r
811 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
815 context '作家権限がないとき' do
\r
819 context 'html形式' do
\r
820 it 'ステータスコード200 OKを返す' do
\r
821 get :show, :id => @panel.id
\r
822 response.should be_success
\r
824 it 'showテンプレートを描画する' do
\r
825 get :show, :id => @panel.id
\r
826 response.should render_template("show")
\r
829 context 'json形式' do
\r
830 it 'ステータスコード200 OKを返す' do
\r
831 get :show, :id => @panel.id, :format => :json
\r
832 response.should be_success
\r
835 get :show, :id => @panel.id, :format => :json
\r
836 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
842 describe 'コマ数取得に於いて' do
\r
844 Panel.should_receive(:visible_count).and_return(3)
\r
847 context 'つつがなく終わるとき' do
\r
848 it 'ステータスコード200 OKを返す' do
\r
849 get :count, :format => :json
\r
850 response.should be_success
\r
852 context 'json形式' do
\r
854 get :count, :format => :json
\r
855 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
861 describe '新規作成フォーム表示に於いて' do
\r
865 context 'つつがなく終わるとき' do
\r
866 context 'html形式' do
\r
867 it 'ステータスコード200 OKを返す' do
\r
869 response.should be_success
\r
871 it 'newテンプレートを描画する' do
\r
873 response.should render_template("new")
\r
877 it 'new.jsテンプレートを描画する' do
\r
878 get :new, :format => :js
\r
879 response.should render_template("new")
\r
882 context 'json形式' do
\r
884 get :new, :format => :json
\r
885 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
889 context '作家権限がないとき' do
\r
893 context 'html形式' do
\r
894 it 'ステータスコード302 Foundを返す' do
\r
896 response.status.should eq 302
\r
898 it 'サインインページへ遷移する' do
\r
900 response.body.should redirect_to '/users/sign_in'
\r
904 it 'ステータスコード401 Unauthorizedを返す' do
\r
905 get :new, :format => :js
\r
906 response.status.should eq 401
\r
908 it '応答メッセージにUnauthorizedを返す' do
\r
909 get :new, :format => :js
\r
910 response.message.should match(/Unauthorized/)
\r
916 describe '新規作成に於いて' do
\r
918 @panel = FactoryGirl.build :panel, :author_id => @author.id
\r
919 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
922 context 'つつがなく終わるとき' do
\r
923 context 'html形式' do
\r
924 it 'ステータスコード302 Foundを返す' do
\r
925 Panel.any_instance.stub(:store).and_return(true)
\r
926 post :create, :panel => @attr
\r
927 response.status.should eq 302
\r
929 it '作成されたコマの表示ページへ遷移する' do
\r
930 # Panel.any_instance.stub(:store).and_return(true)
\r
931 post :create, :panel => @attr
\r
932 response.should redirect_to(Panel.last)
\r
935 context 'json形式' do
\r
936 it 'ステータスコード200 OKを返す' do
\r
937 # Panel.any_instance.stub(:store).and_return(true)
\r
938 post :create, :panel => @attr, :format => :json
\r
939 response.should be_success
\r
941 it '作成されたコマをjsonデータで返す' do
\r
942 post :create, :panel => @attr, :format => :json
\r
943 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
\r
947 context '作家権限がないとき' do
\r
951 context 'html形式' do
\r
952 it 'ステータスコード302 Foundを返す' do
\r
953 post :create, :panel => @attr
\r
954 response.status.should eq 302
\r
956 it 'サインインページへ遷移する' do
\r
957 post :create, :panel => @attr
\r
958 response.body.should redirect_to '/users/sign_in'
\r
961 context 'json形式' do
\r
962 it 'ステータスコード401 Unauthorizedを返す' do
\r
963 post :create, :panel => @attr, :format => :json
\r
964 response.status.should eq 401
\r
966 it '応答メッセージにUnauthorizedを返す' do
\r
967 post :create, :panel => @attr, :format => :json
\r
968 response.message.should match(/Unauthorized/)
\r
974 describe '編集フォーム表示に於いて' do
\r
976 @panel = FactoryGirl.create :panel, :author_id => @author.id
\r
978 Panel.stub(:show).and_return(@panel)
\r
980 context 'つつがなく終わるとき' do
\r
981 context 'html形式' do
\r
982 it 'ステータスコード200 OKを返す' do
\r
983 get :edit, :id => @panel.id
\r
984 response.should be_success
\r
986 it 'editテンプレートを描画する' do
\r
987 get :edit, :id => @panel.id
\r
988 response.should render_template("edit")
\r
992 it 'ステータスコード200 OKを返す' do
\r
993 get :edit, :id => @panel.id, :format => :js
\r
994 response.should be_success
\r
996 it 'edit.jsテンプレートを描画する' do
\r
997 get :edit, :id => @panel.id, :format => :js
\r
998 response.should render_template("edit")
\r
1002 context '作家権限がないとき' do
\r
1006 context 'html形式' do
\r
1007 it 'ステータスコード302 Foundを返す' do
\r
1008 get :edit, :id => @panel.id
\r
1009 response.status.should eq 302
\r
1011 it 'サインインページへ遷移する' do
\r
1012 get :edit, :id => @panel.id
\r
1013 response.body.should redirect_to '/users/sign_in'
\r
1017 it 'ステータスコード401 Unauthorizedを返す' do
\r
1018 get :edit, :id => @panel.id, :format => :js
\r
1019 response.status.should eq 401
\r
1021 it '応答メッセージにUnauthorizedを返す' do
\r
1022 get :edit, :id => @panel.id, :format => :js
\r
1023 response.message.should match(/Unauthorized/)
\r
1029 describe '更新に於いて' do
\r
1031 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
1032 @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)
\r
1035 context 'つつがなく終わるとき' do
\r
1036 context 'html形式' do
\r
1037 it 'ステータスコード302 Foundを返す' do
\r
1038 Panel.any_instance.stub(:store).and_return(true)
\r
1039 put :update, :id => @panel.id, :panel => @attr
\r
1040 response.status.should eq 302
\r
1042 it '作成されたコマの表示ページへ遷移する' do
\r
1043 # Panel.any_instance.stub(:store).and_return(true)
\r
1044 put :update, :id => @panel.id, :panel => @attr
\r
1045 response.should redirect_to(Panel.last)
\r
1048 context 'json形式' do
\r
1049 it 'ステータスコード200 OKを返す' do
\r
1050 # Panel.any_instance.stub(:store).and_return(true)
\r
1051 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1052 response.should be_success
\r
1054 it 'ページ本体は特に返さない' do
\r
1055 Panel.any_instance.stub(:save).with(any_args()).and_return(true)
\r
1056 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1057 response.body.should match /./
\r
1061 context '作家権限がないとき' do
\r
1065 context 'html形式' do
\r
1066 it 'ステータスコード302 Foundを返す' do
\r
1067 put :update, :id => @panel.id, :panel => @attr
\r
1068 response.status.should eq 302
\r
1070 it 'サインインページへ遷移する' do
\r
1071 put :update, :id => @panel.id, :panel => @attr
\r
1072 response.body.should redirect_to '/users/sign_in'
\r
1075 context 'json形式' do
\r
1076 it 'ステータスコード401 Unauthorizedを返す' do
\r
1077 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1078 response.status.should eq 401
\r
1080 it '応答メッセージにUnauthorizedを返す' do
\r
1081 put :update, :id => @panel.id, :panel => @attr, :format => :json
\r
1082 response.message.should match(/Unauthorized/)
\r
1088 describe '削除に於いて' do
\r
1090 @panel = FactoryGirl.create :panel, :author_id => @user.author.id
\r
1091 Panel.stub(:edit).and_return(@panel)
\r
1094 context 'つつがなく終わるとき' do
\r
1095 context 'html形式' do
\r
1096 it 'ステータスコード302 Foundを返す' do
\r
1097 delete :destroy, :id => @panel.id
\r
1098 response.status.should eq 302
\r
1100 it 'マイコマ一覧ページへ遷移する' do
\r
1101 delete :destroy, :id => @panel.id
\r
1102 response.should redirect_to('/home/panel')
\r
1105 context 'json形式' do
\r
1106 it 'ステータスコード200 OKを返す' do
\r
1107 delete :destroy, :id => @panel.id, :format => :json
\r
1108 response.should be_success
\r
1112 context '作家権限がないとき' do
\r
1116 context 'html形式' do
\r
1117 it 'ステータスコード302 Foundを返す' do
\r
1118 delete :destroy, :id => @panel.id
\r
1119 response.status.should eq 302
\r
1121 it 'サインインページへ遷移する' do
\r
1122 delete :destroy, :id => @panel.id
\r
1123 response.body.should redirect_to '/users/sign_in'
\r
1126 context 'json形式' do
\r
1127 it 'ステータスコード401 Unauthorizedを返す' do
\r
1128 delete :destroy, :id => @panel.id, :format => :json
\r
1129 response.status.should eq 401
\r
1131 it '応答メッセージにUnauthorizedを返す' do
\r
1132 delete :destroy, :id => @panel.id, :format => :json
\r
1133 response.message.should match(/Unauthorized/)
\r