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 'ステータスコード200 OKを返す' do
156 response.should be_success
158 it 'コマモデルに一覧を問い合わせている' do
159 Panel.should_receive(:mylist).exactly(1)
162 it '@panelsにリストを取得している' do
164 assigns(:panels).should have_at_least(3).items
167 it 'panelテンプレートを描画する' do
169 response.should render_template("panel")
174 get :panel, :format => :json
175 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
177 it 'コマモデルにjson一覧出力オプションを問い合わせている' do
178 Panel.should_receive(:list_json_opt).exactly(1)
179 get :panel, :format => :json
181 it 'データがリスト構造になっている' do
182 get :panel, :format => :json
183 json = JSON.parse response.body
184 json.should have_at_least(3).items
186 it 'リストの先頭くらいはコマっぽいものであって欲しい' do
187 get :panel, :format => :json
188 json = JSON.parse response.body
189 json.first.has_key?("z").should be_true
193 context '作家権限がないとき' do
198 it 'ステータスコード302 Foundを返す' do
200 response.status.should eq 302
202 it 'サインインページへ遷移する' do
204 response.should redirect_to '/users/sign_in'
208 it 'ステータスコード401 Unauthorizedを返す' do
209 get :panel, :format => :json
210 response.status.should eq 401
212 it '応答メッセージにUnauthorizedを返す' do
213 get :panel, :format => :json
214 response.message.should match(/Unauthorized/)
220 describe '自分のコマ絵一覧表示に於いて' do
222 @pp = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :picture_id => @p.id,
223 :width => @p.width, :height => @p.height
225 PanelPicture.stub(:mylist).and_return([@pp, @pp, @pp])
227 context 'パラメータpageについて' do
229 get :panel_picture, :page => 5
230 assigns(:page).should eq 5
232 it '省略されると@pageに1値が入る' do
234 assigns(:page).should eq 1
236 it '与えられたpage_sizeがセットされている' do
237 get :panel_picture, :page_size => 15
238 assigns(:page_size).should eq 15
240 it '省略されると@page_sizeにデフォルト値が入る' do
242 assigns(:page_size).should eq Author.default_panel_picture_page_size
244 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
245 get :panel_picture, :page_size => 1500
246 assigns(:page_size).should eq Author.panel_picture_max_page_size
248 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
249 get :panel_picture, :page_size => 0
250 assigns(:page_size).should eq Author.default_panel_picture_page_size
253 context 'つつがなく終わるとき' do
254 it 'ステータスコード200 OKを返す' do
256 response.should be_success
258 it 'コマ絵モデルに一覧を問い合わせている' do
259 PanelPicture.should_receive(:mylist).exactly(1)
262 it '@panel_picturesにリストを取得している' do
264 assigns(:panel_pictures).should have_at_least(3).items
267 it 'panel_pictureテンプレートを描画する' do
269 response.should render_template("panel_picture")
274 get :panel_picture, :format => :json
275 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
277 it 'コマ絵モデルにjson一覧出力オプションを問い合わせている' do
278 PanelPicture.should_receive(:list_json_opt).exactly(1)
279 get :panel_picture, :format => :json
281 it 'データがリスト構造になっている' do
282 get :panel_picture, :format => :json
283 json = JSON.parse response.body
284 json.should have_at_least(3).items
286 it 'リストの先頭くらいはコマ絵っぽいものであって欲しい' do
287 get :panel_picture, :format => :json
288 json = JSON.parse response.body
289 json.first.has_key?("link").should be_true
290 json.first.has_key?("x").should be_true
291 json.first.has_key?("y").should be_true
295 context '作家権限がないとき' do
300 it 'ステータスコード302 Foundを返す' do
302 response.status.should eq 302
304 it 'サインインページへ遷移する' do
306 response.should redirect_to '/users/sign_in'
310 it 'ステータスコード401 Unauthorizedを返す' do
311 get :panel_picture, :format => :json
312 response.status.should eq 401
314 it '応答メッセージにUnauthorizedを返す' do
315 get :panel_picture, :format => :json
316 response.message.should match(/Unauthorized/)
322 describe '自分の原画一覧表示に於いて' do
325 OriginalPicture.stub(:mylist).and_return([@op, @op, @op])
327 context 'パラメータpageについて' do
329 get :picture, :page => 5
330 assigns(:page).should eq 5
332 it '省略されると@pageに1値が入る' do
334 assigns(:page).should eq 1
336 it '与えられたpage_sizeがセットされている' do
337 get :picture, :page_size => 15
338 assigns(:page_size).should eq 15
340 it '省略されると@page_sizeにデフォルト値が入る' do
342 assigns(:page_size).should eq OriginalPicture.default_page_size
344 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
345 get :picture, :page_size => 1500
346 assigns(:page_size).should eq OriginalPicture.max_page_size
348 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
349 get :picture, :page_size => 0
350 assigns(:page_size).should eq OriginalPicture.default_page_size
353 context 'つつがなく終わるとき' do
354 it 'ステータスコード200 OKを返す' do
356 response.should be_success
358 it '原画モデルに一覧を問い合わせている' do
359 #原画は他人が使えないので「自分の」リストはない
360 OriginalPicture.should_receive(:mylist).exactly(1)
363 it '@original_picturesにリストを取得している' do
365 assigns(:original_pictures).should have_at_least(3).items
368 it 'pictureテンプレートを描画する' do
370 response.should render_template("picture")
375 get :picture, :format => :json
376 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
378 it '原画モデルにjson一覧出力オプションを問い合わせている' do
379 OriginalPicture.should_receive(:list_json_opt).exactly(1)
380 get :picture, :format => :json
382 it 'データがリスト構造になっている' do
383 get :picture, :format => :json
384 json = JSON.parse response.body
385 json.should have_at_least(3).items
387 it 'リストの先頭くらいは原画っぽいものであって欲しい' do
388 get :picture, :format => :json
389 json = JSON.parse response.body
390 json.first.has_key?("ext").should be_true
391 json.first.has_key?("md5").should be_true
392 json.first.has_key?("artist_id").should be_true
393 json.first.has_key?("width").should be_true
397 context '作家権限がないとき' do
402 it 'ステータスコード302 Foundを返す' do
404 response.status.should eq 302
406 it 'サインインページへ遷移する' do
408 response.should redirect_to '/users/sign_in'
412 it 'ステータスコード401 Unauthorizedを返す' do
413 get :picture, :format => :json
414 response.status.should eq 401
416 it '応答メッセージにUnauthorizedを返す' do
417 get :picture, :format => :json
418 response.message.should match(/Unauthorized/)
422 context '作家が絵師でないとき' do
424 Author.any_instance.stub(:artist?).and_return(false)
427 it 'ステータスコード302 Foundを返す' do
429 response.status.should eq 302
433 response.should redirect_to new_artist_path
437 it '例外403 forbiddenを返す' do
439 get :picture, :format => :json
440 }.should raise_error(ActiveRecord::Forbidden)
446 describe '自分のコマの色背景一覧表示に於いて' do
448 @pc = FactoryGirl.create :panel_color, :panel_id => @panel.id
450 PanelColor.stub(:mylist).and_return([@pc, @pc, @pc])
452 context 'パラメータpageについて' do
454 get :panel_color, :page => 5
455 assigns(:page).should eq 5
457 it '省略されると@pageに1値が入る' do
459 assigns(:page).should eq 1
461 it '与えられたpage_sizeがセットされている' do
462 get :panel_color, :page_size => 15
463 assigns(:page_size).should eq 15
465 it '省略されると@page_sizeにデフォルト値が入る' do
467 assigns(:page_size).should eq PanelColor.default_page_size
469 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
470 get :panel_color, :page_size => 1500
471 assigns(:page_size).should eq PanelColor.max_page_size
473 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
474 get :panel_color, :page_size => 0
475 assigns(:page_size).should eq PanelColor.default_page_size
478 context 'つつがなく終わるとき' do
479 it 'ステータスコード200 OKを返す' do
481 response.should be_success
483 it 'コマの色背景モデルに一覧を問い合わせている' do
484 PanelColor.should_receive(:mylist).exactly(1)
487 it '@panel_colorsにリストを取得している' do
489 assigns(:panel_colors).should have_at_least(3).items
492 it 'panel_colorテンプレートを描画する' do
494 response.should render_template("panel_color")
499 get :panel_color, :format => :json
500 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
502 it 'コマの色背景モデルにjson一覧出力オプションを問い合わせている' do
503 PanelColor.should_receive(:list_json_opt).exactly(1)
504 get :panel_color, :format => :json
506 it 'データがリスト構造になっている' do
507 get :panel_color, :format => :json
508 json = JSON.parse response.body
509 json.should have_at_least(3).items
511 it 'リストの先頭くらいはコマの色背景っぽいものであって欲しい' do
512 get :panel_color, :format => :json
513 json = JSON.parse response.body
514 json.first.has_key?("panel_id").should be_true
515 json.first.has_key?("code").should be_true
516 json.first.has_key?("z").should be_true
520 context '作家権限がないとき' do
525 it 'ステータスコード302 Foundを返す' do
527 response.status.should eq 302
529 it 'サインインページへ遷移する' do
531 response.should redirect_to '/users/sign_in'
535 it 'ステータスコード401 Unauthorizedを返す' do
536 get :panel_color, :format => :json
537 response.status.should eq 401
539 it '応答メッセージにUnauthorizedを返す' do
540 get :panel_color, :format => :json
541 response.message.should match(/Unauthorized/)
547 describe '自分のコマの画像背景一覧表示に於いて' do
549 @gp = FactoryGirl.create :ground_picture, :panel_id => @panel.id, :picture_id => @p.id
551 GroundPicture.stub(:mylist).and_return([@gp, @gp, @gp])
553 context 'パラメータpageについて' do
555 get :ground_picture, :page => 5
556 assigns(:page).should eq 5
558 it '省略されると@pageに1値が入る' do
560 assigns(:page).should eq 1
562 it '与えられたpage_sizeがセットされている' do
563 get :ground_picture, :page_size => 15
564 assigns(:page_size).should eq 15
566 it '省略されると@page_sizeにデフォルト値が入る' do
568 assigns(:page_size).should eq GroundPicture.default_page_size
570 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
571 get :ground_picture, :page_size => 1500
572 assigns(:page_size).should eq GroundPicture.max_page_size
574 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
575 get :ground_picture, :page_size => 0
576 assigns(:page_size).should eq GroundPicture.default_page_size
579 context 'つつがなく終わるとき' do
580 it 'ステータスコード200 OKを返す' do
582 response.should be_success
584 it 'コマの画像背景モデルに一覧を問い合わせている' do
585 GroundPicture.should_receive(:mylist).exactly(1)
588 it '@ground_picturesにリストを取得している' do
590 assigns(:ground_pictures).should have_at_least(3).items
593 it 'ground_pictureテンプレートを描画する' do
595 response.should render_template("ground_picture")
600 get :ground_picture, :format => :json
601 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
603 it 'コマの画像背景モデルにjson一覧出力オプションを問い合わせている' do
604 GroundPicture.should_receive(:list_json_opt).exactly(1)
605 get :ground_picture, :format => :json
607 it 'データがリスト構造になっている' do
608 get :ground_picture, :format => :json
609 json = JSON.parse response.body
610 json.should have_at_least(3).items
612 it 'リストの先頭くらいはコマの画像背景っぽいものであって欲しい' do
613 get :ground_picture, :format => :json
614 json = JSON.parse response.body
615 json.first.has_key?("panel_id").should be_true
616 json.first.has_key?("picture_id").should be_true
617 json.first.has_key?("z").should be_true
621 context '作家権限がないとき' do
626 it 'ステータスコード302 Foundを返す' do
628 response.status.should eq 302
630 it 'サインインページへ遷移する' do
632 response.should redirect_to '/users/sign_in'
636 it 'ステータスコード401 Unauthorizedを返す' do
637 get :ground_picture, :format => :json
638 response.status.should eq 401
640 it '応答メッセージにUnauthorizedを返す' do
641 get :ground_picture, :format => :json
642 response.message.should match(/Unauthorized/)
648 describe '自分の間接背景一覧表示に於いて' do
650 @gc = FactoryGirl.create :ground_color
652 GroundColor.stub(:mylist).and_return([@gc, @gc, @gc])
654 context 'パラメータpageについて' do
656 get :ground_color, :page => 5
657 assigns(:page).should eq 5
659 it '省略されると@pageに1値が入る' do
661 assigns(:page).should eq 1
663 it '与えられたpage_sizeがセットされている' do
664 get :ground_color, :page_size => 15
665 assigns(:page_size).should eq 15
667 it '省略されると@page_sizeにデフォルト値が入る' do
669 assigns(:page_size).should eq GroundColor.default_page_size
671 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
672 get :ground_color, :page_size => 1500
673 assigns(:page_size).should eq GroundColor.max_page_size
675 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
676 get :ground_color, :page_size => 0
677 assigns(:page_size).should eq GroundColor.default_page_size
680 context 'つつがなく終わるとき' do
681 it 'ステータスコード200 OKを返す' do
683 response.should be_success
685 it '間接背景モデルに一覧を問い合わせている' do
686 GroundColor.should_receive(:mylist).exactly(1)
689 it '@ground_colorsにリストを取得している' do
691 assigns(:ground_colors).should have_at_least(3).items
694 it 'ground_colorテンプレートを描画する' do
696 response.should render_template("ground_color")
701 get :ground_color, :format => :json
702 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
704 it '間接背景モデルにjson一覧出力オプションを問い合わせている' do
705 GroundColor.should_receive(:list_json_opt).exactly(1)
706 get :ground_color, :format => :json
708 it 'データがリスト構造になっている' do
709 get :ground_color, :format => :json
710 json = JSON.parse response.body
711 json.should have_at_least(3).items
713 it 'リストの先頭くらいは間接背景っぽいものであって欲しい' do
714 get :ground_color, :format => :json
715 json = JSON.parse response.body
716 json.first.has_key?("panel_id").should be_true
717 json.first.has_key?("color_id").should be_true
718 json.first.has_key?("z").should be_true
722 context '作家権限がないとき' do
727 it 'ステータスコード302 Foundを返す' do
729 response.status.should eq 302
731 it 'サインインページへ遷移する' do
733 response.should redirect_to '/users/sign_in'
737 it 'ステータスコード401 Unauthorizedを返す' do
738 get :ground_color, :format => :json
739 response.status.should eq 401
741 it '応答メッセージにUnauthorizedを返す' do
742 get :ground_color, :format => :json
743 response.message.should match(/Unauthorized/)