1 # -*- encoding: utf-8 -*-
5 describe PanelPicturesController do
8 @user = Factory( :user_yas)
10 @artist = Factory :artist_yas, :author_id => @author.id
13 describe '一覧表示に於いて' do
15 @pp = Factory :panel_picture, :author_id => @author.id
17 PanelPicture.stub(:list).and_return([@pp, @pp, @pp])
19 context 'パラメータpageについて' do
21 get :index, :page => 5
22 assigns(:page).should eq 5
24 it '省略されると@pageに1値が入る' do
26 assigns(:page).should eq 1
28 it '与えられたpage_sizeがセットされている' do
29 get :index, :page_size => 15
30 assigns(:page_size).should eq 15
32 it '省略されると@page_sizeにデフォルト値が入る' do
34 assigns(:page_size).should eq PanelPicture.default_page_size
36 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
37 get :index, :page_size => 1500
38 assigns(:page_size).should eq PanelPicture.max_page_size
40 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
41 get :index, :page_size => 0
42 assigns(:page_size).should eq PanelPicture.default_page_size
45 context 'つつがなく終わるとき' do
46 it 'ステータスコード200 OKを返す' do
48 response.should be_success
50 it 'コマ絵モデルに一覧を問い合わせている' do
51 PanelPicture.should_receive(:list).exactly(1)
54 it '@panel_picturesにリストを取得している' do
56 assigns(:panel_pictures).should have_at_least(3).items
59 it 'indexテンプレートを描画する' do
61 response.should render_template("index")
66 get :index, :format => :json
67 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
69 it 'データがリスト構造になっている' do
70 get :index, :format => :json
71 json = JSON.parse response.body
72 json.should have_at_least(3).items
74 it 'リストの先頭くらいはコマ絵っぽいものであって欲しい' do
75 get :index, :format => :json
76 json = JSON.parse response.body
77 json.first.has_key?("link").should be_true
81 context '作家権限がないとき' do
86 it 'ステータスコード302 Foundを返す' do
88 response.status.should eq 302
92 response.should redirect_to '/users/sign_in'
96 it 'ステータスコード401 Unauthorizedを返す' do
97 get :index, :format => :json
98 response.status.should eq 401
100 it '応答メッセージにUnauthorizedを返す' do
101 get :index, :format => :json
102 response.message.should match(/Unauthorized/)
106 context '作家が絵師でないとき' do
108 Author.any_instance.stub(:artist?).and_return(false)
111 it 'ステータスコード302 Foundを返す' do
113 response.status.should eq 302
117 response.should redirect_to new_artist_path
121 it '例外403 forbiddenを返す' do
123 get :index, :format => :json
124 }.should raise_error(ActiveRecord::Forbidden)
130 describe 'コマ絵数取得に於いて' do
132 PanelPicture.should_receive(:visible_count).and_return(3)
135 context 'つつがなく終わるとき' do
136 it 'ステータスコード200 OKを返す' do
137 get :count, :format => :json
138 response.should be_success
142 get :count, :format => :json
143 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
145 it 'データがHash構造になっていてコマ絵数が3である' do
146 get :count, :format => :json
147 json = JSON.parse response.body
148 json["count"].should == 3