1 # -*- encoding: utf-8 -*-
5 describe HomeController do
7 FactoryGirl.create :admin
8 @sp = FactoryGirl.create :system_picture
9 @lg = FactoryGirl.create :license_group
10 @license = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
11 @user = FactoryGirl.create( :user_yas)
12 @author = @user.author
13 @artist = FactoryGirl.create :artist_yas, :author_id => @author.id
14 @color = FactoryGirl.create :color
15 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
16 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
17 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
18 @panel = FactoryGirl.create :panel, :author_id => @author.id
21 describe '自分のコミック一覧表示に於いて' do
23 @comic = FactoryGirl.create :comic, :author_id => @author.id
25 Comic.stub(:mylist).and_return([@comic, @comic, @comic])
27 context 'パラメータpageについて' do
29 get :comic, :page => 5
30 assigns(:page).should eq 5
32 it '省略されると@pageに1値が入る' do
34 assigns(:page).should eq 1
36 it '与えられたpage_sizeがセットされている' do
37 get :comic, :page_size => 15
38 assigns(:page_size).should eq 15
40 it '省略されると@page_sizeにデフォルト値が入る' do
42 assigns(:page_size).should eq Author.default_comic_page_size
44 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
45 get :comic, :page_size => 1500
46 assigns(:page_size).should eq Author.comic_max_page_size
48 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
49 get :comic, :page_size => 0
50 assigns(:page_size).should eq Author.default_comic_page_size
53 context 'つつがなく終わるとき' do
54 it 'ステータスコード200 OKを返す' do
56 response.should be_success
58 it 'コミックモデルに一覧を問い合わせている' do
59 Comic.should_receive(:mylist).exactly(1)
62 it '@comicsにリストを取得している' do
64 assigns(:comics).should have_at_least(3).items
67 it 'comicテンプレートを描画する' do
69 response.should render_template("comic")
74 get :comic, :format => :json
75 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
77 it 'コミックモデルにjson一覧出力オプションを問い合わせている' do
78 Comic.should_receive(:list_json_opt).exactly(1)
79 get :comic, :format => :json
81 it 'データがリスト構造になっている' do
82 get :comic, :format => :json
83 json = JSON.parse response.body
84 json.should have_at_least(3).items
86 it 'リストの先頭くらいはコミックっぽいものであって欲しい' do
87 get :comic, :format => :json
88 json = JSON.parse response.body
89 json.first.has_key?("title").should be_true
90 json.first.has_key?("visible").should be_true
\r
94 context '作家権限がないとき' do
99 it 'ステータスコード302 Foundを返す' do
101 response.status.should eq 302
103 it 'サインインページへ遷移する' do
105 response.should redirect_to '/users/sign_in'
109 it 'ステータスコード401 Unauthorizedを返す' do
110 get :comic, :format => :json
111 response.status.should eq 401
113 it '応答メッセージにUnauthorizedを返す' do
114 get :comic, :format => :json
115 response.message.should match(/Unauthorized/)
121 describe '自分のコマ一覧表示に於いて' do
123 @panel = FactoryGirl.create :panel, :author_id => @author.id
125 Panel.stub(:mylist).and_return([@panel, @panel, @panel])
127 context 'パラメータpageについて' do
129 get :panel, :page => 5
130 assigns(:page).should eq 5
132 it '省略されると@pageに1値が入る' do
134 assigns(:page).should eq 1
136 it '与えられたpage_sizeがセットされている' do
137 get :panel, :page_size => 15
138 assigns(:page_size).should eq 15
140 it '省略されると@page_sizeにデフォルト値が入る' do
142 assigns(:page_size).should eq Author.default_panel_page_size
144 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
145 get :panel, :page_size => 1500
146 assigns(:page_size).should eq Author.panel_max_page_size
148 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
149 get :panel, :page_size => 0
150 assigns(:page_size).should eq Author.default_panel_page_size
153 context 'つつがなく終わるとき' do
154 it 'コマモデルに一覧を問い合わせている' do
155 Panel.should_receive(:mylist).exactly(1)
158 it '@panelsにリストを取得している' do
160 assigns(:panels).should have_at_least(3).items
163 it 'ステータスコード200 OKを返す' do
165 response.should be_success
167 it 'panelテンプレートを描画する' do
169 response.should render_template("panel")
173 it 'ステータスコード200 OKを返す' do
174 get :panel, :format => :json
175 response.should be_success
178 get :panel, :format => :json
179 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
181 it 'コマモデルにコマリストのjson出力を問い合わせている' do
182 Panel.should_receive(:list_as_json_text).exactly(1)
183 get :panel, :format => :json
185 it 'データがリスト構造になっている' do
186 get :panel, :format => :json
187 json = JSON.parse response.body
188 json.should have_at_least(3).items
190 it 'リストの先頭くらいはコマっぽいものであって欲しい' do
191 get :panel, :format => :json
192 json = JSON.parse response.body
193 json.first.has_key?("z").should be_true
197 context '作家権限がないとき' do
202 it 'ステータスコード302 Foundを返す' do
204 response.status.should eq 302
206 it 'サインインページへ遷移する' do
208 response.should redirect_to '/users/sign_in'
212 it 'ステータスコード401 Unauthorizedを返す' do
213 get :panel, :format => :json
214 response.status.should eq 401
216 it '応答メッセージにUnauthorizedを返す' do
217 get :panel, :format => :json
218 response.message.should match(/Unauthorized/)
224 describe '自分のコマ絵一覧表示に於いて' do
226 @pp = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :picture_id => @p.id,
227 :width => @p.width, :height => @p.height
229 PanelPicture.stub(:mylist).and_return([@pp, @pp, @pp])
231 context 'パラメータpageについて' do
233 get :panel_picture, :page => 5
234 assigns(:page).should eq 5
236 it '省略されると@pageに1値が入る' do
238 assigns(:page).should eq 1
240 it '与えられたpage_sizeがセットされている' do
241 get :panel_picture, :page_size => 15
242 assigns(:page_size).should eq 15
244 it '省略されると@page_sizeにデフォルト値が入る' do
246 assigns(:page_size).should eq Author.default_panel_picture_page_size
248 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
249 get :panel_picture, :page_size => 1500
250 assigns(:page_size).should eq Author.panel_picture_max_page_size
252 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
253 get :panel_picture, :page_size => 0
254 assigns(:page_size).should eq Author.default_panel_picture_page_size
257 context 'つつがなく終わるとき' do
258 it 'ステータスコード200 OKを返す' do
260 response.should be_success
262 it 'コマ絵モデルに一覧を問い合わせている' do
263 PanelPicture.should_receive(:mylist).exactly(1)
266 it '@panel_picturesにリストを取得している' do
268 assigns(:panel_pictures).should have_at_least(3).items
271 it 'panel_pictureテンプレートを描画する' do
273 response.should render_template("panel_picture")
278 get :panel_picture, :format => :json
279 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
281 it 'コマ絵モデルにjson一覧出力オプションを問い合わせている' do
282 PanelPicture.should_receive(:list_json_opt).exactly(1)
283 get :panel_picture, :format => :json
285 it 'データがリスト構造になっている' do
286 get :panel_picture, :format => :json
287 json = JSON.parse response.body
288 json.should have_at_least(3).items
290 it 'リストの先頭くらいはコマ絵っぽいものであって欲しい' do
291 get :panel_picture, :format => :json
292 json = JSON.parse response.body
293 json.first.has_key?("link").should be_true
294 json.first.has_key?("x").should be_true
295 json.first.has_key?("y").should be_true
299 context '作家権限がないとき' do
304 it 'ステータスコード302 Foundを返す' do
306 response.status.should eq 302
308 it 'サインインページへ遷移する' do
310 response.should redirect_to '/users/sign_in'
314 it 'ステータスコード401 Unauthorizedを返す' do
315 get :panel_picture, :format => :json
316 response.status.should eq 401
318 it '応答メッセージにUnauthorizedを返す' do
319 get :panel_picture, :format => :json
320 response.message.should match(/Unauthorized/)
326 describe '自分の原画一覧表示に於いて' do
329 OriginalPicture.stub(:mylist).and_return([@op, @op, @op])
331 context 'パラメータpageについて' do
333 get :picture, :page => 5
334 assigns(:page).should eq 5
336 it '省略されると@pageに1値が入る' do
338 assigns(:page).should eq 1
340 it '与えられたpage_sizeがセットされている' do
341 get :picture, :page_size => 15
342 assigns(:page_size).should eq 15
344 it '省略されると@page_sizeにデフォルト値が入る' do
346 assigns(:page_size).should eq OriginalPicture.default_page_size
348 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
349 get :picture, :page_size => 1500
350 assigns(:page_size).should eq OriginalPicture.max_page_size
352 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
353 get :picture, :page_size => 0
354 assigns(:page_size).should eq OriginalPicture.default_page_size
357 context 'つつがなく終わるとき' do
358 it 'ステータスコード200 OKを返す' do
360 response.should be_success
362 it '原画モデルに一覧を問い合わせている' do
363 #原画は他人が使えないので「自分の」リストはない
364 OriginalPicture.should_receive(:mylist).exactly(1)
367 it '@original_picturesにリストを取得している' do
369 assigns(:original_pictures).should have_at_least(3).items
372 it 'pictureテンプレートを描画する' do
374 response.should render_template("picture")
379 get :picture, :format => :json
380 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
382 it '原画モデルにjson一覧出力オプションを問い合わせている' do
383 OriginalPicture.should_receive(:list_json_opt).exactly(1)
384 get :picture, :format => :json
386 it 'データがリスト構造になっている' do
387 get :picture, :format => :json
388 json = JSON.parse response.body
389 json.should have_at_least(3).items
391 it 'リストの先頭くらいは原画っぽいものであって欲しい' do
392 get :picture, :format => :json
393 json = JSON.parse response.body
394 json.first.has_key?("ext").should be_true
395 json.first.has_key?("md5").should be_true
396 json.first.has_key?("artist_id").should be_true
397 json.first.has_key?("width").should be_true
401 context '作家権限がないとき' do
406 it 'ステータスコード302 Foundを返す' do
408 response.status.should eq 302
410 it 'サインインページへ遷移する' do
412 response.should redirect_to '/users/sign_in'
416 it 'ステータスコード401 Unauthorizedを返す' do
417 get :picture, :format => :json
418 response.status.should eq 401
420 it '応答メッセージにUnauthorizedを返す' do
421 get :picture, :format => :json
422 response.message.should match(/Unauthorized/)
426 context '作家が絵師でないとき' do
428 Author.any_instance.stub(:artist?).and_return(false)
431 it 'ステータスコード302 Foundを返す' do
433 response.status.should eq 302
437 response.should redirect_to new_artist_path
441 it '例外403 forbiddenを返す' do
443 get :picture, :format => :json
444 }.should raise_error(ActiveRecord::Forbidden)
450 describe '自分のコマの色背景一覧表示に於いて' do
452 @pc = FactoryGirl.create :panel_color, :panel_id => @panel.id
454 PanelColor.stub(:mylist).and_return([@pc, @pc, @pc])
456 context 'パラメータpageについて' do
458 get :panel_color, :page => 5
459 assigns(:page).should eq 5
461 it '省略されると@pageに1値が入る' do
463 assigns(:page).should eq 1
465 it '与えられたpage_sizeがセットされている' do
466 get :panel_color, :page_size => 15
467 assigns(:page_size).should eq 15
469 it '省略されると@page_sizeにデフォルト値が入る' do
471 assigns(:page_size).should eq PanelColor.default_page_size
473 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
474 get :panel_color, :page_size => 1500
475 assigns(:page_size).should eq PanelColor.max_page_size
477 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
478 get :panel_color, :page_size => 0
479 assigns(:page_size).should eq PanelColor.default_page_size
482 context 'つつがなく終わるとき' do
483 it 'ステータスコード200 OKを返す' do
485 response.should be_success
487 it 'コマの色背景モデルに一覧を問い合わせている' do
488 PanelColor.should_receive(:mylist).exactly(1)
491 it '@panel_colorsにリストを取得している' do
493 assigns(:panel_colors).should have_at_least(3).items
496 it 'panel_colorテンプレートを描画する' do
498 response.should render_template("panel_color")
503 get :panel_color, :format => :json
504 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
506 it 'コマの色背景モデルにjson一覧出力オプションを問い合わせている' do
507 PanelColor.should_receive(:list_json_opt).exactly(1)
508 get :panel_color, :format => :json
510 it 'データがリスト構造になっている' do
511 get :panel_color, :format => :json
512 json = JSON.parse response.body
513 json.should have_at_least(3).items
515 it 'リストの先頭くらいはコマの色背景っぽいものであって欲しい' do
516 get :panel_color, :format => :json
517 json = JSON.parse response.body
518 json.first.has_key?("panel_id").should be_true
519 json.first.has_key?("code").should be_true
520 json.first.has_key?("z").should be_true
524 context '作家権限がないとき' do
529 it 'ステータスコード302 Foundを返す' do
531 response.status.should eq 302
533 it 'サインインページへ遷移する' do
535 response.should redirect_to '/users/sign_in'
539 it 'ステータスコード401 Unauthorizedを返す' do
540 get :panel_color, :format => :json
541 response.status.should eq 401
543 it '応答メッセージにUnauthorizedを返す' do
544 get :panel_color, :format => :json
545 response.message.should match(/Unauthorized/)
551 describe '自分のコマの画像背景一覧表示に於いて' do
553 @gp = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :picture_id => @p.id
555 GroundPicture.stub(:mylist).and_return([@gp, @gp, @gp])
557 context 'パラメータpageについて' do
559 get :ground_picture, :page => 5
560 assigns(:page).should eq 5
562 it '省略されると@pageに1値が入る' do
564 assigns(:page).should eq 1
566 it '与えられたpage_sizeがセットされている' do
567 get :ground_picture, :page_size => 15
568 assigns(:page_size).should eq 15
570 it '省略されると@page_sizeにデフォルト値が入る' do
572 assigns(:page_size).should eq GroundPicture.default_page_size
574 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
575 get :ground_picture, :page_size => 1500
576 assigns(:page_size).should eq GroundPicture.max_page_size
578 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
579 get :ground_picture, :page_size => 0
580 assigns(:page_size).should eq GroundPicture.default_page_size
583 context 'つつがなく終わるとき' do
584 it 'ステータスコード200 OKを返す' do
586 response.should be_success
588 it 'コマの画像背景モデルに一覧を問い合わせている' do
589 GroundPicture.should_receive(:mylist).exactly(1)
592 it '@ground_picturesにリストを取得している' do
594 assigns(:ground_pictures).should have_at_least(3).items
597 it 'ground_pictureテンプレートを描画する' do
599 response.should render_template("ground_picture")
604 get :ground_picture, :format => :json
605 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
607 it 'コマの画像背景モデルにjson一覧出力オプションを問い合わせている' do
608 GroundPicture.should_receive(:list_json_opt).exactly(1)
609 get :ground_picture, :format => :json
611 it 'データがリスト構造になっている' do
612 get :ground_picture, :format => :json
613 json = JSON.parse response.body
614 json.should have_at_least(3).items
616 it 'リストの先頭くらいはコマの画像背景っぽいものであって欲しい' do
617 get :ground_picture, :format => :json
618 json = JSON.parse response.body
619 json.first.has_key?("panel_id").should be_true
620 json.first.has_key?("picture_id").should be_true
621 json.first.has_key?("z").should be_true
625 context '作家権限がないとき' do
630 it 'ステータスコード302 Foundを返す' do
632 response.status.should eq 302
634 it 'サインインページへ遷移する' do
636 response.should redirect_to '/users/sign_in'
640 it 'ステータスコード401 Unauthorizedを返す' do
641 get :ground_picture, :format => :json
642 response.status.should eq 401
644 it '応答メッセージにUnauthorizedを返す' do
645 get :ground_picture, :format => :json
646 response.message.should match(/Unauthorized/)
652 describe '自分の間接背景一覧表示に於いて' do
654 @gc = FactoryGirl.create :ground_color
656 GroundColor.stub(:mylist).and_return([@gc, @gc, @gc])
658 context 'パラメータpageについて' do
660 get :ground_color, :page => 5
661 assigns(:page).should eq 5
663 it '省略されると@pageに1値が入る' do
665 assigns(:page).should eq 1
667 it '与えられたpage_sizeがセットされている' do
668 get :ground_color, :page_size => 15
669 assigns(:page_size).should eq 15
671 it '省略されると@page_sizeにデフォルト値が入る' do
673 assigns(:page_size).should eq GroundColor.default_page_size
675 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
676 get :ground_color, :page_size => 1500
677 assigns(:page_size).should eq GroundColor.max_page_size
679 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
680 get :ground_color, :page_size => 0
681 assigns(:page_size).should eq GroundColor.default_page_size
684 context 'つつがなく終わるとき' do
685 it 'ステータスコード200 OKを返す' do
687 response.should be_success
689 it '間接背景モデルに一覧を問い合わせている' do
690 GroundColor.should_receive(:mylist).exactly(1)
693 it '@ground_colorsにリストを取得している' do
695 assigns(:ground_colors).should have_at_least(3).items
698 it 'ground_colorテンプレートを描画する' do
700 response.should render_template("ground_color")
705 get :ground_color, :format => :json
706 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
708 it '間接背景モデルにjson一覧出力オプションを問い合わせている' do
709 GroundColor.should_receive(:list_json_opt).exactly(1)
710 get :ground_color, :format => :json
712 it 'データがリスト構造になっている' do
713 get :ground_color, :format => :json
714 json = JSON.parse response.body
715 json.should have_at_least(3).items
717 it 'リストの先頭くらいは間接背景っぽいものであって欲しい' do
718 get :ground_color, :format => :json
719 json = JSON.parse response.body
720 json.first.has_key?("panel_id").should be_true
721 json.first.has_key?("color_id").should be_true
722 json.first.has_key?("z").should be_true
726 context '作家権限がないとき' do
731 it 'ステータスコード302 Foundを返す' do
733 response.status.should eq 302
735 it 'サインインページへ遷移する' do
737 response.should redirect_to '/users/sign_in'
741 it 'ステータスコード401 Unauthorizedを返す' do
742 get :ground_color, :format => :json
743 response.status.should eq 401
745 it '応答メッセージにUnauthorizedを返す' do
746 get :ground_color, :format => :json
747 response.message.should match(/Unauthorized/)