1 # -*- encoding: utf-8 -*-
5 describe AuthorsController do
8 @user = Factory( :user_yas)
10 @artist = Factory :artist_yas, :author_id => @author.id
13 describe '一覧表示に於いて' do
15 Author.stub(:list).and_return([@author, @author, @author])
19 it '与えられたpageがセットされている' do
20 get :index, :page => 5
21 assigns(:page).should eq 5
23 it '省略されると@pageに1値が入る' do
25 assigns(:page).should eq 1
27 it '与えられたpage_sizeがセットされている' do
28 get :index, :page_size => 15
29 assigns(:page_size).should eq 15
31 it '省略されると@page_sizeにデフォルト値が入る' do
33 assigns(:page_size).should eq Author.default_page_size
35 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
36 get :index, :page_size => 1500
37 assigns(:page_size).should eq Author.max_page_size
39 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
40 get :index, :page_size => 0
41 assigns(:page_size).should eq Author.default_page_size
44 context 'つつがなく終わるとき' do
45 it 'ステータスコード200 OKを返す' do
47 response.should be_success
49 it '作家モデルに一覧を問い合わせている' do
50 Author.should_receive(:list).exactly(1)
53 it '@authorsにリストを取得している' do
55 assigns(:authors).should have_at_least(3).items
58 it 'indexテンプレートを描画する' do
60 response.should render_template("index")
65 get :index, :format => :json
66 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
68 it 'データがリスト構造になっている' do
69 get :index, :format => :json
70 json = JSON.parse response.body
71 json.should have_at_least(3).items
73 it 'リストの先頭くらいは作家っぽいものであって欲しい' do
74 get :index, :format => :json
75 json = JSON.parse response.body
76 json.first.has_key?("name").should be_true
80 context '作家権限がないとき' do
85 it 'ステータスコード302 Foundを返す' do
87 response.status.should eq 302
91 response.should redirect_to '/users/sign_in'
95 it 'ステータスコード401 Unauthorizedを返す' do
96 get :index, :format => :json
97 response.status.should eq 401
99 it '応答メッセージにUnauthorizedを返す' do
100 get :index, :format => :json
101 response.message.should match(/Unauthorized/)
109 Author.stub(:show).and_return(@author)
112 context 'つつがなく終わるとき' do
113 it 'ステータスコード200 OKを返す' do
114 get :show, :id => @author.id
115 response.should be_success
117 it '作家モデルに単体取得を問い合わせている' do
118 Author.should_receive(:show).exactly(1)
121 it '@authorにアレを取得している' do
122 get :show, :id => @author.id
123 assigns(:author).should eq(@author)
126 it 'showテンプレートを描画する' do
127 get :show, :id => @author.id
128 response.should render_template("show")
133 get :show, :id => @author.id, :format => :json
134 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
137 get :show, :id => @author.id, :format => :json
138 json = JSON.parse response.body
139 json["name"].should match(/yas/)
143 context '作家権限がないとき' do
148 it 'ステータスコード302 Foundを返す' do
149 get :show, :id => @author.id
150 response.status.should eq 302
152 it 'サインインページへ遷移する' do
153 get :show, :id => @author.id
154 response.body.should redirect_to '/users/sign_in'
158 it 'ステータスコード401 Unauthorizedを返す' do
159 get :show, :id => @author.id, :format => :json
160 response.status.should eq 401
162 it '応答メッセージにUnauthorizedを返す' do
163 get :show, :id => @author.id, :format => :json
164 response.message.should match(/Unauthorized/)
169 context '対象作家がないとき' do
171 it '例外404 not_foundを返す' do
174 }.should raise_error(ActiveRecord::RecordNotFound)
178 it '例外404 not_foundを返す' do
180 get :show, :id => 0, :format => :json
181 }.should raise_error(ActiveRecord::RecordNotFound)
188 describe '作家数取得に於いて' do
190 Author.should_receive(:visible_count).and_return(3)
193 context 'つつがなく終わるとき' do
194 it 'ステータスコード200 OKを返す' do
195 get :count, :format => :json
196 response.should be_success
200 get :count, :format => :json
201 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
203 it 'データがHash構造になっていてコミック数が1である' do
204 get :count, :format => :json
205 json = JSON.parse response.body
206 json["count"].should == 3
212 describe 'コミック一覧表示に於いて' do
213 #指定作家のコミックpage_size件を一覧形式で表示する。ただし、作者によって非公開にされたコミックは含まない。
215 @comic = Factory :normal_comic, :author_id => @author.id
216 Comic.stub(:list_by_author).and_return([@comic, @comic, @comic])
219 context '事前チェックする' do
220 it '与えられたpageがセットされている' do
221 get :comics, :id => @author.id, :page => 5
222 assigns(:page).should eq 5
224 it '省略されると@pageに1値が入る' do
225 get :comics, :id => @author.id
226 assigns(:page).should eq 1
228 it '与えられたpage_sizeがセットされている' do
229 get :comics, :id => @author.id, :page_size => 15
230 assigns(:page_size).should eq 15
232 it '省略されると@page_sizeにデフォルト値が入る' do
233 get :comics, :id => @author.id
234 assigns(:page_size).should eq Author.default_page_size
236 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
237 get :comics, :id => @author.id, :page_size => 1500
238 assigns(:page_size).should eq Author.max_page_size
240 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
241 get :comics, :id => @author.id, :page_size => 0
242 assigns(:page_size).should eq Author.default_page_size
245 context 'つつがなく終わるとき' do
246 it 'ステータスコード200 OKを返す' do
247 get :comics, :id => @author.id
248 response.should be_success
250 it 'コミックモデルに一覧を問い合わせている' do
251 Comic.should_receive(:list_by_author).exactly(1)
252 get :comics, :id => @author.id
254 it '@comicsにリストを取得している' do
255 get :comics, :id => @author.id
256 assigns(:comics).should have_at_least(3).items
259 it 'comicsテンプレートを描画する' do
260 get :comics, :id => @author.id
261 response.should render_template("comics")
266 get :comics, :id => @author.id, :format => :json
267 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
269 it 'データがリスト構造になっている' do
270 get :comics, :id => @author.id, :format => :json
271 json = JSON.parse response.body
272 json.should have_at_least(3).items
274 it 'リストの先頭くらいはコミックっぽいものであって欲しい' do
275 get :comics, :id => @author.id, :format => :json
276 json = JSON.parse response.body
277 json.first.has_key?("title").should be_true
281 context '作家権限がないとき' do
286 it 'ステータスコード302 Foundを返す' do
287 get :comics, :id => @author.id
288 response.status.should eq 302
290 it 'サインインページへ遷移する' do
291 get :comics, :id => @author.id
292 response.should redirect_to '/users/sign_in'
296 it 'ステータスコード401 Unauthorizedを返す' do
297 get :comics, :id => @author.id, :format => :json
298 response.status.should eq 401
300 it '応答メッセージにUnauthorizedを返す' do
301 get :comics, :id => @author.id, :format => :json
302 response.message.should match(/Unauthorized/)
308 describe 'コマ一覧表示に於いて' do
309 #指定作家のコマpage_size件を一覧形式で表示する。ただし、作者によって非公開にされたコミックのコマは含まない。
311 @comic = Factory :normal_comic, :author_id => @author.id
312 @panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id
313 Panel.stub(:list_by_author).and_return([@panel, @panel, @panel])
316 context '事前チェックする' do
317 it '与えられたpageがセットされている' do
318 get :panels, :id => @author.id, :page => 5
319 assigns(:page).should eq 5
321 it '省略されると@pageに1値が入る' do
322 get :panels, :id => @author.id
323 assigns(:page).should eq 1
325 it '与えられたpage_sizeがセットされている' do
326 get :panels, :id => @author.id, :page_size => 15
327 assigns(:page_size).should eq 15
329 it '省略されると@page_sizeにデフォルト値が入る' do
330 get :panels, :id => @author.id
331 assigns(:page_size).should eq Author.default_page_size
333 it '最大を超えると@page_sizeにデフォルト最大値が入る' do
334 get :panels, :id => @author.id, :page_size => 1500
335 assigns(:page_size).should eq Author.max_page_size
337 it '不正な値が入ると@page_sizeにデフォルト最大値が入る' do
338 get :panels, :id => @author.id, :page_size => 0
339 assigns(:page_size).should eq Author.default_page_size
342 context 'つつがなく終わるとき' do
343 it 'ステータスコード200 OKを返す' do
344 get :panels, :id => @author.id
345 response.should be_success
347 it 'コマモデルに一覧を問い合わせている' do
348 Panel.should_receive(:list_by_author).exactly(1)
349 get :panels, :id => @author.id
351 it '@panelsにリストを取得している' do
352 get :panels, :id => @author.id
353 assigns(:panels).should have_at_least(3).items
356 it 'panelsテンプレートを描画する' do
357 get :panels, :id => @author.id
358 response.should render_template("panels")
363 get :panels, :id => @author.id, :format => :json
364 lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
366 it 'データがリスト構造になっている' do
367 get :panels, :id => @author.id, :format => :json
368 json = JSON.parse response.body
369 json.should have_at_least(3).items
371 it 'リストの先頭くらいはコマっぽいものであって欲しい' do
372 get :panels, :id => @author.id, :format => :json
373 json = JSON.parse response.body
374 json.first.has_key?("link").should be_true
378 context '作家権限がないとき' do
383 it 'ステータスコード302 Foundを返す' do
384 get :panels, :id => @author.id
385 response.status.should eq 302
387 it 'サインインページへ遷移する' do
388 get :panels, :id => @author.id
389 response.should redirect_to '/users/sign_in'
393 it 'ステータスコード401 Unauthorizedを返す' do
394 get :panels, :id => @author.id, :format => :json
395 response.status.should eq 401
397 it '応答メッセージにUnauthorizedを返す' do
398 get :panels, :id => @author.id, :format => :json
399 response.message.should match(/Unauthorized/)