1 # -*- encoding: utf-8 -*-
\r
7 @license = Factory :license
8 @user = Factory( :user_yas)
10 @artist = Factory :artist_yas, :author_id => @author.id
\r
11 @other_user = Factory( :user_yas)
12 @other_author = @other_user.author
13 @other_artist = Factory :artist_yas, :author_id => @other_author.id
19 @comic = Factory :comic, :author_id => @author.id
22 it 'オーソドックスなデータなら通る' do
23 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
24 @panel.should be_valid
27 context 'comic_idを検証するとき' do
29 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => nil
32 @panel.comic_id = @comic.id
33 @panel.should be_valid
37 @panel.should_not be_valid
41 @panel.should_not be_valid
43 it '存在するコミックでなければ失敗する' do
45 @panel.should_not be_valid
47 it 'コミックidとtが重複していると失敗する' do
49 @panel2 = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
50 @panel2.should_not be_valid
53 context 'resource_picture_idを検証するとき' do
55 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
58 @panel.resource_picture_id = 1
59 @panel.should be_valid
62 @panel.resource_picture_id = nil
63 @panel.should be_valid
66 @panel.resource_picture_id = 'a'
67 @panel.should_not be_valid
69 it '存在する素材でなければ失敗する' do
70 @panel.resource_picture_id = 0
71 @panel.should_not be_valid
74 context 'widthを検証するとき' do
76 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
80 @panel.should be_valid
84 @panel.should_not be_valid
88 @panel.should_not be_valid
92 @panel.should_not be_valid
96 @panel.should_not be_valid
99 context 'heightを検証するとき' do
101 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
105 @panel.should be_valid
109 @panel.should_not be_valid
113 @panel.should_not be_valid
117 @panel.should_not be_valid
121 @panel.should_not be_valid
124 context 'borderを検証するとき' do
126 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
130 @panel.should be_valid
134 @panel.should_not be_valid
138 @panel.should_not be_valid
142 @panel.should_not be_valid
146 @panel.should be_valid
149 context 'xを検証するとき' do
151 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
155 @panel.should be_valid
159 @panel.should_not be_valid
163 @panel.should be_valid
167 @panel.should be_valid
170 context 'yを検証するとき' do
172 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
176 @panel.should be_valid
180 @panel.should_not be_valid
184 @panel.should be_valid
188 @panel.should be_valid
191 context 'zを検証するとき' do
193 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
197 @panel.should be_valid
201 @panel.should_not be_valid
205 @panel.should_not be_valid
209 @panel.should_not be_valid
212 context 'tを検証するとき' do
214 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
218 @panel.should be_valid
222 @panel.should_not be_valid
226 @panel.should be_valid
230 @panel.should_not be_valid
233 context 'author_idを検証するとき' do
235 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
238 @panel.author_id = @author.id
239 @panel.should be_valid
242 @panel.author_id = nil
243 @panel.should_not be_valid
246 @panel.author_id = 'a'
247 @panel.should_not be_valid
249 it '存在する絵師でなければ失敗する' do
251 @panel.should_not be_valid
254 context '全体を検証するとき' do
256 @panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id
261 describe 'データ補充に於いて' do
263 @comic = Factory :comic, :author_id => @author.id
264 @panel = Factory.build :panel, :comic_id => @comic.id
266 context 'widthを補充' do
267 it '空の時はコミックから補充する' do
\r
269 @panel.supply_default @author
\r
270 @panel.width.should eq @comic.width
272 it '空の時でもコミックが不在なら補充しない' do
\r
274 @panel.comic_id = nil
275 @panel.supply_default @author
\r
276 @panel.width.should be_nil
281 @panel.supply_default @author
\r
282 }.should_not change @panel, :width
285 context 'heightを補充' do
286 it '空の時はコミックから補充する' do
288 @panel.supply_default @author
\r
289 @panel.height.should eq @comic.height
291 it '空の時でもコミックが不在なら補充しない' do
\r
293 @panel.comic_id = nil
294 @panel.supply_default @author
\r
295 @panel.height.should be_nil
300 @panel.supply_default @author
\r
301 }.should_not change @panel, :height
304 context 'borderを補充' do
307 @panel.supply_default @author
\r
308 @panel.border.should eq 0
313 @panel.supply_default @author
\r
314 }.should_not change @panel, :border
318 it '空の時はコミック内のtの最大値+1を補充する' do
319 pl = Factory :panel, :author_id => @author.id, :comic_id => @comic.id, :t => 0
\r
321 @panel.supply_default @author
\r
324 it '空でコミック初のコマなら0を補充する' do
326 @panel.supply_default @author
\r
329 it '空の時でも更新ケースなら補充しない' do
330 pl = Factory :panel, :author_id => @author.id, :comic_id => @comic.id, :t => 1
\r
333 pl.supply_default @author
\r
334 }.should_not change pl, :t
339 @panel.supply_default @author
\r
340 }.should_not change @panel, :t
343 context 'author_idを補充' do
344 it 'ログイン中の作家idを補充する' do
345 @panel.author_id = nil
346 @panel.supply_default @author
\r
347 @panel.author_id.should eq @author.id
353 describe '作者判定に於いて' do
355 @comic = Factory :comic, :author_id => @author.id
358 panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id
359 panel.own?(@author).should == true
362 panel = Factory :panel, :author_id => @other_author.id, :comic_id => @comic.id
363 panel.own?(@author).should == false
366 panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id
367 panel.own?(nil).should == false
370 describe '閲覧許可に於いて' do
372 @comic = Factory :comic, :author_id => @author.id
374 it '自作の公開コミックのコマを見るときは許可する' do
375 Comic.any_instance.stub(:visible?).and_return(true)
376 panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id
377 panel.visible?(@author).should == true
379 it '自作のコマは非公開コミックでも許可する' do
380 Comic.any_instance.stub(:visible?).and_return(false)
381 panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id
382 panel.visible?(@author).should == true
384 it '他人のコマでも公開コミックなら許可する' do
385 Comic.any_instance.stub(:visible?).and_return(true)
386 panel = Factory :panel, :author_id => @other_author.id, :comic_id => @comic.id
387 panel.visible?(@author).should == true
389 it '他人のコマで非公開コミックなら許可しない' do
390 Comic.any_instance.stub(:visible?).and_return(false)
391 panel = Factory :panel, :author_id => @other_author.id, :comic_id => @comic.id
392 panel.visible?(@author).should == false
395 describe '単体取得に於いて' do
397 @comic = Factory :comic, :author_id => @author.id
398 @panel = Factory :panel, :comic_id => @comic.id, :author_id => @author.id
401 Comic.any_instance.stub(:visible?).and_return(true)
402 pl = Panel.show @panel.id, @author
405 context '他人の非公開コミックのコマを開こうとしたとき' do
406 it '403Forbidden例外を返す' do
407 Panel.any_instance.stub(:visible?).and_return(false)
409 Panel.show @panel.id, @author
410 }.should raise_error(ActiveRecord::Forbidden)
413 context '存在しないコマを開こうとしたとき' do
414 it '404RecordNotFound例外を返す' do
416 Panel.show 110, @author
417 }.should raise_error(ActiveRecord::RecordNotFound)
421 describe '関連テーブルプションに於いて' do
422 context 'オプションがないとき' do
424 r = Panel.show_include_opt
425 r.should have(4).items
\r
428 r = Panel.show_include_opt
429 r.has_key?(:comic).should be_true
\r
432 r = Panel.show_include_opt
433 r.has_key?(:panel_pictures).should be_true
\r
436 r = Panel.show_include_opt
437 r[:panel_pictures].has_key?(:resource_picture).should be_true
\r
440 r = Panel.show_include_opt
441 r[:panel_pictures][:resource_picture].has_key?(:artist).should be_true
\r
443 it '素材はライセンスを含んでいる' do
444 r = Panel.show_include_opt
445 r[:panel_pictures][:resource_picture].has_key?(:license).should be_true
\r
448 r = Panel.show_include_opt
449 r.has_key?(:balloons).should be_true
\r
451 it 'フキダシはセリフを含んでいる' do
452 r = Panel.show_include_opt
453 r[:balloons].has_key?(:speeches).should be_true
\r
456 r = Panel.show_include_opt
457 r.has_key?(:author).should be_true
\r
460 context 'オプションで原画を含ませたとき' do
462 r = Panel.show_include_opt(:include => {:test => {}})
463 r.should have(5).items
\r
466 r = Panel.show_include_opt(:include => {:test => {}})
467 r.has_key?(:test).should be_true
\r
471 describe 'json単体出力オプションに於いて' do
472 it 'includeキーを含んでいる' do
473 r = Panel.show_json_include_opt
474 r.has_key?(:include).should be_true
477 r = Panel.show_json_include_opt[:include]
478 r.should have(4).items
\r
481 r = Panel.show_json_include_opt[:include]
482 r.has_key?(:comic).should be_true
\r
485 r = Panel.show_json_include_opt[:include]
486 r.has_key?(:panel_pictures).should be_true
\r
489 r = Panel.show_json_include_opt[:include]
490 r[:panel_pictures].has_key?(:resource_picture).should be_true
\r
493 r = Panel.show_json_include_opt[:include]
494 r[:panel_pictures][:resource_picture].has_key?(:artist).should be_true
\r
496 it '素材はライセンスを含んでいる' do
497 r = Panel.show_json_include_opt[:include]
498 r[:panel_pictures][:resource_picture].has_key?(:license).should be_true
\r
501 r = Panel.show_json_include_opt[:include]
502 r.has_key?(:balloons).should be_true
\r
504 it 'フキダシはセリフを含んでいる' do
505 r = Panel.show_json_include_opt[:include]
506 r[:balloons].has_key?(:speeches).should be_true
\r
509 r = Panel.show_json_include_opt[:include]
510 r.has_key?(:author).should be_true
\r
513 describe '一覧取得に於いて' do
515 @comic = Factory :comic, :author_id => @author.id
516 @panel = Factory :panel, :comic_id => @comic.id, :author_id => @author.id
518 context 'page補正について' do
519 it '文字列から数値に変換される' do
520 Panel.page('8').should eq 8
523 Panel.page().should eq 1
526 Panel.page('0').should eq 1
529 context 'page_size補正について' do
530 it '文字列から数値に変換される' do
531 Panel.page_size('7').should eq 7
533 it 'nilの場合はPanel.default_page_sizeになる' do
534 Panel.page_size().should eq Panel.default_page_size
536 it '0以下の場合はPanel.default_page_sizeになる' do
537 Panel.page_size('0').should eq Panel.default_page_size
539 it 'Panel.max_page_sizeを超えた場合はPanel.max_page_sizeになる' do
540 Panel.page_size('1000').should eq Panel.max_page_size
545 pl.should eq [@panel]
548 npl = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 1
550 pl.should eq [npl, @panel]
552 context 'DBに5件あって1ページの件数を2件に変えたとして' do
554 @npl2 = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 1
555 @npl3 = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 2
556 @npl4 = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 3
557 @npl5 = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 4
558 Panel.stub(:default_page_size).and_return(2)
562 pl.should have(2).items
564 it 'page=1なら末尾2件を返す' do
566 pl = Panel.list( {}, 1)
567 pl.should eq [@npl5, @npl4]
569 it 'page=2なら中間2件を返す' do
570 pl = Panel.list({}, 2)
571 pl.should eq [@npl3, @npl2]
573 it 'page=3なら先頭1件を返す' do
574 pl = Panel.list({}, 3)
575 pl.should eq [@panel]
579 describe 'list関連テーブルプションに於いて' do
580 it 'includeキーを含んでいる' do
582 r.has_key?(:include).should be_true
585 r = Panel.list_opt[:include]
586 r.should have(4).items
\r
589 r = Panel.list_opt[:include]
590 r.has_key?(:comic).should be_true
\r
593 r = Panel.list_opt[:include]
594 r.has_key?(:panel_pictures).should be_true
\r
597 r = Panel.list_opt[:include]
598 r[:panel_pictures].has_key?(:resource_picture).should be_true
\r
601 r = Panel.list_opt[:include]
602 r[:panel_pictures][:resource_picture].has_key?(:artist).should be_true
\r
604 it '素材はライセンスを含んでいる' do
605 r = Panel.list_opt[:include]
606 r[:panel_pictures][:resource_picture].has_key?(:license).should be_true
\r
609 r = Panel.list_opt[:include]
610 r.has_key?(:balloons).should be_true
\r
612 it 'フキダシはセリフを含んでいる' do
613 r = Panel.list_opt[:include]
614 r[:balloons].has_key?(:speeches).should be_true
\r
617 r = Panel.list_opt[:include]
618 r.has_key?(:author).should be_true
\r
621 describe 'json一覧出力オプションに於いて' do
622 it 'includeキーを含んでいる' do
623 r = Panel.list_json_opt
624 r.has_key?(:include).should be_true
627 r = Panel.list_json_opt[:include]
628 r.should have(4).items
\r
631 r = Panel.list_json_opt[:include]
632 r.has_key?(:comic).should be_true
\r
635 r = Panel.list_json_opt[:include]
636 r.has_key?(:panel_pictures).should be_true
\r
639 r = Panel.list_json_opt[:include]
640 r[:panel_pictures].has_key?(:resource_picture).should be_true
\r
643 r = Panel.list_json_opt[:include]
644 r[:panel_pictures][:resource_picture].has_key?(:artist).should be_true
\r
646 it '素材はライセンスを含んでいる' do
647 r = Panel.list_json_opt[:include]
648 r[:panel_pictures][:resource_picture].has_key?(:license).should be_true
\r
651 r = Panel.list_json_opt[:include]
652 r.has_key?(:balloons).should be_true
\r
654 it 'フキダシはセリフを含んでいる' do
655 r = Panel.list_json_opt[:include]
656 r[:balloons].has_key?(:speeches).should be_true
\r
659 r = Panel.list_json_opt[:include]
660 r.has_key?(:author).should be_true
\r