OSDN Git Service

try paging
[pettanr/pettanr.git] / spec / models / resource_picture_spec.rb
index 4988095..cccf4c4 100644 (file)
@@ -472,73 +472,20 @@ describe ResourcePicture do
         r.should eq [@rp]\r
       end\r
     end\r
-    context 'DBに5件あって1ページの件数を2件に変えたとして' do\r
-      before do\r
-        nop2 = FactoryGirl.create :original_picture, :artist_id => @artist.id\r
-        @nrp2 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop2.id, :picture_id => @p.id, :updated_at => Time.now + 100\r
-        nop3 = FactoryGirl.create :original_picture, :artist_id => @artist.id\r
-        @nrp3 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop3.id, :picture_id => @p.id, :updated_at => Time.now + 200\r
-        nop4 = FactoryGirl.create :original_picture, :artist_id => @artist.id\r
-        @nrp4 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop4.id, :picture_id => @p.id, :updated_at => Time.now + 300\r
-        nop5 = FactoryGirl.create :original_picture, :artist_id => @artist.id\r
-        @nrp5 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => nop5.id, :picture_id => @p.id, :updated_at => Time.now + 400\r
-        ResourcePicture.stub(:default_page_size).and_return(2)\r
-      end\r
-      it '件数0は全件(5件)を返す' do\r
-        r = ResourcePicture.list 5, 0\r
-        r.should have(5).items \r
-      end\r
-    end\r
   end\r
-  describe '一覧取得オプションに於いて' do\r
-    it 'includeキーを含んでいる' do\r
-      r = ResourcePicture.list_opt\r
-      r.has_key?(:include).should be_true\r
-    end\r
-    it '3つの項目を含んでいる' do\r
-      r = ResourcePicture.list_opt[:include]\r
-      r.should have(3).items\r
-    end\r
-    it 'ライセンスを含んでいる' do\r
-      r = ResourcePicture.list_opt[:include]\r
-      r.has_key?(:license).should be_true\r
-    end\r
-    it '絵師を含んでいる' do\r
-      r = ResourcePicture.list_opt[:include]\r
-      r.has_key?(:artist).should be_true\r
-    end\r
-    it '実素材を含んでいる' do\r
-      r = ResourcePicture.list_opt[:include]\r
-      r.has_key?(:picture).should be_true\r
-    end\r
-  end\r
-  describe 'json一覧出力オプションに於いて' do\r
+  \r
+  describe '一覧ページ制御に於いて' do\r
     before do\r
-      @op = FactoryGirl.create :original_picture, :artist_id => @artist.id\r
-      @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id\r
-      @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id\r
-      @sbt = FactoryGirl.create :speech_balloon_template\r
-      @comic = FactoryGirl.create :comic, :author_id => @author.id, :visible => 1\r
-      @panel = FactoryGirl.create :panel, :author_id => @author.id, :publish => 1\r
-      @story = FactoryGirl.create :story, :author_id => @author.id, :comic_id => @comic.id, :panel_id => @panel.id\r
+      ResourcePicture.stub(:count).with(any_args).and_return(100)\r
     end\r
-    it 'ライセンスを含んでいる' do\r
-      r = ResourcePicture.list.to_json ResourcePicture.list_json_opt\r
-      j = JSON.parse r\r
-      i = j.first\r
-      i.has_key?('license').should be_true\r
+    it 'ページ制御を返す' do\r
+      r = ResourcePicture.list_paginate\r
+      r.is_a?(Kaminari::PaginatableArray).should be_true\r
     end\r
-    it '絵師を含んでいる' do\r
-      r = ResourcePicture.list.to_json ResourcePicture.list_json_opt\r
-      j = JSON.parse r\r
-      i = j.first\r
-      i.has_key?('artist').should be_true\r
-    end\r
-    it '実素材を含んでいる' do\r
-      r = ResourcePicture.list.to_json ResourcePicture.list_json_opt\r
-      j = JSON.parse r\r
-      i = j.first\r
-      i.has_key?('picture').should be_true\r
+    it 'ページ件数10のとき、3ページ目のオフセットは20から始まる' do\r
+      r = ResourcePicture.list_paginate 3, 10\r
+      r.limit_value.should eq 10\r
+      r.offset_value.should eq 20\r
     end\r
   end\r
   \r
@@ -600,22 +547,150 @@ describe ResourcePicture do
         c.should eq [@rp]\r
       end\r
     end\r
