X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=spec%2Fmodels%2Fpanel_picture_spec.rb;h=bed7168d0e0215cf6af03bf0800eec20ad2d9cd7;hb=9f6a95c6c89ca7d7671fa019f122e31215aa1bcd;hp=09a3a474afaf2300674d11e5d0b2e00cc239f668;hpb=e5489fabe79c2e0c28a61e7af03162e9f8b4bdfe;p=pettanr%2Fpettanr.git diff --git a/spec/models/panel_picture_spec.rb b/spec/models/panel_picture_spec.rb index 09a3a474..bed7168d 100644 --- a/spec/models/panel_picture_spec.rb +++ b/spec/models/panel_picture_spec.rb @@ -23,28 +23,42 @@ describe PanelPicture do before do @pp = FactoryGirl.build :panel_picture, :panel_id => @panel.id, :picture_id => @p.id, :width => @p.width, :height => @p.height + Picture.any_instance.stub(:flag_reverse).with(any_args).and_return(0) + Picture.any_instance.stub(:flag_resize).with(any_args).and_return(0) + Picture.any_instance.stub(:flag_sync_vh).with(any_args).and_return(0) end - it 'オーソドックスなデータなら通る' do - @pp.save! - @pp.should be_valid + + context 'オーソドックスなデータのとき' do + it '下限データが通る' do + @pp.link = 'http://test.jp/' + @pp.x = -99999 + @pp.y = -99999 + @pp.z = 1 + @pp.t = 0 + @pp.width = -99999 + @pp.height = -99999 + @pp.should be_valid + end + it '上限データが通る' do + @pp.link = 'http://test.jp/aaaaa' + 'a' * 180 + @pp.x = 99999 + @pp.y = 99999 + @pp.z = 99999 + @pp.t = 99999 + @pp.width = 99999 + @pp.height = 99999 + @pp.should be_valid + end end context 'panel_idを検証するとき' do #ネストの保存はnilを許可しなければならないので数値チェックだけ - it 'テストデータの確認' do - @pp.panel_id = @panel.id - @pp.should be_valid - end it '数値でなければ失敗する' do @pp.panel_id = 'a' @pp.should_not be_valid end end context 'linkを検証するとき' do - it 'テストデータの確認' do - @pp.link = 'abcdefghi0abcdefghi0abcdefghi0abcdefghi0abcdefghi0'*4 - @pp.should be_valid - end it 'nullでも通る' do @pp.link = '' @pp.should be_valid @@ -53,12 +67,12 @@ describe PanelPicture do @pp.link = 'a'*201 @pp.should_not be_valid end + it 'url形式でないなら失敗する' do + @pp.link = 'a'*200 + @pp.should_not be_valid + end end context 'xを検証するとき' do - it 'テストデータの確認' do - @pp.x = '1' - @pp.should be_valid - end it 'nullなら失敗する' do @pp.x = nil @pp.should_not be_valid @@ -77,10 +91,6 @@ describe PanelPicture do end end context 'yを検証するとき' do - it 'テストデータの確認' do - @pp.y = '1' - @pp.should be_valid - end it 'nullなら失敗する' do @pp.y = nil @pp.should_not be_valid @@ -99,15 +109,6 @@ describe PanelPicture do end end context 'widthを検証するとき' do - before do - Picture.any_instance.stub(:flag_reverse).with(any_args).and_return(0) - Picture.any_instance.stub(:flag_resize).with(any_args).and_return(0) - Picture.any_instance.stub(:flag_sync_vh).with(any_args).and_return(0) - end - it 'テストデータの確認' do - @pp.width = 1 - @pp.should be_valid - end it 'nullなら失敗する' do @pp.width = nil @pp.should_not be_valid @@ -122,7 +123,6 @@ describe PanelPicture do end context '反転許可のとき' do before do - Picture.any_instance.stub(:flag_reverse).with(any_args).and_return(0) end it '負でも通る' do @pp.width = -1 @@ -140,7 +140,6 @@ describe PanelPicture do end context 'サイズ変更許可のとき' do before do - Picture.any_instance.stub(:flag_resize).with(any_args).and_return(0) end it '実素材のサイズと違っても通る' do @pp.width = @p.width-1 @@ -158,7 +157,6 @@ describe PanelPicture do end context '縦横比変更許可のとき' do before do - Picture.any_instance.stub(:flag_sync_vh).with(any_args).and_return(0) end it '実素材の縦横比と違っても通る' do @pp.width = @p.width / 2 @@ -176,15 +174,6 @@ describe PanelPicture do end end context 'heightを検証するとき' do - before do - Picture.any_instance.stub(:flag_reverse).with(any_args).and_return(0) - Picture.any_instance.stub(:flag_resize).with(any_args).and_return(0) - Picture.any_instance.stub(:flag_sync_vh).with(any_args).and_return(0) - end - it 'テストデータの確認' do - @pp.height = '1' - @pp.should be_valid - end it 'nullなら失敗する' do @pp.height = nil @pp.should_not be_valid @@ -203,7 +192,6 @@ describe PanelPicture do end context '反転許可のとき' do before do - Picture.any_instance.stub(:flag_reverse).with(any_args).and_return(0) end it '負でも通る' do @pp.height = -1 @@ -221,7 +209,6 @@ describe PanelPicture do end context 'サイズ変更許可のとき' do before do - Picture.any_instance.stub(:flag_resize).with(any_args).and_return(0) end it '実素材のサイズと違っても通る' do @pp.height = @p.height-1 @@ -239,7 +226,6 @@ describe PanelPicture do end context '縦横比変更許可のとき' do before do - Picture.any_instance.stub(:flag_sync_vh).with(any_args).and_return(0) end it '実素材の縦横比と違っても通る' do @pp.height = @p.height / 2 @@ -257,10 +243,6 @@ describe PanelPicture do end end context 'zを検証するとき' do - it 'テストデータの確認' do - @pp.z = 1 - @pp.should be_valid - end it 'nullなら失敗する' do @pp.z = nil @pp.should_not be_valid @@ -279,10 +261,6 @@ describe PanelPicture do end end context 'tを検証するとき' do - it 'テストデータの確認' do - @pp.t = 0 - @pp.should be_valid - end it 'nullなら失敗する' do @pp.t = nil @pp.should_not be_valid @@ -296,6 +274,20 @@ describe PanelPicture do @pp.should_not be_valid end end + context 'picture_idを検証するとき' do + it 'nullなら失敗する' do + @pp.picture_id = nil + @pp.should_not be_valid + end + it '数値でなければ失敗する' do + @pp.picture_id = 'a' + @pp.should_not be_valid + end + it '存在する実素材でなければ失敗する' do + @pp.picture_id = 0 + @pp.should_not be_valid + end + end end describe '一覧取得に於いて' do before do @@ -327,17 +319,26 @@ describe PanelPicture do PanelPicture.page_size('1000').should eq PanelPicture.max_page_size end end + context 'つつがなく終わるとき' do + it '一覧取得オプションを利用している' do + PanelPicture.stub(:list_opt).with(any_args).and_return({:include => :panel}) + PanelPicture.should_receive(:list_opt).with(any_args).exactly(1) + r = PanelPicture.list + end + end it 'リストを返す' do - pl = PanelPicture.list - pl.should eq [@pp] + r = PanelPicture.list + r.should eq [@pp] end it '時系列で並んでいる' do - npl = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 1, :picture_id => @p.id, + #公開されたコマのコマ絵は(他人のコマ絵であっても)含んでいる + hc = FactoryGirl.create :panel, :author_id => @other_author.id, :publish => 1 + npl = FactoryGirl.create :panel_picture, :panel_id => hc.id, :t => 0, :picture_id => @p.id, :width => @p.width, :height => @p.height, :updated_at => Time.now + 100 - pl = PanelPicture.list - pl.should eq [npl, @pp] + r = PanelPicture.list + r.should eq [npl, @pp] end - it '非公開のコマは含まない' do + it '非公開のコマのコマ絵は自分のコマであっても含まない' do hpl = FactoryGirl.create :panel, :author_id => @author.id, :publish => 0 npl = FactoryGirl.create :panel_picture, :panel_id => hpl.id, :picture_id => @p.id, :width => @p.width, :height => @p.height @@ -347,13 +348,13 @@ describe PanelPicture do context 'DBに5件あって1ページの件数を2件に変えたとして' do before do @npl2 = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 1, :picture_id => @p.id, - :width => @p.width, :height => @p.height, :updated_at => Time.now + 100 + :width => @p.width, :height => @p.height, :updated_at => Time.now + 100 @npl3 = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 2, :picture_id => @p.id, - :width => @p.width, :height => @p.height, :updated_at => Time.now + 200 + :width => @p.width, :height => @p.height, :updated_at => Time.now + 200 @npl4 = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 3, :picture_id => @p.id, - :width => @p.width, :height => @p.height, :updated_at => Time.now + 300 + :width => @p.width, :height => @p.height, :updated_at => Time.now + 300 @npl5 = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 4, :picture_id => @p.id, - :width => @p.width, :height => @p.height, :updated_at => Time.now + 400 + :width => @p.width, :height => @p.height, :updated_at => Time.now + 400 PanelPicture.stub(:default_page_size).and_return(2) end it '通常は2件を返す' do @@ -362,18 +363,34 @@ describe PanelPicture do end it 'page=1なら末尾2件を返す' do #時系列で並んでいる - pl = PanelPicture.list( {}, 1) + pl = PanelPicture.list(1) pl.should eq [@npl5, @npl4] end it 'page=2なら中間2件を返す' do - pl = PanelPicture.list({}, 2) + pl = PanelPicture.list(2) pl.should eq [@npl3, @npl2] end it 'page=3なら先頭1件を返す' do - pl = PanelPicture.list({}, 3) + pl = PanelPicture.list(3) pl.should eq [@pp] end end + context 'DBに5件あって1ページの件数を0件に変えたとして' do + before do + @npl2 = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 1, :picture_id => @p.id, + :width => @p.width, :height => @p.height, :updated_at => Time.now + 100 + @npl3 = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 2, :picture_id => @p.id, + :width => @p.width, :height => @p.height, :updated_at => Time.now + 200 + @npl4 = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 3, :picture_id => @p.id, + :width => @p.width, :height => @p.height, :updated_at => Time.now + 300 + @npl5 = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 4, :picture_id => @p.id, + :width => @p.width, :height => @p.height, :updated_at => Time.now + 400 + end + it '通常は全件(5件)を返す' do + r = PanelPicture.list 5, 0 + r.should have(5).items + end + end end describe 'list関連テーブルプションに於いて' do it 'includeキーを含んでいる' do @@ -441,6 +458,13 @@ describe PanelPicture do @pp = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :picture_id => @p.id, :width => @p.width, :height => @p.height end + context 'つつがなく終わるとき' do + it '一覧取得オプションを利用している' do + PanelPicture.stub(:list_opt).with(any_args).and_return({:include => :panel}) + PanelPicture.should_receive(:list_opt).with(any_args).exactly(1) + r = PanelPicture.mylist @author + end + end it 'リストを返す' do pl = PanelPicture.mylist @author pl.should eq [@pp] @@ -451,13 +475,65 @@ describe PanelPicture do pl = PanelPicture.mylist @author pl.should eq [npl, @pp] end - it '他人のコマは公開でも含まない' do + it '他人のコマのコマ絵は公開コマでも含まない' do hpl = FactoryGirl.create :panel, :author_id => @other_author.id, :publish => 1 npl = FactoryGirl.create :panel_picture, :panel_id => hpl.id, :picture_id => @p.id, :width => @p.width, :height => @p.height pl = PanelPicture.mylist @author pl.should eq [@pp] end + it '自分のコマのコマ絵は非公開コマでも含んでいる' do + pl = FactoryGirl.create :panel, :author_id => @author.id, :publish => 0 + ni = FactoryGirl.create :panel_picture, :panel_id => pl.id, :picture_id => @p.id, + :width => @p.width, :height => @p.height, :updated_at => Time.now + 100 + r = PanelPicture.mylist @author + r.should eq [ni, @pp] + end + context 'DBに5件あって1ページの件数を2件に変えたとして' do + before do + @npl2 = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 1, :picture_id => @p.id, + :width => @p.width, :height => @p.height, :updated_at => Time.now + 100 + @npl3 = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 2, :picture_id => @p.id, + :width => @p.width, :height => @p.height, :updated_at => Time.now + 200 + @npl4 = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 3, :picture_id => @p.id, + :width => @p.width, :height => @p.height, :updated_at => Time.now + 300 + @npl5 = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 4, :picture_id => @p.id, + :width => @p.width, :height => @p.height, :updated_at => Time.now + 400 + end + it '通常は2件を返す' do + r = PanelPicture.mylist @author, 1, 2 + r.should have(2).items + end + it 'page=1なら末尾2件を返す' do + #時系列で並んでいる + r = PanelPicture.mylist(@author, 1, 2) + r.should eq [@npl5, @npl4] + end + it 'page=2なら中間2件を返す' do + r = PanelPicture.mylist(@author, 2, 2) + r.should eq [@npl3, @npl2] + end + it 'page=3なら先頭1件を返す' do + r = PanelPicture.mylist(@author, 3, 2) + r.should eq [@pp] + end + end + context 'DBに5件あって1ページの件数を0件に変えたとして' do + before do + @npl2 = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 1, :picture_id => @p.id, + :width => @p.width, :height => @p.height, :updated_at => Time.now + 100 + @npl3 = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 2, :picture_id => @p.id, + :width => @p.width, :height => @p.height, :updated_at => Time.now + 200 + @npl4 = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 3, :picture_id => @p.id, + :width => @p.width, :height => @p.height, :updated_at => Time.now + 300 + @npl5 = FactoryGirl.create :panel_picture, :panel_id => @panel.id, :t => 4, :picture_id => @p.id, + :width => @p.width, :height => @p.height, :updated_at => Time.now + 400 + end + it '通常は全件(5件)を返す' do + r = PanelPicture.mylist @author, 5, 0 + r.should have(5).items + end + end end end