OSDN Git Service

t#30328:create op import ...and pull
[pettanr/pettanr.git] / spec / controllers / panels_controller_spec.rb
1 # -*- encoding: utf-8 -*-\r
2 require 'spec_helper'\r
3 #コマ\r
4 describe PanelsController do\r
5   before 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
12   end\r
13   \r
14 if MagicNumber['run_mode'] == 1\r
15   describe '一覧表示に於いて' do\r
16     before do\r
17       @panel = FactoryGirl.create :panel, :author_id => @author.id\r
18       Panel.stub(:list).and_return([@panel, @panel, @panel])\r
19       sign_in @user\r
20     end\r
21     context '事前チェックする' do\r
22       it '与えられたpageがセットされている' do\r
23         get :index, :page => 5\r
24         assigns(:page).should eq 5\r
25       end\r
26       it '省略されると@pageに1値が入る' do\r
27         get :index\r
28         assigns(:page).should eq 1\r
29       end\r
30       it '与えられたpage_sizeがセットされている' do\r
31         get :index, :page_size => 15\r
32         assigns(:page_size).should eq 15\r
33       end\r
34       it '省略されると@page_sizeにデフォルト値が入る' do\r
35         get :index\r
36         assigns(:page_size).should eq Panel.default_page_size\r
37       end\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
41       end\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
45       end\r
46     end\r
47     context 'つつがなく終わるとき' do\r
48       it 'コマモデルに一覧を問い合わせている' do\r
49         Panel.should_receive(:list).exactly(1)\r
50         get :index\r
51       end\r
52       it '@panelsにリストを取得している' do\r
53         get :index\r
54         assigns(:panels).should have_at_least(3).items\r
55       end\r
56       context 'html形式' do\r
57         it 'ステータスコード200 OKを返す' do\r
58           get :index\r
59           response.should be_success \r
60         end\r
61         it 'indexテンプレートを描画する' do\r
62           get :index\r
63           response.should render_template("index")\r
64         end\r
65       end\r
66       context 'json形式' do\r
67         it 'ステータスコード200 OKを返す' do\r
68           get :index, :format => :json\r
69           response.should be_success \r
70         end\r
71         it 'jsonデータを返す' do\r
72           get :index, :format => :json\r
73           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)\r
74         end\r
75         it 'コマモデルにコマリストのjson出力を問い合わせている' do\r
76           Panel.should_receive(:list_as_json_text).exactly(1)\r
77           get :index, :format => :json\r
78         end\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
83         end\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
88         end\r
89       end\r
90     end\r
91     context '作家権限がないとき' do\r
92       before do\r
93         sign_out @user\r
94       end\r
95       context 'html形式' do\r
96         it 'ステータスコード302 Foundを返す' do\r
97           get :index\r
98           response.status.should eq 302\r
99         end\r
100         it 'サインインページへ遷移する' do\r
101           get :index\r
102           response.should redirect_to '/users/sign_in'\r
103         end\r
104       end\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
109         end\r
110         it '応答メッセージにUnauthorizedを返す' do\r
111           get :index, :format => :json\r
112           response.message.should match(/Unauthorized/)\r
113         end\r
114       end\r
115     end\r
116   end\r
117   \r
118   describe '単体表示に於いて' do\r
119     before 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
122       sign_in @user\r
123     end\r
124     context 'つつがなく終わるとき' do\r
125       it 'コマモデルに単体取得を問い合わせている' do\r
126         Panel.should_receive(:show).exactly(1)\r
127         get :show\r
128       end\r
129       it '@panelにアレを取得している' do\r
130         get :show, :id => @panel.id\r
131         assigns(:panel).id.should eq(@panel.id)\r
132       end\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
137         end\r
138         it 'showテンプレートを描画する' do\r
139           get :show, :id => @panel.id\r
140           response.should render_template("show")\r
141         end\r
142       end\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
147         end\r
148         it 'jsonデータを返す' do\r
149           get :show, :id => @panel.id, :format => :json\r
150           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)\r
151         end\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
155         end\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
160         end\r
161       end\r
162     end\r
163     context '作家権限がないとき' do\r
164       before do\r
165         sign_out @user\r
166       end\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
171         end\r
172         it 'サインインページへ遷移する' do\r
173           get :show, :id => @panel.id\r
174           response.body.should redirect_to '/users/sign_in'\r
175         end\r
176       end\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
181         end\r
182         it '応答メッセージにUnauthorizedを返す' do\r
183           get :show, :id => @panel.id, :format => :json\r
184           response.message.should match(/Unauthorized/)\r
185         end\r
186       end\r
187     end\r
188 =begin\r
189     context '対象コマがないとき' do\r
190       context 'html形式' do\r
191         it '例外404 not_foundを返す' do\r
192           lambda{\r
193             get :show, :id => 0\r
194           }.should raise_error(ActiveRecord::RecordNotFound)\r
195         end\r
196       end\r
197       context 'json形式' do\r
198         it '例外404 not_foundを返す' do\r
199           lambda{ \r
200             get :show, :id => 0, :format => :json\r
201           }.should raise_error(ActiveRecord::RecordNotFound)\r
202         end\r
203       end\r
204     end\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
210           lambda{\r
211             get :show, :id => hidden\r
212           }.should raise_error(ActiveRecord::Forbidden)\r
213         end\r
214       end\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
219           lambda{\r
220             get :show, :id => hidden, :format => :json\r
221           }.should raise_error(ActiveRecord::Forbidden)\r
222         end\r
223       end\r
224     end\r
225 =end\r
226   end\r
227   \r
228   describe 'コマ数取得に於いて' do\r
229     before do\r
230       Panel.should_receive(:visible_count).and_return(3)\r
231 #      sign_in @user\r
232     end\r
233     context 'つつがなく終わるとき' do\r
234       it 'ステータスコード200 OKを返す' do\r
235         get :count, :format => :json\r
236         response.should be_success \r
237       end\r
238       context 'json形式' do\r
239         it 'jsonデータを返す' do\r
240           get :count, :format => :json\r
241           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)\r
242         end\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
247         end\r
248       end\r
249     end\r
250   end\r
251   \r
252   describe '新規作成フォーム表示に於いて' do\r
253     before do\r
254       sign_in @user\r
255     end\r
256     context 'つつがなく終わるとき' do\r
257       it '@panelに新規データを用意している' do\r
258         get :new\r
259         assigns(:panel).should be_a_new(Panel)\r
260       end\r
261       it 'コマモデルにデフォルト値補充を依頼している' do\r
262         Panel.any_instance.should_receive(:supply_default).exactly(1)\r
263         get :new\r
264       end\r
265       context 'html形式' do\r
266         it 'ステータスコード200 OKを返す' do\r
267           get :new\r
268           response.should be_success \r
269         end\r
270         it 'newテンプレートを描画する' do\r
271           get :new\r
272           response.should render_template("new")\r
273         end\r
274       end\r
275       context 'js形式' do\r
276         it 'new.jsテンプレートを描画する' do\r
277           get :new, :format => :js\r
278           response.should render_template("new")\r
279         end\r
280       end\r
281       context 'json形式' do\r
282         it 'jsonデータを返す' do\r
283           get :new, :format => :json\r
284           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)\r
285         end\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
289         end\r
290       end\r
291     end\r
292     context '作家権限がないとき' do\r
293       before do\r
294         sign_out @user\r
295       end\r
296       context 'html形式' do\r
297         it 'ステータスコード302 Foundを返す' do\r
298           get :new\r
299           response.status.should eq 302\r
300         end\r
301         it 'サインインページへ遷移する' do\r
302           get :new\r
303           response.body.should redirect_to '/users/sign_in'\r
304         end\r
305       end\r
306       context 'js形式' do\r
307         it 'ステータスコード401 Unauthorizedを返す' do\r
308           get :new, :format => :js\r
309           response.status.should eq 401\r
310         end\r
311         it '応答メッセージにUnauthorizedを返す' do\r
312           get :new, :format => :js\r
313           response.message.should match(/Unauthorized/)\r
314         end\r
315       end\r
316     end\r
317   end\r
318   \r
319   describe '新規作成に於いて' do\r
320     before do\r
321       @panel = FactoryGirl.build :panel, :author_id => @author.id\r
322       @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)\r
323       sign_in @user\r
324     end\r
325     context '事前チェックする' do\r
326       before do\r
327         Panel.stub(:count).and_return(10)\r
328       end\r
329       it 'panelがパラメータにあれば、展開する' do\r
330         post :create, :panel => @attr\r
331         assigns(:prm)['border'].to_i.should eq @panel.border\r
332       end\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
336       end\r
337       it 'panel・json両パラメータがあれば、panelを優先して展開する' do\r
338         post :create, {\r
339           :panel => FactoryGirl.attributes_for(:panel), \r
340           :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json\r
341         }\r
342         assigns(:prm)['border'].to_i.should eq @panel.border\r
343       end\r
344       it 'コマモデルにデフォルト値補充を依頼している' do\r
345         Panel.any_instance.should_receive(:supply_default).exactly(1)\r
346         post :create, :panel => @attr\r
347       end\r
348       it 'モデルに保存依頼する' do\r
349         Panel.any_instance.should_receive(:store).exactly(1)\r
350         post :create, :panel => @attr\r
351       end\r
352     end\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
358       end\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
364         end\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
369         end\r
370       end\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
376         end\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
380         end\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
384         end\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
389         end\r
390       end\r
391     end\r
392     context '作家権限がないとき' do\r
393       before do\r
394         sign_out @user\r
395       end\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
400         end\r
401         it 'サインインページへ遷移する' do\r
402           post :create, :panel => @attr\r
403           response.body.should redirect_to '/users/sign_in'\r
404         end\r
405       end\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
410         end\r
411         it '応答メッセージにUnauthorizedを返す' do\r
412           post :create, :panel => @attr, :format => :json\r
413           response.message.should match(/Unauthorized/)\r
414         end\r
415       end\r
416     end\r
417     context '検証、保存に失敗した' do\r
418       before do\r
419         Panel.any_instance.stub(:store).and_return(false)\r
420       end\r
421       it "未保存のコマを保持している" do\r
422         post :create, :panel => @attr\r
423         assigns(:panel).should be_a_new(Panel)\r
424       end\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
429         end\r
430         it '新規ページを描画する' do\r
431           post :create, :panel => @attr\r
432           response.should render_template("new")\r
433         end\r
434       end\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
439         end\r
440         it '応答メッセージUnprocessable Entityを返す' do\r
441           post :create, :panel => @attr, :format => :json\r
442           response.message.should match(/Unprocessable/)\r
443         end\r
444       end\r
445     end\r
446   end\r
447 \r
448   describe '編集フォーム表示に於いて' do\r
449     before do\r
450       @panel = FactoryGirl.create :panel, :author_id => @author.id\r
451       sign_in @user\r
452       Panel.stub(:show).and_return(@panel)\r
453     end\r
454     context 'つつがなく終わるとき' do\r
455       it 'コマモデルに編集取得を問い合わせている' do\r
456         Panel.should_receive(:edit).exactly(1)\r
457         get :edit, :id => @panel.id\r
458       end\r
459       it '@panelにデータを用意している' do\r
460         get :edit, :id => @panel.id\r
461         assigns(:panel).should eq @panel\r
462       end\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
467         end\r
468         it 'editテンプレートを描画する' do\r
469           get :edit, :id => @panel.id\r
470           response.should render_template("edit")\r
471         end\r
472       end\r
473       context 'js形式' do\r
474         it 'ステータスコード200 OKを返す' do\r
475           get :edit, :id => @panel.id, :format => :js\r
476           response.should be_success \r
477         end\r
478         it 'edit.jsテンプレートを描画する' do\r
479           get :edit, :id => @panel.id, :format => :js\r
480           response.should render_template("edit")\r
481         end\r
482       end\r
483     end\r
484     context '作家権限がないとき' do\r
485       before do\r
486         sign_out @user\r
487       end\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
492         end\r
493         it 'サインインページへ遷移する' do\r
494           get :edit, :id => @panel.id\r
495           response.body.should redirect_to '/users/sign_in'\r
496         end\r
497       end\r
498       context 'js形式' do\r
499         it 'ステータスコード401 Unauthorizedを返す' do\r
500           get :edit, :id => @panel.id, :format => :js\r
501           response.status.should eq 401\r
502         end\r
503         it '応答メッセージにUnauthorizedを返す' do\r
504           get :edit, :id => @panel.id, :format => :js\r
505           response.message.should match(/Unauthorized/)\r
506         end\r
507       end\r
508     end\r
509   end\r
510 \r
511   describe '更新に於いて' do\r
512     before do\r
513       @panel = FactoryGirl.create :panel, :author_id => @user.author.id\r
514       @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)\r
515       sign_in @user\r
516     end\r
517     context '事前チェックする' do\r
518       before do\r
519         controller\r
520         Panel.stub(:count).and_return(10)\r
521       end\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
525       end\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
529       end\r
530       it 'panel・json両パラメータがあれば、panelを優先して展開する' do\r
531         put :update, {\r
532           :id => @panel.id, \r
533           :panel => FactoryGirl.attributes_for(:panel), \r
534           :json => FactoryGirl.attributes_for(:panel, :border => 4).to_json\r
535         }\r
536         assigns(:prm)['border'].to_i.should eq @panel.border\r
537       end\r
538     end\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
544       end\r
545       it 'モデルに保存依頼する' do\r
546         Panel.any_instance.should_receive(:store).exactly(1)\r
547         put :update, :id => @panel.id, :panel => @attr\r
548       end\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
553       end\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
559         end\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
564         end\r
565       end\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
571         end\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
576         end\r
577       end\r
578     end\r
579     context '作家権限がないとき' do\r
580       before do\r
581         sign_out @user\r
582       end\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
587         end\r
588         it 'サインインページへ遷移する' do\r
589           put :update, :id => @panel.id, :panel => @attr\r
590           response.body.should redirect_to '/users/sign_in'\r
591         end\r
592       end\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
597         end\r
598         it '応答メッセージにUnauthorizedを返す' do\r
599           put :update, :id => @panel.id, :panel => @attr, :format => :json\r
600           response.message.should match(/Unauthorized/)\r
601         end\r
602       end\r
603     end\r
604     context '検証、保存に失敗した' do\r
605       before do\r
606         Panel.any_instance.stub(:store).and_return(false)\r
607       end\r
608       it "指定のコマを保持している" do\r
609         put :update, :id => @panel.id, :panel => @attr\r
610         assigns(:panel).should eq @panel\r
611       end\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
616         end\r
617         it '編集ページを描画する' do\r
618           put :update, :id => @panel.id, :panel => @attr\r
619           response.should render_template("edit")\r
620         end\r
621       end\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
626         end\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
630         end\r
631       end\r
632     end\r
633   end\r
634 \r
635   describe '削除に於いて' do\r
636     before do\r
637       @panel = FactoryGirl.create :panel, :author_id => @user.author.id\r
638       Panel.stub(:edit).and_return(@panel)\r
639       sign_in @user\r
640     end\r
641     context 'つつがなく終わるとき' do\r
642       it 'コマモデルに編集取得を問い合わせている' do\r
643         Panel.should_receive(:edit).exactly(1)\r
644         delete :destroy, :id => @panel.id\r
645       end\r
646       it '@panelにアレを取得している' do\r
647         delete :destroy, :id => @panel.id\r
648         assigns(:panel).id.should eq(@panel.id)\r
649       end\r
650       it 'そのコマを削除する' do\r
651         lambda {\r
652           delete :destroy, :id => @panel.id\r
653         }.should change(Panel, :count)\r
654       end\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
659         end\r
660         it 'マイコマ一覧ページへ遷移する' do\r
661           delete :destroy, :id => @panel.id\r
662           response.should redirect_to('/home/panel')\r
663         end\r
664       end\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
669         end\r
670       end\r
671     end\r
672     context '作家権限がないとき' do\r
673       before do\r
674         sign_out @user\r
675       end\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
680         end\r
681         it 'サインインページへ遷移する' do\r
682           delete :destroy, :id => @panel.id\r
683           response.body.should redirect_to '/users/sign_in'\r
684         end\r
685       end\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
690         end\r
691         it '応答メッセージにUnauthorizedを返す' do\r
692           delete :destroy, :id => @panel.id, :format => :json\r
693           response.message.should match(/Unauthorized/)\r
694         end\r
695       end\r
696     end\r
697     context '削除に失敗したとき' do\r
698       before do\r
699         Panel.any_instance.stub(:destroy_with_elements).and_return(false)\r
700       end\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
705         end\r
706         it 'そのコマの詳細ページへ遷移する' do\r
707           delete :destroy, :id => @panel.id\r
708           response.should redirect_to(panel_path(@panel))\r
709         end\r
710       end\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
715         end\r
716         it '応答メッセージUnprocessable Entityを返す' do\r
717           delete :destroy, :id => @panel.id, :format => :json\r
718           response.message.should match(/Unprocessable/)\r
719         end\r
720       end\r
721     end\r
722 =begin\r
723     context '対象コマがないとき' do\r
724     end\r
725     context '他人のコマだったとき' do\r
726     end\r
727 =end\r
728   end\r
729   \r
730 else\r
731   describe '一覧表示に於いて' do\r
732     before do\r
733       @panel = FactoryGirl.create :panel, :author_id => @author.id\r
734       Panel.stub(:list).and_return([@panel, @panel, @panel])\r
735       sign_in @user\r
736     end\r
737     context 'つつがなく終わるとき' do\r
738       context 'html形式' do\r
739         it 'ステータスコード200 OKを返す' do\r
740           get :index\r
741           response.should be_success \r
742         end\r
743         it 'indexテンプレートを描画する' do\r
744           get :index\r
745           response.should render_template("index")\r
746         end\r
747       end\r
748       context 'json形式' do\r
749         it 'ステータスコード200 OKを返す' do\r
750           get :index, :format => :json\r
751           response.should be_success \r
752         end\r
753         it 'jsonデータを返す' do\r
754           get :index, :format => :json\r
755           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)\r
756         end\r
757       end\r
758     end\r
759     context '作家権限がないとき' do\r
760       before do\r
761         sign_out @user\r
762       end\r
763       context 'html形式' do\r
764         it 'ステータスコード200 OKを返す' do\r
765           get :index\r
766           response.should be_success \r
767         end\r
768         it 'indexテンプレートを描画する' do\r
769           get :index\r
770           response.should render_template("index")\r
771         end\r
772       end\r
773       context 'json形式' do\r
774         it 'ステータスコード200 OKを返す' do\r
775           get :index, :format => :json\r
776           response.should be_success \r
777         end\r
778         it 'jsonデータを返す' do\r
779           get :index, :format => :json\r
780           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)\r
781         end\r
782       end\r
783     end\r
784   end\r
785   \r
786   describe '単体表示に於いて' do\r
787     before 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
791       sign_in @user\r
792     end\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
798         end\r
799         it 'showテンプレートを描画する' do\r
800           get :show, :id => @panel.id\r
801           response.should render_template("show")\r
802         end\r
803       end\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
808         end\r
809         it 'jsonデータを返す' do\r
810           get :show, :id => @panel.id, :format => :json\r
811           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)\r
812         end\r
813       end\r
814     end\r
815     context '作家権限がないとき' do\r
816       before do\r
817         sign_out @user\r
818       end\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
823         end\r
824         it 'showテンプレートを描画する' do\r
825           get :show, :id => @panel.id\r
826           response.should render_template("show")\r
827         end\r
828       end\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
833         end\r
834         it 'jsonデータを返す' do\r
835           get :show, :id => @panel.id, :format => :json\r
836           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)\r
837         end\r
838       end\r
839     end\r
840   end\r
841   \r
842   describe 'コマ数取得に於いて' do\r
843     before do\r
844       Panel.should_receive(:visible_count).and_return(3)\r
845 #      sign_in @user\r
846     end\r
847     context 'つつがなく終わるとき' do\r
848       it 'ステータスコード200 OKを返す' do\r
849         get :count, :format => :json\r
850         response.should be_success \r
851       end\r
852       context 'json形式' do\r
853         it 'jsonデータを返す' do\r
854           get :count, :format => :json\r
855           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)\r
856         end\r
857       end\r
858     end\r
859   end\r
860   \r
861   describe '新規作成フォーム表示に於いて' do\r
862     before do\r
863       sign_in @user\r
864     end\r
865     context 'つつがなく終わるとき' do\r
866       context 'html形式' do\r
867         it 'ステータスコード200 OKを返す' do\r
868           get :new\r
869           response.should be_success \r
870         end\r
871         it 'newテンプレートを描画する' do\r
872           get :new\r
873           response.should render_template("new")\r
874         end\r
875       end\r
876       context 'js形式' do\r
877         it 'new.jsテンプレートを描画する' do\r
878           get :new, :format => :js\r
879           response.should render_template("new")\r
880         end\r
881       end\r
882       context 'json形式' do\r
883         it 'jsonデータを返す' do\r
884           get :new, :format => :json\r
885           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)\r
886         end\r
887       end\r
888     end\r
889     context '作家権限がないとき' do\r
890       before do\r
891         sign_out @user\r
892       end\r
893       context 'html形式' do\r
894         it 'ステータスコード302 Foundを返す' do\r
895           get :new\r
896           response.status.should eq 302\r
897         end\r
898         it 'サインインページへ遷移する' do\r
899           get :new\r
900           response.body.should redirect_to '/users/sign_in'\r
901         end\r
902       end\r
903       context 'js形式' do\r
904         it 'ステータスコード401 Unauthorizedを返す' do\r
905           get :new, :format => :js\r
906           response.status.should eq 401\r
907         end\r
908         it '応答メッセージにUnauthorizedを返す' do\r
909           get :new, :format => :js\r
910           response.message.should match(/Unauthorized/)\r
911         end\r
912       end\r
913     end\r
914   end\r
915   \r
916   describe '新規作成に於いて' do\r
917     before do\r
918       @panel = FactoryGirl.build :panel, :author_id => @author.id\r
919       @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)\r
920       sign_in @user\r
921     end\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
928         end\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
933         end\r
934       end\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
940         end\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
944         end\r
945       end\r
946     end\r
947     context '作家権限がないとき' do\r
948       before do\r
949         sign_out @user\r
950       end\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
955         end\r
956         it 'サインインページへ遷移する' do\r
957           post :create, :panel => @attr\r
958           response.body.should redirect_to '/users/sign_in'\r
959         end\r
960       end\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
965         end\r
966         it '応答メッセージにUnauthorizedを返す' do\r
967           post :create, :panel => @attr, :format => :json\r
968           response.message.should match(/Unauthorized/)\r
969         end\r
970       end\r
971     end\r
972   end\r
973 \r
974   describe '編集フォーム表示に於いて' do\r
975     before do\r
976       @panel = FactoryGirl.create :panel, :author_id => @author.id\r
977       sign_in @user\r
978       Panel.stub(:show).and_return(@panel)\r
979     end\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
985         end\r
986         it 'editテンプレートを描画する' do\r
987           get :edit, :id => @panel.id\r
988           response.should render_template("edit")\r
989         end\r
990       end\r
991       context 'js形式' do\r
992         it 'ステータスコード200 OKを返す' do\r
993           get :edit, :id => @panel.id, :format => :js\r
994           response.should be_success \r
995         end\r
996         it 'edit.jsテンプレートを描画する' do\r
997           get :edit, :id => @panel.id, :format => :js\r
998           response.should render_template("edit")\r
999         end\r
1000       end\r
1001     end\r
1002     context '作家権限がないとき' do\r
1003       before do\r
1004         sign_out @user\r
1005       end\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
1010         end\r
1011         it 'サインインページへ遷移する' do\r
1012           get :edit, :id => @panel.id\r
1013           response.body.should redirect_to '/users/sign_in'\r
1014         end\r
1015       end\r
1016       context 'js形式' do\r
1017         it 'ステータスコード401 Unauthorizedを返す' do\r
1018           get :edit, :id => @panel.id, :format => :js\r
1019           response.status.should eq 401\r
1020         end\r
1021         it '応答メッセージにUnauthorizedを返す' do\r
1022           get :edit, :id => @panel.id, :format => :js\r
1023           response.message.should match(/Unauthorized/)\r
1024         end\r
1025       end\r
1026     end\r
1027   end\r
1028 \r
1029   describe '更新に於いて' do\r
1030     before do\r
1031       @panel = FactoryGirl.create :panel, :author_id => @user.author.id\r
1032       @attr = FactoryGirl.attributes_for(:panel, :author_id => @author.id)\r
1033       sign_in @user\r
1034     end\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
1041         end\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
1046         end\r
1047       end\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
1053         end\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
1058         end\r
1059       end\r
1060     end\r
1061     context '作家権限がないとき' do\r
1062       before do\r
1063         sign_out @user\r
1064       end\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
1069         end\r
1070         it 'サインインページへ遷移する' do\r
1071           put :update, :id => @panel.id, :panel => @attr\r
1072           response.body.should redirect_to '/users/sign_in'\r
1073         end\r
1074       end\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
1079         end\r
1080         it '応答メッセージにUnauthorizedを返す' do\r
1081           put :update, :id => @panel.id, :panel => @attr, :format => :json\r
1082           response.message.should match(/Unauthorized/)\r
1083         end\r
1084       end\r
1085     end\r
1086   end\r
1087 \r
1088   describe '削除に於いて' do\r
1089     before do\r
1090       @panel = FactoryGirl.create :panel, :author_id => @user.author.id\r
1091       Panel.stub(:edit).and_return(@panel)\r
1092       sign_in @user\r
1093     end\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
1099         end\r
1100         it 'マイコマ一覧ページへ遷移する' do\r
1101           delete :destroy, :id => @panel.id\r
1102           response.should redirect_to('/home/panel')\r
1103         end\r
1104       end\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
1109         end\r
1110       end\r
1111     end\r
1112     context '作家権限がないとき' do\r
1113       before do\r
1114         sign_out @user\r
1115       end\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
1120         end\r
1121         it 'サインインページへ遷移する' do\r
1122           delete :destroy, :id => @panel.id\r
1123           response.body.should redirect_to '/users/sign_in'\r
1124         end\r
1125       end\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
1130         end\r
1131         it '応答メッセージにUnauthorizedを返す' do\r
1132           delete :destroy, :id => @panel.id, :format => :json\r
1133           response.message.should match(/Unauthorized/)\r
1134         end\r
1135       end\r
1136     end\r
1137   end\r
1138   \r
1139 end\r
1140 end\r
1141 \r