-    context 'DBに5件あって1ページの件数を0件に変えたとして' do\r
+  end\r
+  \r
+  describe '自分の素材一覧ページ制御に於いて' do\r
+    before do\r
+      ResourcePicture.stub(:count).with(any_args).and_return(100)\r
+    end\r
+    it 'ページ制御を返す' do\r
+      r = ResourcePicture.mylist_paginate @artist\r
+      r.is_a?(Kaminari::PaginatableArray).should be_true\r
+    end\r
+    it '自分の素材一覧の取得条件を利用している' do\r
+      ResourcePicture.stub(:mylist_where).with(any_args).and_return('')\r
+      ResourcePicture.should_receive(:mylist_where).with(any_args).exactly(1)\r
+      r = ResourcePicture.mylist_paginate @artist\r
+    end\r
+    it 'ページ件数10のとき、3ページ目のオフセットは20から始まる' do\r
+      r = ResourcePicture.mylist_paginate @artist, 3, 10\r
+      r.limit_value.should eq 10\r
+      r.offset_value.should eq 20\r
+    end\r
+  end\r
+\r
+  describe '他作家の素材一覧取得に於いて' do\r
+    before do\r
+      @op = FactoryGirl.create :original_picture, :artist_id => @artist.id\r
+      @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id\r
+      @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id\r
+      @other_op = FactoryGirl.create :original_picture, :artist_id => @other_artist.id\r
+      @other_p = FactoryGirl.create :picture, :original_picture_id => @other_op.id, :license_id => @license.id, :artist_id => @other_artist.id\r
+      @other_rp = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :license_id => @license.id, :original_picture_id => @other_op.id, :picture_id => @other_p.id\r
+    end\r
+    context 'つつがなく終わるとき' do\r
+      it '一覧取得オプションを利用している' do\r
+        ResourcePicture.stub(:list_opt).with(any_args).and_return({})\r
+        ResourcePicture.should_receive(:list_opt).with(any_args).exactly(1)\r
+        r = ResourcePicture.himlist @other_artist\r
+      end\r
+    end\r
+    it '指定した作家のリストを返す' do\r
+      r = ResourcePicture.himlist @other_artist\r
+      r.should eq [@other_rp]\r
+    end\r
+    it '時系列で並んでいる' do\r
+      nop = FactoryGirl.create :original_picture, :artist_id => @other_artist.id\r
+      nrp = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :license_id => @license.id, :original_picture_id => nop.id, :picture_id => @other_p.id, :updated_at => Time.now + 100\r
+      r = ResourcePicture.himlist @other_artist\r
+      r.should eq [nrp, @other_rp]\r
+    end\r
+    context 'DBに5件あって1ページの件数を2件に変えたとして' do\r
       before do\r
-        @op2 = FactoryGirl.create :original_picture, :artist_id => @artist.id\r
-        @rp2 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op2.id, :picture_id => @p.id, :updated_at => Time.now + 100\r
-        @op3 = FactoryGirl.create :original_picture, :artist_id => @artist.id\r
-        @rp3 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op3.id, :picture_id => @p.id, :updated_at => Time.now + 200\r
-        @op4 = FactoryGirl.create :original_picture, :artist_id => @artist.id\r
-        @rp4 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op4.id, :picture_id => @p.id, :updated_at => Time.now + 300\r
-        @op5 = FactoryGirl.create :original_picture, :artist_id => @artist.id\r
-        @rp5 = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op5.id, :picture_id => @p.id, :updated_at => Time.now + 400\r
-        Author.stub(:default_resource_picture_page_size).and_return(2)\r
+        @op2 = FactoryGirl.create :original_picture, :artist_id => @other_artist.id\r
+        @rp2 = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :license_id => @license.id, :original_picture_id => @op2.id, :picture_id => @p.id, :updated_at => Time.now + 100\r
+        @op3 = FactoryGirl.create :original_picture, :artist_id => @other_artist.id\r
+        @rp3 = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :license_id => @license.id, :original_picture_id => @op3.id, :picture_id => @p.id, :updated_at => Time.now + 200\r
+        @op4 = FactoryGirl.create :original_picture, :artist_id => @other_artist.id\r
+        @rp4 = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :license_id => @license.id, :original_picture_id => @op4.id, :picture_id => @p.id, :updated_at => Time.now + 300\r
+        @op5 = FactoryGirl.create :original_picture, :artist_id => @other_artist.id\r
+        @rp5 = FactoryGirl.create :resource_picture, :artist_id => @other_artist.id, :license_id => @license.id, :original_picture_id => @op5.id, :picture_id => @p.id, :updated_at => Time.now + 400\r
+      end\r
+      it '通常は2件を返す' do\r
+        r = ResourcePicture.himlist @other_artist, 1, 2\r
+        r.should have(2).items \r
       end\r
