From 2f93227de0c25550839103aa564cb959af68d0ab Mon Sep 17 00:00:00 2001 From: Gena M Date: Mon, 19 Nov 2018 15:32:48 +0200 Subject: [PATCH] Test coverage for `Pagy::Countless` [refs #108] --- lib/pagy/countless.rb | 4 +- test/pagy/countless_test.rb | 84 ++++++++++++++++++++++++++++++ test/pagy/extras/countless_test.rb | 12 +++-- 3 files changed, 94 insertions(+), 6 deletions(-) create mode 100644 test/pagy/countless_test.rb diff --git a/lib/pagy/countless.rb b/lib/pagy/countless.rb index 759005228..5e66e6c90 100644 --- a/lib/pagy/countless.rb +++ b/lib/pagy/countless.rb @@ -4,9 +4,9 @@ class Pagy class Countless < Pagy - # Merge and validate the options, do some simple aritmetic and set a few instance variables + # Merge and validate the options, do some simple arithmetic and set a few instance variables def initialize(vars={}) - @vars ||= VARS.merge(vars.delete_if{|_,v| v.nil? || v == '' }) # default vars + cleaned vars (can be ovverridden) + @vars ||= VARS.merge(vars.delete_if{|_,v| v.nil? || v == '' }) # default vars + cleaned vars (can be overridden) { items:1, outset:0, page:1 }.each do |k,min| # validate instance variables (@vars[k] && instance_variable_set(:"@#{k}", @vars[k].to_i) >= min) \ or raise(ArgumentError, "expected :#{k} >= #{min}; got #{@vars[k].inspect}") diff --git a/test/pagy/countless_test.rb b/test/pagy/countless_test.rb new file mode 100644 index 000000000..45aa9fccb --- /dev/null +++ b/test/pagy/countless_test.rb @@ -0,0 +1,84 @@ +require_relative '../test_helper' +require 'pagy/extras/countless' + +SingleCov.covered! + +describe Pagy::Countless do + + let(:backend) { TestController.new } # page = 3, items = 20 + + describe "#finalize" do + + before do + @empty_collection = TestCollection.new([]) + @collection = TestCollection.new(Array(1..59)) + end + + let(:last_page) { 3 } + + it 'jump to 2 page with empty collection' do + proc { Pagy::Countless.new(page: 2).finalize(0) }.must_raise Pagy::OverflowError + end + + it 'first page on empty collection' do + pagy, _ = backend.send(:pagy_countless, @empty_collection, page: 1) + + pagy.items.must_equal 20 + pagy.pages.must_equal 1 + pagy.last.must_equal 1 + pagy.from.must_equal 0 + pagy.to.must_equal 0 + pagy.prev.must_be_nil + pagy.next.must_be_nil + end + + it 'first page' do + pagy, _ = backend.send(:pagy_countless, @collection, page: 1) + pagy.must_be_instance_of Pagy::Countless + + pagy.items.must_equal 20 + pagy.last.must_equal 2 + pagy.pages.must_equal 2 # current + 1. `Countless` does not know real count + pagy.from.must_equal 1 + pagy.to.must_equal 20 + pagy.prev.must_be_nil + pagy.next.must_equal 2 + end + + it 'when only one full page exists' do + pagy, _ = backend.send(:pagy_countless, TestCollection.new(Array(1..20)), page: 1) + + pagy.items.must_equal 20 + pagy.pages.must_equal 1 + pagy.from.must_equal 1 + pagy.to.must_equal 20 + pagy.prev.must_be_nil + pagy.next.must_be_nil + end + + it 'when only one not full page exists' do + pagy, _ = backend.send(:pagy_countless, TestCollection.new(Array(1..4)), page: 1) + + pagy.items.must_equal 4 + pagy.pages.must_equal 1 + pagy.from.must_equal 1 + pagy.to.must_equal 4 + pagy.prev.must_be_nil + pagy.next.must_be_nil + + end + + it 'when last page has less records then var[:items]' do + pagy, _ = backend.send(:pagy_countless, @collection, page: last_page) + + pagy.items.must_equal 19 + pagy.pages.must_equal last_page + pagy.from.must_equal 41 + pagy.to.must_equal 59 + pagy.prev.must_equal(last_page - 1) + pagy.next.must_be_nil + end + + end + +end diff --git a/test/pagy/extras/countless_test.rb b/test/pagy/extras/countless_test.rb index debd3e5e8..a67c524a3 100644 --- a/test/pagy/extras/countless_test.rb +++ b/test/pagy/extras/countless_test.rb @@ -1,4 +1,3 @@ -require 'byebug' require_relative '../../test_helper' require 'pagy/extras/countless' @@ -11,9 +10,14 @@ let(:last_page) { 1000 / 20 } before do + @default_page_param = Pagy::Countless::VARS[:page_param] @collection = TestCollection.new((1..1000).to_a) end + after do + Pagy::Countless::VARS[:page_param] = @default_page_param + end + describe "#pagy_countless" do it 'vars[:size] = [1, 4, 4, 1], on first page only show Next page' do @@ -64,21 +68,21 @@ let(:backend) { TestController.new({a: 'a', page: 3, page_number: 4}) } it 'page_param from defaults' do - Pagy::VARS[:page_param] = :page_number + Pagy::Countless::VARS[:page_param] = :page_number pagy, items = backend.send(:pagy_countless, @collection) pagy.page.must_equal 4 items.must_equal Array(61..80) end it 'page_param from vars' do - Pagy::VARS[:page_param] = :page + Pagy::Countless::VARS[:page_param] = :page pagy, items = backend.send(:pagy_countless, @collection, {page_param: :page_number}) pagy.page.must_equal 4 items.must_equal Array(61..80) end it 'bypass page_param with vars[:page]' do - Pagy::VARS[:page_param] = :page_number + Pagy::Countless::VARS[:page_param] = :page_number pagy, items = backend.send(:pagy_countless, @collection, {page_param: :page_number, page: 1}) pagy.page.must_equal 1 items.must_equal Array(1..20)