OSDN Git Service

add test
[pettanr/pettanr.git] / spec / controllers / panel_pictures_controller_spec.rb
1 # -*- encoding: utf-8 -*-
2 #コマ絵
3 require 'spec_helper'
4
5 describe PanelPicturesController do
6   before do
7     Factory :admin
8     @user = Factory( :user_yas)
9     @author = @user.author
10     @artist = Factory :artist_yas, :author_id => @author.id
11   end
12
13   describe '一覧表示に於いて' do
14     before do
15       @pp = Factory :panel_picture, :author_id => @author.id
16       sign_in @user
17       PanelPicture.stub(:list).and_return([@pp, @pp, @pp])
18     end
19     context 'パラメータpageについて' do
20       it '@pageに値が入る' do
21         get :index, :page => 5
22         assigns(:page).should eq 5
23       end
24       it '省略されると@pageに1値が入る' do
25         get :index
26         assigns(:page).should eq 1
27       end
28       it '与えられたpage_sizeがセットされている' do
29         get :index, :page_size => 15
30         assigns(:page_size).should eq 15
31       end
32       it '省略されると@page_sizeにデフォルト値が入る' do
33         get :index
34         assigns(:page_size).should eq PanelPicture.default_page_size
35       end
36       it '最大を超えると@page_sizeにデフォルト最大値が入る' do
37         get :index, :page_size => 1500
38         assigns(:page_size).should eq PanelPicture.max_page_size
39       end
40       it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
41         get :index, :page_size => 0
42         assigns(:page_size).should eq PanelPicture.default_page_size
43       end
44     end
45     context 'つつがなく終わるとき' do
46       it 'ステータスコード200 OKを返す' do
47         get :index
48         response.should be_success 
49       end
50       it 'コマ絵モデルに一覧を問い合わせている' do
51         PanelPicture.should_receive(:list).exactly(1)
52         get :index
53       end
54       it '@panel_picturesにリストを取得している' do
55         get :index
56         assigns(:panel_pictures).should have_at_least(3).items
57       end
58       context 'html形式' do
59         it 'indexテンプレートを描画する' do
60           get :index
61           response.should render_template("index")
62         end
63       end
64       context 'json形式' do
65         it 'jsonデータを返す' do
66           get :index, :format => :json
67           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
68         end
69         it 'データがリスト構造になっている' do
70           get :index, :format => :json
71           json = JSON.parse response.body
72           json.should have_at_least(3).items
73         end
74         it 'リストの先頭くらいはコマ絵っぽいものであって欲しい' do
75           get :index, :format => :json
76           json = JSON.parse response.body
77           json.first.has_key?("link").should be_true
78         end
79       end
80     end
81     context '作家権限がないとき' do
82       before do
83         sign_out @user
84       end
85       context 'html形式' do
86         it 'ステータスコード302 Foundを返す' do
87           get :index
88           response.status.should eq 302
89         end
90         it 'サインインページへ遷移する' do
91           get :index
92           response.should redirect_to '/users/sign_in'
93         end
94       end
95       context 'json形式' do
96         it 'ステータスコード401 Unauthorizedを返す' do
97           get :index, :format => :json
98           response.status.should eq 401
99         end
100         it '応答メッセージにUnauthorizedを返す' do
101           get :index, :format => :json
102           response.message.should match(/Unauthorized/)
103         end
104       end
105     end
106     context '作家が絵師でないとき' do
107       before do
108         Author.any_instance.stub(:artist?).and_return(false)
109       end
110       context 'html形式' do
111         it 'ステータスコード302 Foundを返す' do
112           get :index
113           response.status.should eq 302
114         end
115         it '絵師登録ページへ遷移する' do
116           get :index
117           response.should redirect_to new_artist_path
118         end
119       end
120       context 'json形式' do
121         it '例外403 forbiddenを返す' do
122           lambda{
123             get :index, :format => :json
124           }.should raise_error(ActiveRecord::Forbidden)
125         end
126       end
127     end
128   end
129   
130   describe 'コマ絵数取得に於いて' do
131     before do
132       PanelPicture.should_receive(:visible_count).and_return(3)
133 #      sign_in @user
134     end
135     context 'つつがなく終わるとき' do
136       it 'ステータスコード200 OKを返す' do
137         get :count, :format => :json
138         response.should be_success 
139       end
140       context 'json形式' do
141         it 'jsonデータを返す' do
142           get :count, :format => :json
143           lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
144         end
145         it 'データがHash構造になっていてコマ絵数が3である' do
146           get :count, :format => :json
147           json = JSON.parse response.body
148           json["count"].should == 3
149         end
150       end
151     end
152   end
153
154 end