-      it '通常は全件(5件)を返す' do\r
-        r = ResourcePicture.mylist @artist, 5, 0\r
-        r.should have(5).items \r
+      it 'page=1なら末尾2件を返す' do\r
+        #時系列で並んでいる\r
+        r = ResourcePicture.himlist(@other_artist, 1, 2)\r
+        r.should eq [@rp5, @rp4]\r
+      end\r
+      it 'page=2なら中間2件を返す' do\r
+        r = ResourcePicture.himlist(@other_artist, 2, 2)\r
+        r.should eq [@rp3, @rp2]\r
       end\r
+      it 'page=3なら先頭1件を返す' do\r
+        r = ResourcePicture.himlist(@other_artist, 3, 2)\r
+        r.should eq [@other_rp]\r
+      end\r
+    end\r
+  end\r
+  \r
+  describe '他作家の素材一覧ページ制御に於いて' do\r
+    before do\r
+      ResourcePicture.stub(:count).with(any_args).and_return(100)\r
+    end\r
+    it 'ページ制御を返す' do\r
+      r = ResourcePicture.himlist_paginate @artist\r
+      r.is_a?(Kaminari::PaginatableArray).should be_true\r
+    end\r
+    it '自分の素材一覧の取得条件を利用している' do\r
+      ResourcePicture.stub(:himlist_where).with(any_args).and_return('')\r
+      ResourcePicture.should_receive(:himlist_where).with(any_args).exactly(1)\r
+      r = ResourcePicture.himlist_paginate @artist\r
+    end\r
+    it 'ページ件数10のとき、3ページ目のオフセットは20から始まる' do\r
+      r = ResourcePicture.himlist_paginate @artist, 3, 10\r
+      r.limit_value.should eq 10\r
+      r.offset_value.should eq 20\r
+    end\r
+  end\r
+\r
+  describe '一覧取得オプションに於いて' do\r
+    it '3つの項目を含んでいる' do\r
+      r = ResourcePicture.list_opt\r
+      r.should have(3).items\r
+    end\r
+    it 'ライセンスを含んでいる' do\r
+      r = ResourcePicture.list_opt\r
+      r.has_key?(:license).should be_true\r
+    end\r
+    it '絵師を含んでいる' do\r
+      r = ResourcePicture.list_opt\r
+      r.has_key?(:artist).should be_true\r
+    end\r
+    it '実素材を含んでいる' do\r
+      r = ResourcePicture.list_opt\r
+      r.has_key?(:picture).should be_true\r
+    end\r
+  end\r
+  describe 'json一覧出力オプションに於いて' do\r
+    before do\r
+      @op = FactoryGirl.create :original_picture, :artist_id => @artist.id\r
+      @p = FactoryGirl.create :picture, :original_picture_id => @op.id, :license_id => @license.id, :artist_id => @artist.id\r
+      @rp = FactoryGirl.create :resource_picture, :artist_id => @artist.id, :license_id => @license.id, :original_picture_id => @op.id, :picture_id => @p.id\r
+      @sbt = FactoryGirl.create :speech_balloon_template\r
+      @comic = FactoryGirl.create :comic, :author_id => @author.id, :visible => 1\r
+      @panel = FactoryGirl.create :panel, :author_id => @author.id, :publish => 1\r
+      @story = FactoryGirl.create :story, :author_id => @author.id, :comic_id => @comic.id, :panel_id => @panel.id\r
+    end\r
+    it 'ライセンスを含んでいる' do\r
+      r = ResourcePicture.list.to_json ResourcePicture.list_json_opt\r
+      j = JSON.parse r\r
+      i = j.first\r
+      i.has_key?('license').should be_true\r
+    end\r
+    it '絵師を含んでいる' do\r
+      r = ResourcePicture.list.to_json ResourcePicture.list_json_opt\r
+      j = JSON.parse r\r
+      i = j.first\r
+      i.has_key?('artist').should be_true\r
+    end\r
+    it '実素材を含んでいる' do\r
+      r = ResourcePicture.list.to_json ResourcePicture.list_json_opt\r
+      j = JSON.parse r\r
+      i = j.first\r
+      i.has_key?('picture').should be_true\r
     end\r
   end\r
   \r