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 @op = FactoryGirl.create :original_picture, :artist_id => @artist.id
15 @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id
16 @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id
17 @panel = FactoryGirl.create :panel, :author_id => @author.id
20 describe '自分のコミック一覧表示に於いて' do
22 @comic = FactoryGirl.create :comic, :author_id => @author.id
24 Comic.stub(:mylist).and_return([@comic, @comic, @comic])
26 context 'パラメータpageについて' do
28 get :comic, :page => 5
29 assigns(:page).should eq 5
31 it '省略されると@pageに1値が入る' do
33 assigns(:page).should eq 1
35 it '与えられたpage_sizeがセットされている' do
36 get :comic, :page_size => 15
37 assigns(:page_size).should eq 15
39 it '省略されると@page_sizeにデフォルト値が入る' do
41 assigns(:page_size).should eq Author.default_comic_page_size
43 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
44 get :comic, :page_size => 1500
45 assigns(:page_size).should eq Author.comic_max_page_size
47 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
48 get :comic, :page_size => 0
49 assigns(:page_size).should eq Author.default_comic_page_size
52 context 'つつがなく終わるとき' do
53 it 'ステータスコード200 OKを返す' do
55 response.should be_success
57 it 'コミックモデルに一覧を問い合わせている' do
58 Comic.should_receive(:mylist).exactly(1)
61 it '@comicsにリストを取得している' do
63 assigns(:comics).should have_at_least(3).items
66 it 'comicテンプレートを描画する' do
68 response.should render_template("comic")
73 get :comic, :format => :json
74 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
76 it 'データがリスト構造になっている' do
77 get :comic, :format => :json
78 json = JSON.parse response.body
79 json.should have_at_least(3).items
81 it 'リストの先頭くらいはコミックっぽいものであって欲しい' do
82 get :comic, :format => :json
83 json = JSON.parse response.body
84 json.first.has_key?("title").should be_true
88 context '作家権限がないとき' do
93 it 'ステータスコード302 Foundを返す' do
95 response.status.should eq 302
99 response.should redirect_to '/users/sign_in'
103 it 'ステータスコード401 Unauthorizedを返す' do
104 get :comic, :format => :json
105 response.status.should eq 401
107 it '応答メッセージにUnauthorizedを返す' do
108 get :comic, :format => :json
109 response.message.should match(/Unauthorized/)
115 describe '自分のコマ一覧表示に於いて' do
117 @panel = FactoryGirl.create :panel, :author_id => @author.id
119 Panel.stub(:mylist).and_return([@panel, @panel, @panel])
121 context 'パラメータpageについて' do
123 get :panel, :page => 5
124 assigns(:page).should eq 5
126 it '省略されると@pageに1値が入る' do
128 assigns(:page).should eq 1
130 it '与えられたpage_sizeがセットされている' do
131 get :panel, :page_size => 15
132 assigns(:page_size).should eq 15
134 it '省略されると@page_sizeにデフォルト値が入る' do
136 assigns(:page_size).should eq Author.default_panel_page_size
138 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
139 get :panel, :page_size => 1500
140 assigns(:page_size).should eq Author.panel_max_page_size
142 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
143 get :panel, :page_size => 0
144 assigns(:page_size).should eq Author.default_panel_page_size
147 context 'つつがなく終わるとき' do
148 it 'ステータスコード200 OKを返す' do
150 response.should be_success
152 it 'コマモデルに一覧を問い合わせている' do
153 Panel.should_receive(:mylist).exactly(1)
156 it '@panelsにリストを取得している' do
158 assigns(:panels).should have_at_least(3).items
161 it 'panelテンプレートを描画する' do
163 response.should render_template("panel")
168 get :panel, :format => :json
169 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
171 it 'データがリスト構造になっている' do
172 get :panel, :format => :json
173 json = JSON.parse response.body
174 json.should have_at_least(3).items
176 it 'リストの先頭くらいはコマっぽいものであって欲しい' do
177 get :panel, :format => :json
178 json = JSON.parse response.body
179 json.first.has_key?("z").should be_true
183 context '作家権限がないとき' do
188 it 'ステータスコード302 Foundを返す' do
190 response.status.should eq 302
192 it 'サインインページへ遷移する' do
194 response.should redirect_to '/users/sign_in'
198 it 'ステータスコード401 Unauthorizedを返す' do
199 get :panel, :format => :json
200 response.status.should eq 401
202 it '応答メッセージにUnauthorizedを返す' do
203 get :panel, :format => :json
204 response.message.should match(/Unauthorized/)
210 describe '自分のコマ絵一覧表示に於いて' do
212 @pp = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :picture_id => @p.id,
213 :width => @p.width, :height => @p.height
215 PanelPicture.stub(:mylist).and_return([@pp, @pp, @pp])
217 context 'パラメータpageについて' do
219 get :panel_picture, :page => 5
220 assigns(:page).should eq 5
222 it '省略されると@pageに1値が入る' do
224 assigns(:page).should eq 1
226 it '与えられたpage_sizeがセットされている' do
227 get :panel_picture, :page_size => 15
228 assigns(:page_size).should eq 15
230 it '省略されると@page_sizeにデフォルト値が入る' do
232 assigns(:page_size).should eq Author.default_panel_picture_page_size
234 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
235 get :panel_picture, :page_size => 1500
236 assigns(:page_size).should eq Author.panel_picture_max_page_size
238 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
239 get :panel_picture, :page_size => 0
240 assigns(:page_size).should eq Author.default_panel_picture_page_size
243 context 'つつがなく終わるとき' do
244 it 'ステータスコード200 OKを返す' do
246 response.should be_success
248 it 'コマ絵モデルに一覧を問い合わせている' do
249 PanelPicture.should_receive(:mylist).exactly(1)
252 it '@panel_picturesにリストを取得している' do
254 assigns(:panel_pictures).should have_at_least(3).items
257 it 'panel_pictureテンプレートを描画する' do
259 response.should render_template("panel_picture")
264 get :panel_picture, :format => :json
265 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
267 it 'データがリスト構造になっている' do
268 get :panel_picture, :format => :json
269 json = JSON.parse response.body
270 json.should have_at_least(3).items
272 it 'リストの先頭くらいはコマ絵っぽいものであって欲しい' do
273 get :panel_picture, :format => :json
274 json = JSON.parse response.body
275 json.first.has_key?("link").should be_true
279 context '作家権限がないとき' do
284 it 'ステータスコード302 Foundを返す' do
286 response.status.should eq 302
288 it 'サインインページへ遷移する' do
290 response.should redirect_to '/users/sign_in'
294 it 'ステータスコード401 Unauthorizedを返す' do
295 get :panel_picture, :format => :json
296 response.status.should eq 401
298 it '応答メッセージにUnauthorizedを返す' do
299 get :panel_picture, :format => :json
300 response.message.should match(/Unauthorized/)
306 describe '自分の原画一覧表示に於いて' do
309 OriginalPicture.stub(:list).and_return([@op, @op, @op])
311 context 'パラメータpageについて' do
313 get :picture, :page => 5
314 assigns(:page).should eq 5
316 it '省略されると@pageに1値が入る' do
318 assigns(:page).should eq 1
320 it '与えられたpage_sizeがセットされている' do
321 get :picture, :page_size => 15
322 assigns(:page_size).should eq 15
324 it '省略されると@page_sizeにデフォルト値が入る' do
326 assigns(:page_size).should eq OriginalPicture.default_page_size
328 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
329 get :picture, :page_size => 1500
330 assigns(:page_size).should eq OriginalPicture.max_page_size
332 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
333 get :picture, :page_size => 0
334 assigns(:page_size).should eq OriginalPicture.default_page_size
337 context 'つつがなく終わるとき' do
338 it 'ステータスコード200 OKを返す' do
340 response.should be_success
342 it '原画モデルに一覧を問い合わせている' do
343 #原画は他人が使えないので「自分の」リストはない
344 OriginalPicture.should_receive(:list).exactly(1)
347 it '@original_picturesにリストを取得している' do
349 assigns(:original_pictures).should have_at_least(3).items
352 it 'pictureテンプレートを描画する' do
354 response.should render_template("picture")
359 get :picture, :format => :json
360 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
362 it 'データがリスト構造になっている' do
363 get :picture, :format => :json
364 json = JSON.parse response.body
365 json.should have_at_least(3).items
367 it 'リストの先頭くらいは原画っぽいものであって欲しい' do
368 get :picture, :format => :json
369 json = JSON.parse response.body
370 json.first.has_key?("ext").should be_true
374 context '作家権限がないとき' do
379 it 'ステータスコード302 Foundを返す' do
381 response.status.should eq 302
383 it 'サインインページへ遷移する' do
385 response.should redirect_to '/users/sign_in'
389 it 'ステータスコード401 Unauthorizedを返す' do
390 get :picture, :format => :json
391 response.status.should eq 401
393 it '応答メッセージにUnauthorizedを返す' do
394 get :picture, :format => :json
395 response.message.should match(/Unauthorized/)
399 context '作家が絵師でないとき' do
401 Author.any_instance.stub(:artist?).and_return(false)
404 it 'ステータスコード302 Foundを返す' do
406 response.status.should eq 302
410 response.should redirect_to new_artist_path
414 it '例外403 forbiddenを返す' do
416 get :picture, :format => :json
417 }.should raise_error(ActiveRecord::Forbidden)