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
14 @op = Factory :original_picture, :artist_id => @artist.id, :license_id => @license.id
\r
15 @rp = Factory :resource_picture, :original_picture_id => @op.id, :license_id => @license.id
20 @comic = Factory :comic, :author_id => @author.id
23 it 'オーソドックスなデータなら通る' do
24 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
25 @panel.should be_valid
28 context 'comic_idを検証するとき' do
30 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => nil
33 @panel.comic_id = @comic.id
34 @panel.should be_valid
38 @panel.should_not be_valid
42 @panel.should_not be_valid
44 it '存在するコミックでなければ失敗する' do
46 @panel.should_not be_valid
48 it 'コミックidとtが重複していると失敗する' do
50 @panel2 = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
51 @panel2.should_not be_valid
54 context 'resource_picture_idを検証するとき' do
56 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
59 @panel.resource_picture_id = @rp.id
60 @panel.should be_valid
63 @panel.resource_picture_id = nil
64 @panel.should be_valid
67 @panel.resource_picture_id = 'a'
68 @panel.should_not be_valid
71 context 'widthを検証するとき' do
73 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
77 @panel.should be_valid
81 @panel.should_not be_valid
85 @panel.should_not be_valid
89 @panel.should_not be_valid
93 @panel.should_not be_valid
96 context 'heightを検証するとき' do
98 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
102 @panel.should be_valid
106 @panel.should_not be_valid
110 @panel.should_not be_valid
114 @panel.should_not be_valid
118 @panel.should_not be_valid
121 context 'borderを検証するとき' do
123 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
127 @panel.should be_valid
131 @panel.should_not be_valid
135 @panel.should_not be_valid
139 @panel.should_not be_valid
143 @panel.should be_valid
146 context 'xを検証するとき' do
148 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
152 @panel.should be_valid
156 @panel.should_not be_valid
160 @panel.should be_valid
164 @panel.should be_valid
167 context 'yを検証するとき' do
169 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
173 @panel.should be_valid
177 @panel.should_not be_valid
181 @panel.should be_valid
185 @panel.should be_valid
188 context 'zを検証するとき' do
190 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
194 @panel.should be_valid
198 @panel.should_not be_valid
202 @panel.should_not be_valid
206 @panel.should_not be_valid
209 context 'tを検証するとき' do
211 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
215 @panel.should be_valid
219 @panel.should_not be_valid
223 @panel.should be_valid
227 @panel.should_not be_valid
230 context 'author_idを検証するとき' do
232 @panel = Factory.build :panel, :author_id => @author.id, :comic_id => @comic.id
235 @panel.author_id = @author.id
236 @panel.should be_valid
239 @panel.author_id = nil
240 @panel.should_not be_valid
243 @panel.author_id = 'a'
244 @panel.should_not be_valid
246 it '存在する絵師でなければ失敗する' do
248 @panel.should_not be_valid
251 context '全体を検証するとき' do
253 @panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id
258 describe 'データ補充に於いて' do
260 @comic = Factory :comic, :author_id => @author.id
261 @panel = Factory.build :panel, :comic_id => @comic.id
263 context 'widthを補充' do
264 it '空の時はコミックから補充する' do
\r
266 @panel.supply_default @author
\r
267 @panel.width.should eq @comic.width
269 it '空の時でもコミックが不在なら補充しない' do
\r
271 @panel.comic_id = nil
272 @panel.supply_default @author
\r
273 @panel.width.should be_nil
278 @panel.supply_default @author
\r
279 }.should_not change @panel, :width
282 context 'heightを補充' do
283 it '空の時はコミックから補充する' do
285 @panel.supply_default @author
\r
286 @panel.height.should eq @comic.height
288 it '空の時でもコミックが不在なら補充しない' do
\r
290 @panel.comic_id = nil
291 @panel.supply_default @author
\r
292 @panel.height.should be_nil
297 @panel.supply_default @author
\r
298 }.should_not change @panel, :height
301 context 'borderを補充' do
304 @panel.supply_default @author
\r
305 @panel.border.should eq 0
310 @panel.supply_default @author
\r
311 }.should_not change @panel, :border
315 it '空の時はコミック内のtの最大値+1を補充する' do
316 pl = Factory :panel, :author_id => @author.id, :comic_id => @comic.id, :t => 0
\r
318 @panel.supply_default @author
\r
321 it '空でコミック初のコマなら0を補充する' do
323 @panel.supply_default @author
\r
326 it '空の時でも更新ケースなら補充しない' do
327 pl = Factory :panel, :author_id => @author.id, :comic_id => @comic.id, :t => 1
\r
330 pl.supply_default @author
\r
331 }.should_not change pl, :t
336 @panel.supply_default @author
\r
337 }.should_not change @panel, :t
340 context 'author_idを補充' do
341 it 'ログイン中の作家idを補充する' do
342 @panel.author_id = nil
343 @panel.supply_default @author
\r
344 @panel.author_id.should eq @author.id
350 describe '作者判定に於いて' do
352 @comic = Factory :comic, :author_id => @author.id
355 panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id
356 panel.own?(@author).should == true
359 panel = Factory :panel, :author_id => @other_author.id, :comic_id => @comic.id
360 panel.own?(@author).should == false
363 panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id
364 panel.own?(nil).should == false
367 describe '閲覧許可に於いて' do
369 @comic = Factory :comic, :author_id => @author.id
371 it '自作の公開コミックのコマを見るときは許可する' do
372 Comic.any_instance.stub(:visible?).and_return(true)
373 panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id
374 panel.visible?(@author).should == true
376 it '自作のコマは非公開コミックでも許可する' do
377 Comic.any_instance.stub(:visible?).and_return(false)
378 panel = Factory :panel, :author_id => @author.id, :comic_id => @comic.id
379 panel.visible?(@author).should == true
381 it '他人のコマでも公開コミックなら許可する' do
382 Comic.any_instance.stub(:visible?).and_return(true)
383 panel = Factory :panel, :author_id => @other_author.id, :comic_id => @comic.id
384 panel.visible?(@author).should == true
386 it '他人のコマで非公開コミックなら許可しない' do
387 Comic.any_instance.stub(:visible?).and_return(false)
388 panel = Factory :panel, :author_id => @other_author.id, :comic_id => @comic.id
389 panel.visible?(@author).should == false
392 describe '単体取得に於いて' do
394 @comic = Factory :comic, :author_id => @author.id
395 @panel = Factory :panel, :comic_id => @comic.id, :author_id => @author.id
398 Comic.any_instance.stub(:visible?).and_return(true)
399 pl = Panel.show @panel.id, @author
402 context '他人の非公開コミックのコマを開こうとしたとき' do
403 it '403Forbidden例外を返す' do
404 Panel.any_instance.stub(:visible?).and_return(false)
406 Panel.show @panel.id, @author
407 }.should raise_error(ActiveRecord::Forbidden)
410 context '存在しないコマを開こうとしたとき' do
411 it '404RecordNotFound例外を返す' do
413 Panel.show 110, @author
414 }.should raise_error(ActiveRecord::RecordNotFound)
418 describe '関連テーブルプションに於いて' do
419 context 'オプションがないとき' do
421 r = Panel.show_include_opt
422 r.should have(4).items
\r
425 r = Panel.show_include_opt
426 r.has_key?(:comic).should be_true
\r
429 r = Panel.show_include_opt
430 r.has_key?(:panel_pictures).should be_true
\r
433 r = Panel.show_include_opt
434 r[:panel_pictures].has_key?(:resource_picture).should be_true
\r
437 r = Panel.show_include_opt
438 r[:panel_pictures][:resource_picture].has_key?(:artist).should be_true
\r
440 it '素材はライセンスを含んでいる' do
441 r = Panel.show_include_opt
442 r[:panel_pictures][:resource_picture].has_key?(:license).should be_true
\r
445 r = Panel.show_include_opt
446 r.has_key?(:speech_balloons).should be_true
\r
448 it 'フキダシはフキダシ枠を含んでいる' do
449 r = Panel.show_include_opt
450 r[:speech_balloons].has_key?(:balloons).should be_true
\r
452 it 'フキダシはセリフを含んでいる' do
453 r = Panel.show_include_opt
454 r[:speech_balloons].has_key?(:speeches).should be_true
\r
457 r = Panel.show_include_opt
458 r.has_key?(:author).should be_true
\r
461 context 'オプションで原画を含ませたとき' do
463 r = Panel.show_include_opt(:include => {:test => {}})
464 r.should have(5).items
\r
467 r = Panel.show_include_opt(:include => {:test => {}})
468 r.has_key?(:test).should be_true
\r
472 describe 'json単体出力オプションに於いて' do
473 it 'includeキーを含んでいる' do
474 r = Panel.show_json_include_opt
475 r.has_key?(:include).should be_true
478 r = Panel.show_json_include_opt[:include]
479 r.should have(4).items
\r
482 r = Panel.show_json_include_opt[:include]
483 r.has_key?(:comic).should be_true
\r
486 r = Panel.show_json_include_opt[:include]
487 r.has_key?(:panel_pictures).should be_true
\r
490 r = Panel.show_json_include_opt[:include]
491 r[:panel_pictures].has_key?(:resource_picture).should be_true
\r
494 r = Panel.show_json_include_opt[:include]
495 r[:panel_pictures][:resource_picture].has_key?(:artist).should be_true
\r
497 it '素材はライセンスを含んでいる' do
498 r = Panel.show_json_include_opt[:include]
499 r[:panel_pictures][:resource_picture].has_key?(:license).should be_true
\r
502 r = Panel.show_include_opt
503 r.has_key?(:speech_balloons).should be_true
\r
505 it 'フキダシはフキダシ枠を含んでいる' do
506 r = Panel.show_include_opt
507 r[:speech_balloons].has_key?(:balloons).should be_true
\r
509 it 'フキダシはセリフを含んでいる' do
510 r = Panel.show_include_opt
511 r[:speech_balloons].has_key?(:speeches).should be_true
\r
514 r = Panel.show_json_include_opt[:include]
515 r.has_key?(:author).should be_true
\r
518 describe '一覧取得に於いて' do
520 @comic = Factory :comic, :author_id => @author.id
521 @panel = Factory :panel, :comic_id => @comic.id, :author_id => @author.id
523 context 'page補正について' do
524 it '文字列から数値に変換される' do
525 Panel.page('8').should eq 8
528 Panel.page().should eq 1
531 Panel.page('0').should eq 1
534 context 'page_size補正について' do
535 it '文字列から数値に変換される' do
536 Panel.page_size('7').should eq 7
538 it 'nilの場合はPanel.default_page_sizeになる' do
539 Panel.page_size().should eq Panel.default_page_size
541 it '0以下の場合はPanel.default_page_sizeになる' do
542 Panel.page_size('0').should eq Panel.default_page_size
544 it 'Panel.max_page_sizeを超えた場合はPanel.max_page_sizeになる' do
545 Panel.page_size('1000').should eq Panel.max_page_size
550 pl.should eq [@panel]
553 npl = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 1
555 pl.should eq [npl, @panel]
557 context 'DBに5件あって1ページの件数を2件に変えたとして' do
559 @npl2 = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 1
560 @npl3 = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 2
561 @npl4 = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 3
562 @npl5 = Factory :panel, :comic_id => @comic.id, :author_id => @author.id, :t => 4
563 Panel.stub(:default_page_size).and_return(2)
567 pl.should have(2).items
569 it 'page=1なら末尾2件を返す' do
571 pl = Panel.list( {}, 1)
572 pl.should eq [@npl5, @npl4]
574 it 'page=2なら中間2件を返す' do
575 pl = Panel.list({}, 2)
576 pl.should eq [@npl3, @npl2]
578 it 'page=3なら先頭1件を返す' do
579 pl = Panel.list({}, 3)
580 pl.should eq [@panel]
584 describe 'list関連テーブルプションに於いて' do
585 it 'includeキーを含んでいる' do
587 r.has_key?(:include).should be_true
590 r = Panel.list_opt[:include]
591 r.should have(4).items
\r
594 r = Panel.list_opt[:include]
595 r.has_key?(:comic).should be_true
\r
598 r = Panel.list_opt[:include]
599 r.has_key?(:panel_pictures).should be_true
\r
602 r = Panel.list_opt[:include]
603 r[:panel_pictures].has_key?(:resource_picture).should be_true
\r
606 r = Panel.list_opt[:include]
607 r[:panel_pictures][:resource_picture].has_key?(:artist).should be_true
\r
609 it '素材はライセンスを含んでいる' do
610 r = Panel.list_opt[:include]
611 r[:panel_pictures][:resource_picture].has_key?(:license).should be_true
\r
614 r = Panel.show_include_opt
615 r.has_key?(:speech_balloons).should be_true
\r
617 it 'フキダシはフキダシ枠を含んでいる' do
618 r = Panel.show_include_opt
619 r[:speech_balloons].has_key?(:balloons).should be_true
\r
621 it 'フキダシはセリフを含んでいる' do
622 r = Panel.show_include_opt
623 r[:speech_balloons].has_key?(:speeches).should be_true
\r
626 r = Panel.list_opt[:include]
627 r.has_key?(:author).should be_true
\r
630 describe 'json一覧出力オプションに於いて' do
631 it 'includeキーを含んでいる' do
632 r = Panel.list_json_opt
633 r.has_key?(:include).should be_true
636 r = Panel.list_json_opt[:include]
637 r.should have(4).items
\r
640 r = Panel.list_json_opt[:include]
641 r.has_key?(:comic).should be_true
\r
644 r = Panel.list_json_opt[:include]
645 r.has_key?(:panel_pictures).should be_true
\r
648 r = Panel.list_json_opt[:include]
649 r[:panel_pictures].has_key?(:resource_picture).should be_true
\r
652 r = Panel.list_json_opt[:include]
653 r[:panel_pictures][:resource_picture].has_key?(:artist).should be_true
\r
655 it '素材はライセンスを含んでいる' do
656 r = Panel.list_json_opt[:include]
657 r[:panel_pictures][:resource_picture].has_key?(:license).should be_true
\r
660 r = Panel.show_include_opt
661 r.has_key?(:speech_balloons).should be_true
\r
663 it 'フキダシはフキダシ枠を含んでいる' do
664 r = Panel.show_include_opt
665 r[:speech_balloons].has_key?(:balloons).should be_true
\r
667 it 'フキダシはセリフを含んでいる' do
668 r = Panel.show_include_opt
669 r[:speech_balloons].has_key?(:speeches).should be_true
\r
672 r = Panel.list_json_opt[:include]
673 r.has_key?(:author).should be_true
\r