mirror of
				https://github.com/kaminari/kaminari.git
				synced 2022-11-09 13:44:37 -05:00 
			
		
		
		
	RSpec => Test/Unit
This commit is contained in:
		
							parent
							
								
									850a7d8047
								
							
						
					
					
						commit
						f33e2566a6
					
				
					 46 changed files with 1572 additions and 1771 deletions
				
			
		
							
								
								
									
										2
									
								
								.rspec
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								.rspec
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,2 +0,0 @@
 | 
			
		|||
--color
 | 
			
		||||
--format=d
 | 
			
		||||
| 
						 | 
				
			
			@ -17,7 +17,7 @@ gemfile:
 | 
			
		|||
 | 
			
		||||
sudo: false
 | 
			
		||||
 | 
			
		||||
script: "bundle exec rake spec"
 | 
			
		||||
script: 'bundle exec rake test'
 | 
			
		||||
 | 
			
		||||
cache: bundler
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										18
									
								
								Rakefile
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								Rakefile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -3,16 +3,18 @@
 | 
			
		|||
 | 
			
		||||
require "bundler/gem_tasks"
 | 
			
		||||
 | 
			
		||||
require 'rspec/core'
 | 
			
		||||
require 'rspec/core/rake_task'
 | 
			
		||||
require 'rake/testtask'
 | 
			
		||||
 | 
			
		||||
RSpec::Core::RakeTask.new(:spec) do |spec|
 | 
			
		||||
  spec.pattern = [FileList['spec/**/*_spec.rb'], "#{File.join(Gem.loaded_specs['kaminari-core'].gem_dir, 'spec')}/**/*_spec.rb"]
 | 
			
		||||
Rake::TestTask.new do |t|
 | 
			
		||||
  t.libs << 'test'
 | 
			
		||||
  t.pattern = "{test,#{File.join(Gem.loaded_specs['kaminari-core'].gem_dir, 'test')}}/**/*_test.rb"
 | 
			
		||||
  t.warning = true
 | 
			
		||||
  t.verbose = true
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
task :default => "spec:all"
 | 
			
		||||
task :default => "test:all"
 | 
			
		||||
 | 
			
		||||
namespace :spec do
 | 
			
		||||
namespace :test do
 | 
			
		||||
  mappers = %w(
 | 
			
		||||
    active_record_edge
 | 
			
		||||
    active_record_50
 | 
			
		||||
| 
						 | 
				
			
			@ -24,7 +26,7 @@ namespace :spec do
 | 
			
		|||
    desc "Run Tests against #{gemfile}"
 | 
			
		||||
    task gemfile do
 | 
			
		||||
      sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle --quiet"
 | 
			
		||||
      sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle exec rake -t spec"
 | 
			
		||||
      sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle exec rake -t test"
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -32,7 +34,7 @@ namespace :spec do
 | 
			
		|||
  task :all do
 | 
			
		||||
    mappers.each do |gemfile|
 | 
			
		||||
      sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle --quiet"
 | 
			
		||||
      sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle exec rake spec"
 | 
			
		||||
      sh "BUNDLE_GEMFILE='gemfiles/#{gemfile}.gemfile' bundle exec rake test"
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,6 @@ source 'https://rubygems.org'
 | 
			
		|||
 | 
			
		||||
gem 'railties', '~> 4.1.0'
 | 
			
		||||
gem 'activerecord', '~> 4.1.0', :require => 'active_record'
 | 
			
		||||
gem 'rspec-rails', '~> 2.14.1'
 | 
			
		||||
 | 
			
		||||
platforms :ruby do
 | 
			
		||||
  if RUBY_VERSION > "2.1.0"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,6 @@ source 'https://rubygems.org'
 | 
			
		|||
 | 
			
		||||
gem 'railties', '~> 4.2.0'
 | 
			
		||||
gem 'activerecord', '~> 4.2.0', :require => 'active_record'
 | 
			
		||||
gem 'rspec-rails', '~> 2.14.1'
 | 
			
		||||
 | 
			
		||||
platforms :ruby do
 | 
			
		||||
  if RUBY_VERSION > "2.1.0"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,6 +17,4 @@ platforms :rbx do
 | 
			
		|||
  gem 'rubinius-developer_tools'
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
gem 'rspec-rails', '~> 2.14.1'
 | 
			
		||||
 | 
			
		||||
gemspec :path => '../'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,6 +26,4 @@ platforms :rbx do
 | 
			
		|||
  gem 'rubinius-developer_tools'
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
gem 'rspec-rails', '~> 2.14.1'
 | 
			
		||||
 | 
			
		||||
gemspec :path => '../'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,110 +0,0 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'spec_helper'
 | 
			
		||||
 | 
			
		||||
describe Kaminari::Configuration do
 | 
			
		||||
  subject { Kaminari.config }
 | 
			
		||||
 | 
			
		||||
  describe 'default_per_page' do
 | 
			
		||||
    context 'by default' do
 | 
			
		||||
      its(:default_per_page) { should == 25 }
 | 
			
		||||
    end
 | 
			
		||||
    context 'configured via config block' do
 | 
			
		||||
      before do
 | 
			
		||||
        Kaminari.configure {|c| c.default_per_page = 17}
 | 
			
		||||
      end
 | 
			
		||||
      its(:default_per_page) { should == 17 }
 | 
			
		||||
      after do
 | 
			
		||||
        Kaminari.configure {|c| c.default_per_page = 25}
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'max_per_page' do
 | 
			
		||||
    context 'by default' do
 | 
			
		||||
      its(:max_per_page) { should == nil }
 | 
			
		||||
    end
 | 
			
		||||
    context 'configure via config block' do
 | 
			
		||||
      before do
 | 
			
		||||
        Kaminari.configure {|c| c.max_per_page = 100}
 | 
			
		||||
      end
 | 
			
		||||
      its(:max_per_page) { should == 100 }
 | 
			
		||||
      after do
 | 
			
		||||
        Kaminari.configure {|c| c.max_per_page = nil}
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'window' do
 | 
			
		||||
    context 'by default' do
 | 
			
		||||
      its(:window) { should == 4 }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'outer_window' do
 | 
			
		||||
    context 'by default' do
 | 
			
		||||
      its(:outer_window) { should == 0 }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'left' do
 | 
			
		||||
    context 'by default' do
 | 
			
		||||
      its(:left) { should == 0 }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'right' do
 | 
			
		||||
    context 'by default' do
 | 
			
		||||
      its(:right) { should == 0 }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'param_name' do
 | 
			
		||||
    context 'by default' do
 | 
			
		||||
      its(:param_name) { should == :page }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'configured via config block' do
 | 
			
		||||
      before do
 | 
			
		||||
        Kaminari.configure {|c| c.param_name = -> { :test } }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      its(:param_name) { should == :test }
 | 
			
		||||
 | 
			
		||||
      after do
 | 
			
		||||
        Kaminari.configure {|c| c.param_name = :page }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'max_pages' do
 | 
			
		||||
    context 'by default' do
 | 
			
		||||
      its(:max_pages) { should == nil }
 | 
			
		||||
    end
 | 
			
		||||
    context 'configure via config block' do
 | 
			
		||||
      before do
 | 
			
		||||
        Kaminari.configure {|c| c.max_pages = 5}
 | 
			
		||||
      end
 | 
			
		||||
      its(:max_pages) { should == 5 }
 | 
			
		||||
      after do
 | 
			
		||||
        Kaminari.configure {|c| c.max_pages = nil}
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'params_on_first_page' do
 | 
			
		||||
    context 'by default' do
 | 
			
		||||
      its(:params_on_first_page) { should be_false }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'configure via config block' do
 | 
			
		||||
      before do
 | 
			
		||||
        Kaminari.configure {|c| c.params_on_first_page = true }
 | 
			
		||||
      end
 | 
			
		||||
      after do
 | 
			
		||||
        Kaminari.configure {|c| c.params_on_first_page = false }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      its(:params_on_first_page) { should be_true }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,19 +0,0 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'spec_helper'
 | 
			
		||||
 | 
			
		||||
if defined?(::Rails::Railtie)
 | 
			
		||||
  require 'rails/generators'
 | 
			
		||||
  require 'generators/kaminari/views_generator'
 | 
			
		||||
 | 
			
		||||
  describe Kaminari::Generators::GitHubApiHelper, :generator_spec => true do
 | 
			
		||||
    describe '.get_files_in_master' do
 | 
			
		||||
      subject { Kaminari::Generators::GitHubApiHelper.get_files_in_master }
 | 
			
		||||
      it { should include %w(README.md 7f712676aac6bcd912981a9189c110303a1ee266) }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe '.get_content_for' do
 | 
			
		||||
      subject { Kaminari::Generators::GitHubApiHelper.get_content_for('README.md') }
 | 
			
		||||
      it { should start_with '# ' }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,427 +0,0 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'spec_helper'
 | 
			
		||||
 | 
			
		||||
describe 'Kaminari::ActionViewExtension', :if => defined?(::Rails::Railtie) && defined?(::ActionView) do
 | 
			
		||||
  before do
 | 
			
		||||
    helper.output_buffer = ::ActionView::OutputBuffer.new
 | 
			
		||||
  end
 | 
			
		||||
  describe '#paginate' do
 | 
			
		||||
    before do
 | 
			
		||||
      50.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
      @users = User.page(1)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    subject { helper.paginate @users, :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
    it { should be_a String }
 | 
			
		||||
 | 
			
		||||
    context 'escaping the pagination for javascript' do
 | 
			
		||||
      it 'should escape for javascript' do
 | 
			
		||||
        -> { helper.escape_javascript(helper.paginate @users, :params => {:controller => 'users', :action => 'index'}) }.should_not raise_error
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'accepts :theme option' do
 | 
			
		||||
      before { helper.controller.append_view_path File.join(Gem.loaded_specs['kaminari-core'].gem_dir, 'spec/fake_app/views') }
 | 
			
		||||
      after { helper.controller.view_paths.pop }
 | 
			
		||||
      subject { helper.paginate @users, :theme => "bootstrap", :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
      it { should match(/bootstrap-paginator/) }
 | 
			
		||||
      it { should match(/bootstrap-page-link/) }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'accepts :views_prefix option' do
 | 
			
		||||
      before { helper.controller.append_view_path File.join(Gem.loaded_specs['kaminari-core'].gem_dir, 'spec/fake_app/views') }
 | 
			
		||||
      after { helper.controller.view_paths.pop }
 | 
			
		||||
      subject { helper.paginate @users, :views_prefix => "alternative/", :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
      it { should eq("  <b>1</b>\n") }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'accepts :paginator_class option' do
 | 
			
		||||
      let(:custom_paginator) do
 | 
			
		||||
        Class.new(Kaminari::Helpers::Paginator) do
 | 
			
		||||
          def to_s
 | 
			
		||||
            "CUSTOM PAGINATION"
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      subject { helper.paginate @users, :paginator_class => custom_paginator, :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
      it { should eq("CUSTOM PAGINATION") }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "total_pages: 3" do
 | 
			
		||||
      subject { helper.paginate @users, :total_pages => 3, :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
      it { should match(/<a href="\/users\?page=3">Last/) }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "page: 20 (out of range)" do
 | 
			
		||||
      before  { @users = User.page(20) }
 | 
			
		||||
      subject { helper.paginate @users, :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
      it { should_not match(/Last/) }
 | 
			
		||||
      it { should_not match(/Next/) }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#link_to_previous_page' do
 | 
			
		||||
    before do
 | 
			
		||||
      60.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'having previous pages' do
 | 
			
		||||
      before do
 | 
			
		||||
        @users = User.page(3)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context 'the default behaviour' do
 | 
			
		||||
        subject { helper.link_to_previous_page @users, 'Previous', :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
        it { should match(/page=2/) }
 | 
			
		||||
        it { should match(/rel="prev"/) }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context 'overriding rel=' do
 | 
			
		||||
        subject { helper.link_to_previous_page @users, 'Previous', :rel => 'external', :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
        it { should match(/rel="external"/) }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context 'with params' do
 | 
			
		||||
        before do
 | 
			
		||||
          helper.params[:status] = "active"
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        subject { helper.link_to_previous_page @users, 'Previous', :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
        it { should match(/status=active/) }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'the first page' do
 | 
			
		||||
      before do
 | 
			
		||||
        @users = User.page(1)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      subject { helper.link_to_previous_page @users, 'Previous', :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
      it { should_not be }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'out of range' do
 | 
			
		||||
      before { @users = User.page(5) }
 | 
			
		||||
 | 
			
		||||
      subject { helper.link_to_next_page @users, 'More', :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
      it { should_not be }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#link_to_next_page' do
 | 
			
		||||
    before do
 | 
			
		||||
      50.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'having more page' do
 | 
			
		||||
      before do
 | 
			
		||||
        @users = User.page(1)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context 'the default behaviour' do
 | 
			
		||||
        subject { helper.link_to_next_page @users, 'More', :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
        it { should match(/page=2/) }
 | 
			
		||||
        it { should match(/rel="next"/) }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context 'overriding rel=' do
 | 
			
		||||
        subject { helper.link_to_next_page @users, 'More', :rel => 'external', :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
        it { should match(/rel="external"/) }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context 'with params' do
 | 
			
		||||
        before do
 | 
			
		||||
          helper.params[:status] = "active"
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        subject { helper.link_to_next_page @users, 'More', :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
        it { should match(/status=active/) }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'the last page' do
 | 
			
		||||
      before do
 | 
			
		||||
        @users = User.page(2)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      subject { helper.link_to_next_page @users, 'More', :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
      it { should_not be }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'out of range' do
 | 
			
		||||
      before { @users = User.page(5) }
 | 
			
		||||
 | 
			
		||||
      subject { helper.link_to_next_page @users, 'More', :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
      it { should_not be }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#page_entries_info' do
 | 
			
		||||
    context 'on a model without namespace' do
 | 
			
		||||
      before do
 | 
			
		||||
        @users = User.page(1).per(25)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context 'having no entries' do
 | 
			
		||||
        subject { helper.page_entries_info @users, :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
        it      { should == 'No users found' }
 | 
			
		||||
 | 
			
		||||
        context 'setting the entry name option to "member"' do
 | 
			
		||||
          subject { helper.page_entries_info @users, :entry_name => 'member', :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
          it      { should == 'No members found' }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context 'having 1 entry' do
 | 
			
		||||
        before do
 | 
			
		||||
          User.create! :name => 'user1'
 | 
			
		||||
          @users = User.page(1).per(25)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        subject { helper.page_entries_info @users, :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
        it      { should == 'Displaying <b>1</b> user' }
 | 
			
		||||
 | 
			
		||||
        context 'setting the entry name option to "member"' do
 | 
			
		||||
          subject { helper.page_entries_info @users, :entry_name => 'member', :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
          it      { should == 'Displaying <b>1</b> member' }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context 'having more than 1 but less than a page of entries' do
 | 
			
		||||
        before do
 | 
			
		||||
          10.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
          @users = User.page(1).per(25)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        subject { helper.page_entries_info @users, :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
        it      { should == 'Displaying <b>all 10</b> users' }
 | 
			
		||||
 | 
			
		||||
        context 'setting the entry name option to "member"' do
 | 
			
		||||
          subject { helper.page_entries_info @users, :entry_name => 'member', :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
          it      { should == 'Displaying <b>all 10</b> members' }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context 'having more than one page of entries' do
 | 
			
		||||
        before do
 | 
			
		||||
          50.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        describe 'the first page' do
 | 
			
		||||
          before do
 | 
			
		||||
            @users = User.page(1).per(25)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          subject { helper.page_entries_info @users, :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
          it      { should == 'Displaying users <b>1 - 25</b> of <b>50</b> in total' }
 | 
			
		||||
 | 
			
		||||
          context 'setting the entry name option to "member"' do
 | 
			
		||||
            subject { helper.page_entries_info @users, :entry_name => 'member', :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
            it      { should == 'Displaying members <b>1 - 25</b> of <b>50</b> in total' }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        describe 'the next page' do
 | 
			
		||||
          before do
 | 
			
		||||
            @users = User.page(2).per(25)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          subject { helper.page_entries_info @users, :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
          it      { should == 'Displaying users <b>26 - 50</b> of <b>50</b> in total' }
 | 
			
		||||
 | 
			
		||||
          context 'setting the entry name option to "member"' do
 | 
			
		||||
            subject { helper.page_entries_info @users, :entry_name => 'member', :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
            it      { should == 'Displaying members <b>26 - 50</b> of <b>50</b> in total' }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        describe 'the last page' do
 | 
			
		||||
          before do
 | 
			
		||||
            User.max_pages_per 4
 | 
			
		||||
            @users = User.page(4).per(10)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          after { User.max_pages_per nil }
 | 
			
		||||
 | 
			
		||||
          subject { helper.page_entries_info @users, :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
          it      { should == 'Displaying users <b>31 - 40</b> of <b>50</b> in total' }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'I18n' do
 | 
			
		||||
      before do
 | 
			
		||||
        50.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
        @users = User.page(1).per(25)
 | 
			
		||||
        I18n.backend.store_translations(:en, User.i18n_scope => { :models => { :user => { :one => "person", :other => "people" } } })
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      after do
 | 
			
		||||
        I18n.backend.reload!
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context 'page_entries_info translates entry' do
 | 
			
		||||
        subject { helper.page_entries_info @users, :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
        it      { should == 'Displaying people <b>1 - 25</b> of <b>50</b> in total' }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    context 'on a model with namespace' do
 | 
			
		||||
      before do
 | 
			
		||||
        @addresses = User::Address.page(1).per(25)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context 'having no entries' do
 | 
			
		||||
        subject { helper.page_entries_info @addresses, :params => {:controller => 'addresses', :action => 'index'} }
 | 
			
		||||
        it      { should == 'No addresses found' }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context 'having 1 entry' do
 | 
			
		||||
        before do
 | 
			
		||||
          User::Address.create!
 | 
			
		||||
          @addresses = User::Address.page(1).per(25)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        subject { helper.page_entries_info @addresses, :params => {:controller => 'addresses', :action => 'index'} }
 | 
			
		||||
        it      { should == 'Displaying <b>1</b> address' }
 | 
			
		||||
 | 
			
		||||
        context 'setting the entry name option to "place"' do
 | 
			
		||||
          subject { helper.page_entries_info @addresses, :entry_name => 'place', :params => {:controller => 'addresses', :action => 'index'} }
 | 
			
		||||
          it      { should == 'Displaying <b>1</b> place' }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context 'having more than 1 but less than a page of entries' do
 | 
			
		||||
        before do
 | 
			
		||||
          10.times { User::Address.create! }
 | 
			
		||||
          @addresses = User::Address.page(1).per(25)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        subject { helper.page_entries_info @addresses, :params => {:controller => 'addresses', :action => 'index'} }
 | 
			
		||||
        it      { should == 'Displaying <b>all 10</b> addresses' }
 | 
			
		||||
 | 
			
		||||
        context 'setting the entry name option to "place"' do
 | 
			
		||||
          subject { helper.page_entries_info @addresses, :entry_name => 'place', :params => {:controller => 'addresses', :action => 'index'} }
 | 
			
		||||
          it      { should == 'Displaying <b>all 10</b> places' }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context 'having more than one page of entries' do
 | 
			
		||||
        before do
 | 
			
		||||
          50.times { User::Address.create! }
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        describe 'the first page' do
 | 
			
		||||
          before do
 | 
			
		||||
            @addresses = User::Address.page(1).per(25)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          subject { helper.page_entries_info @addresses, :params => {:controller => 'addresses', :action => 'index'} }
 | 
			
		||||
          it      { should == 'Displaying addresses <b>1 - 25</b> of <b>50</b> in total' }
 | 
			
		||||
 | 
			
		||||
          context 'setting the entry name option to "place"' do
 | 
			
		||||
            subject { helper.page_entries_info @addresses, :entry_name => 'place', :params => {:controller => 'addresses', :action => 'index'} }
 | 
			
		||||
            it      { should == 'Displaying places <b>1 - 25</b> of <b>50</b> in total' }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        describe 'the next page' do
 | 
			
		||||
          before do
 | 
			
		||||
            @addresses = User::Address.page(2).per(25)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          subject { helper.page_entries_info @addresses, :params => {:controller => 'addresses', :action => 'index'} }
 | 
			
		||||
          it      { should == 'Displaying addresses <b>26 - 50</b> of <b>50</b> in total' }
 | 
			
		||||
 | 
			
		||||
          context 'setting the entry name option to "place"' do
 | 
			
		||||
            subject { helper.page_entries_info @addresses, :entry_name => 'place', :params => {:controller => 'addresses', :action => 'index'} }
 | 
			
		||||
            it      { should == 'Displaying places <b>26 - 50</b> of <b>50</b> in total' }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'on a PaginatableArray' do
 | 
			
		||||
      before do
 | 
			
		||||
        @numbers = Kaminari.paginate_array(%w{one two three}).page(1)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      subject { helper.page_entries_info @numbers }
 | 
			
		||||
      it      { should == 'Displaying <b>all 3</b> entries' }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#rel_next_prev_link_tags' do
 | 
			
		||||
    before do
 | 
			
		||||
      31.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    subject { helper.rel_next_prev_link_tags users, :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
 | 
			
		||||
    context 'the first page' do
 | 
			
		||||
      let(:users) { User.page(1).per(10) }
 | 
			
		||||
 | 
			
		||||
      it { should_not match(/rel="prev"/) }
 | 
			
		||||
      it { should match(/rel="next"/) }
 | 
			
		||||
      it { should match(/\?page=2/) }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'the second page' do
 | 
			
		||||
      let(:users) { User.page(2).per(10) }
 | 
			
		||||
 | 
			
		||||
      it { should match(/rel="prev"/) }
 | 
			
		||||
      it { should_not match(/\?page=1/) }
 | 
			
		||||
      it { should match(/rel="next"/) }
 | 
			
		||||
      it { should match(/\?page=3/) }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'the last page' do
 | 
			
		||||
      let(:users) { User.page(4).per(10) }
 | 
			
		||||
 | 
			
		||||
      it { should match(/rel="prev"/) }
 | 
			
		||||
      it { should match(/\?page=3"/) }
 | 
			
		||||
      it { should_not match(/rel="next"/) }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#path_to_next_page' do
 | 
			
		||||
    before do
 | 
			
		||||
      2.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    subject { helper.path_to_next_page users, :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
 | 
			
		||||
    context 'the first page' do
 | 
			
		||||
      let(:users) { User.page(1).per(1) }
 | 
			
		||||
      it { should eql '/users?page=2' }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'the last page' do
 | 
			
		||||
      let(:users) { User.page(2).per(1) }
 | 
			
		||||
      it { should be nil }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#path_to_prev_page' do
 | 
			
		||||
    before do
 | 
			
		||||
      3.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    subject { helper.path_to_prev_page users, :params => {:controller => 'users', :action => 'index'} }
 | 
			
		||||
 | 
			
		||||
    context 'the first page' do
 | 
			
		||||
      let(:users) { User.page(1).per(1) }
 | 
			
		||||
      it { should be nil }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'the second page' do
 | 
			
		||||
      let(:users) { User.page(2).per(1) }
 | 
			
		||||
      it { should eql '/users' }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'the last page' do
 | 
			
		||||
      let(:users) { User.page(3).per(1) }
 | 
			
		||||
      it { should eql '/users?page=2' }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,301 +0,0 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'spec_helper'
 | 
			
		||||
 | 
			
		||||
describe 'Kaminari::Helpers' do
 | 
			
		||||
  describe 'Tag' do
 | 
			
		||||
    describe '#page_url_for', :if => defined?(::Rails::Railtie) do
 | 
			
		||||
      before do
 | 
			
		||||
        helper.params[:controller] = 'users'
 | 
			
		||||
        helper.params[:action]     = 'index'
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context "for first page" do
 | 
			
		||||
        subject { Kaminari::Helpers::Tag.new(helper).page_url_for(1) }
 | 
			
		||||
        it { should == "/users" }
 | 
			
		||||
 | 
			
		||||
        context 'config.params_on_first_page == false' do
 | 
			
		||||
          before { Kaminari.config.params_on_first_page = true }
 | 
			
		||||
          after  { Kaminari.config.params_on_first_page = false }
 | 
			
		||||
          it { should == "/users?page=1" }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context "with a friendly route setting" do
 | 
			
		||||
        before do
 | 
			
		||||
          helper.params[:controller] = 'addresses'
 | 
			
		||||
          helper.params[:action]     = 'index'
 | 
			
		||||
          helper.params[:page]       = 3
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        context "for first page" do
 | 
			
		||||
          subject { Kaminari::Helpers::Tag.new(helper).page_url_for(1) }
 | 
			
		||||
          it { should == "/addresses" }
 | 
			
		||||
 | 
			
		||||
          context 'config.params_on_first_page == false' do
 | 
			
		||||
            before { Kaminari.config.params_on_first_page = true }
 | 
			
		||||
            after  { Kaminari.config.params_on_first_page = false }
 | 
			
		||||
            it { should match("/addresses/page/1") }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        context "for other page" do
 | 
			
		||||
          subject { Kaminari::Helpers::Tag.new(helper).page_url_for(5) }
 | 
			
		||||
          it { should == "/addresses/page/5" }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context "with param_name = 'user[page]' option" do
 | 
			
		||||
        before do
 | 
			
		||||
          helper.params[:user] = {:page => "3", :scope => "active"}
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        context "for first page" do
 | 
			
		||||
          subject { Kaminari::Helpers::Tag.new(helper, :param_name => "user[page]").page_url_for(1) }
 | 
			
		||||
 | 
			
		||||
          it { should_not match(/user%5Bpage%5D=\d+/) } # not match user[page]=\d+
 | 
			
		||||
          it { should match(/user%5Bscope%5D=active/) } #     match user[scope]=active
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        context "for other page" do
 | 
			
		||||
          subject { Kaminari::Helpers::Tag.new(helper, :param_name => "user[page]").page_url_for(2) }
 | 
			
		||||
 | 
			
		||||
          it { should match(/user%5Bpage%5D=2/) }       # match user[page]=2
 | 
			
		||||
          it { should match(/user%5Bscope%5D=active/) } # match user[scope]=active
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context "with param_name = 'foo.page' option" do
 | 
			
		||||
        before do
 | 
			
		||||
          helper.params['foo.page'] = 2
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        context "for first page" do
 | 
			
		||||
          subject { Kaminari::Helpers::Tag.new(helper, :param_name => "foo.page").page_url_for(1) }
 | 
			
		||||
          it { should_not match(/foo\.page=\d+/) }
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        context "for other page" do
 | 
			
		||||
          subject { Kaminari::Helpers::Tag.new(helper, :param_name => "foo.page").page_url_for(2) }
 | 
			
		||||
          it { should match(/foo\.page=\d+/) }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe 'Paginator' do
 | 
			
		||||
    describe 'Paginator::PageProxy' do
 | 
			
		||||
      describe '#current?' do
 | 
			
		||||
        context 'current_page == page' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 26}, 26, nil) }
 | 
			
		||||
          its(:current?) { should be_true }
 | 
			
		||||
        end
 | 
			
		||||
        context 'current_page != page' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 13}, 26, nil) }
 | 
			
		||||
          its(:current?) { should_not be_true }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe '#first?' do
 | 
			
		||||
        context 'page == 1' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 26}, 1, nil) }
 | 
			
		||||
          its(:first?) { should be_true }
 | 
			
		||||
        end
 | 
			
		||||
        context 'page != 1' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 13}, 2, nil) }
 | 
			
		||||
          its(:first?) { should_not be_true }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe '#last?' do
 | 
			
		||||
        context 'current_page == page' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:total_pages => 39}, 39, nil) }
 | 
			
		||||
          its(:last?) { should be_true }
 | 
			
		||||
        end
 | 
			
		||||
        context 'current_page != page' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:total_pages => 39}, 38, nil) }
 | 
			
		||||
          its(:last?) { should_not be_true }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe '#next?' do
 | 
			
		||||
        context 'page == current_page + 1' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 52}, 53, nil) }
 | 
			
		||||
          its(:next?) { should be_true }
 | 
			
		||||
        end
 | 
			
		||||
        context 'page != current_page + 1' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 52}, 77, nil) }
 | 
			
		||||
          its(:next?) { should_not be_true }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe '#prev?' do
 | 
			
		||||
        context 'page == current_page - 1' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 77}, 76, nil) }
 | 
			
		||||
          its(:prev?) { should be_true }
 | 
			
		||||
        end
 | 
			
		||||
        context 'page != current_page + 1' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 77}, 80, nil) }
 | 
			
		||||
          its(:prev?) { should_not be_true }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe '#rel' do
 | 
			
		||||
        context 'page == current_page - 1' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 77}, 76, nil) }
 | 
			
		||||
          its(:rel) { should eq 'prev' }
 | 
			
		||||
        end
 | 
			
		||||
        context 'page == current_page' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 78}, 78, nil) }
 | 
			
		||||
          its(:rel) { should be_nil }
 | 
			
		||||
        end
 | 
			
		||||
        context 'page == current_page + 1' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 52}, 53, nil) }
 | 
			
		||||
          its(:rel) { should eq 'next' }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe '#left_outer?' do
 | 
			
		||||
        context 'current_page == left' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:left => 3}, 3, nil) }
 | 
			
		||||
          its(:left_outer?) { should be_true }
 | 
			
		||||
        end
 | 
			
		||||
        context 'current_page == left + 1' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:left => 3}, 4, nil) }
 | 
			
		||||
          its(:left_outer?) { should_not be_true }
 | 
			
		||||
        end
 | 
			
		||||
        context 'current_page == left + 2' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:left => 3}, 5, nil) }
 | 
			
		||||
          its(:left_outer?) { should_not be_true }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe '#right_outer?' do
 | 
			
		||||
        context 'total_pages - page > right' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:total_pages => 10, :right => 3}, 6, nil) }
 | 
			
		||||
          its(:right_outer?) { should_not be_true }
 | 
			
		||||
        end
 | 
			
		||||
        context 'total_pages - page == right' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:total_pages => 10, :right => 3}, 7, nil) }
 | 
			
		||||
          its(:right_outer?) { should_not be_true }
 | 
			
		||||
        end
 | 
			
		||||
        context 'total_pages - page < right' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:total_pages => 10, :right => 3}, 8, nil) }
 | 
			
		||||
          its(:right_outer?) { should be_true }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe '#inside_window?' do
 | 
			
		||||
        context 'page > current_page' do
 | 
			
		||||
          context 'page - current_page > window' do
 | 
			
		||||
            subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 4, :window => 5}, 10, nil) }
 | 
			
		||||
            its(:inside_window?) { should_not be_true }
 | 
			
		||||
          end
 | 
			
		||||
          context 'page - current_page == window' do
 | 
			
		||||
            subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 4, :window => 6}, 10, nil) }
 | 
			
		||||
            its(:inside_window?) { should be_true }
 | 
			
		||||
          end
 | 
			
		||||
          context 'page - current_page < window' do
 | 
			
		||||
            subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 4, :window => 7}, 10, nil) }
 | 
			
		||||
            its(:inside_window?) { should be_true }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
        context 'current_page > page' do
 | 
			
		||||
          context 'current_page - page > window' do
 | 
			
		||||
            subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 15, :window => 4}, 10, nil) }
 | 
			
		||||
            its(:inside_window?) { should_not be_true }
 | 
			
		||||
          end
 | 
			
		||||
          context 'current_page - page == window' do
 | 
			
		||||
            subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 15, :window => 5}, 10, nil) }
 | 
			
		||||
            its(:inside_window?) { should be_true }
 | 
			
		||||
          end
 | 
			
		||||
          context 'current_page - page < window' do
 | 
			
		||||
            subject { Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 15, :window => 6}, 10, nil) }
 | 
			
		||||
            its(:inside_window?) { should be_true }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
      describe '#was_truncated?' do
 | 
			
		||||
        before do
 | 
			
		||||
          stub(@template = Object.new) do
 | 
			
		||||
            options { {} }
 | 
			
		||||
            params { {} }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
        context 'last.is_a? Gap' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({}, 10, Kaminari::Helpers::Gap.new(@template)) }
 | 
			
		||||
          its(:was_truncated?) { should be_true }
 | 
			
		||||
        end
 | 
			
		||||
        context 'last.is not a Gap' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({}, 10, Kaminari::Helpers::Page.new(@template)) }
 | 
			
		||||
          its(:was_truncated?) { should_not be_true }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
      describe "#single_gap?" do
 | 
			
		||||
        let(:window_options) do
 | 
			
		||||
          {
 | 
			
		||||
            :left => 1,
 | 
			
		||||
            :window => 1,
 | 
			
		||||
            :right => 1,
 | 
			
		||||
            :total_pages => 9
 | 
			
		||||
          }
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        def gap_for(page)
 | 
			
		||||
          Kaminari::Helpers::Paginator::PageProxy.new(window_options, page, nil)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        context "in case of '1 ... 4 5 6 ... 9'" do
 | 
			
		||||
          before { window_options[:current_page] = 5 }
 | 
			
		||||
 | 
			
		||||
          its("gap for 2") { gap_for(2).should_not be_a_single_gap }
 | 
			
		||||
          its("gap for 3") { gap_for(3).should_not be_a_single_gap }
 | 
			
		||||
          its("gap for 7") { gap_for(7).should_not be_a_single_gap }
 | 
			
		||||
          its("gap for 8") { gap_for(8).should_not be_a_single_gap }
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        context "in case of '1 ... 3 4 5 ... 9'" do
 | 
			
		||||
          before { window_options[:current_page] = 4 }
 | 
			
		||||
 | 
			
		||||
          its("gap for 2") { gap_for(2).should be_a_single_gap }
 | 
			
		||||
          its("gap for 6") { gap_for(6).should_not be_a_single_gap }
 | 
			
		||||
          its("gap for 8") { gap_for(8).should_not be_a_single_gap }
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        context "in case of '1 ... 3 4 5 ... 7'" do
 | 
			
		||||
          before do
 | 
			
		||||
            window_options[:current_page] = 4
 | 
			
		||||
            window_options[:total_pages] = 7
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          its("gap for 2") { gap_for(2).should be_a_single_gap }
 | 
			
		||||
          its("gap for 6") { gap_for(6).should be_a_single_gap }
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        context "in case of '1 ... 5 6 7 ... 9'" do
 | 
			
		||||
          before { window_options[:current_page] = 6 }
 | 
			
		||||
 | 
			
		||||
          its("gap for 2") { gap_for(2).should_not be_a_single_gap }
 | 
			
		||||
          its("gap for 4") { gap_for(4).should_not be_a_single_gap }
 | 
			
		||||
          its("gap for 8") { gap_for(8).should be_a_single_gap }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe "#out_of_range?" do
 | 
			
		||||
        context 'within range' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:total_pages => 5}, 4, nil).out_of_range? }
 | 
			
		||||
          it { should == false }
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        context 'on last page' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:total_pages => 5}, 5, nil).out_of_range? }
 | 
			
		||||
          it { should == false }
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        context 'out of range' do
 | 
			
		||||
          subject { Kaminari::Helpers::Paginator::PageProxy.new({:total_pages => 5}, 6, nil).out_of_range? }
 | 
			
		||||
          it { should == true }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,58 +0,0 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'spec_helper'
 | 
			
		||||
 | 
			
		||||
if defined? ActiveRecord
 | 
			
		||||
  describe Kaminari::ActiveRecordRelationMethods do
 | 
			
		||||
    describe '#total_count' do
 | 
			
		||||
      before do
 | 
			
		||||
        @author = User.create! :name => 'author'
 | 
			
		||||
        @author2 = User.create! :name => 'author2'
 | 
			
		||||
        @author3 = User.create! :name => 'author3'
 | 
			
		||||
        @books = 2.times.map {|i| @author.books_authored.create!(:title => "title%03d" % i) }
 | 
			
		||||
        @books2 = 3.times.map {|i| @author2.books_authored.create!(:title => "title%03d" % i) }
 | 
			
		||||
        @books3 = 4.times.map {|i| @author3.books_authored.create!(:title => "subject%03d" % i) }
 | 
			
		||||
        @readers = 4.times.map { User.create! :name => 'reader' }
 | 
			
		||||
        @books.each {|book| book.readers << @readers }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context "when the scope is cloned" do
 | 
			
		||||
        it "should reset total_count memoization" do
 | 
			
		||||
          User.page.tap(&:total_count).where(:name => 'author').total_count.should == 1
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context "when the scope includes an order which references a generated column" do
 | 
			
		||||
        it "should successfully count the results" do
 | 
			
		||||
          @author.readers.by_read_count.page(1).total_count.should == @readers.size
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context "when the scope use conditions on includes" do
 | 
			
		||||
        it "should keep includes and successfully count the results" do
 | 
			
		||||
          # Only @author and @author2 have books titled with the title00x pattern
 | 
			
		||||
          User.includes(:books_authored).references(:books).where("books.title LIKE 'title00%'").page(1).total_count.should == 2
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context 'when the Relation has custom select clause' do
 | 
			
		||||
        specify do
 | 
			
		||||
          -> { User.select('*, 1 as one').page(1).total_count }.should_not raise_exception
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context "when total_count receives options" do
 | 
			
		||||
        it "should ignore the options for rails 4.1+" do
 | 
			
		||||
          User.page(1).total_count(:name, :distinct => true).should == 7
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      context "when the scope returns an ActiveSupport::OrderedHash" do
 | 
			
		||||
        it "should not throw exception by passing options to count" do
 | 
			
		||||
          lambda {
 | 
			
		||||
            @author.readers.by_read_count.page(1).total_count(:name, :distinct => true)
 | 
			
		||||
          }.should_not raise_exception
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,10 +0,0 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'spec_helper'
 | 
			
		||||
 | 
			
		||||
if defined? ActiveRecord
 | 
			
		||||
  describe Kaminari::ActiveRecordModelExtension do
 | 
			
		||||
    subject { Class.new(ActiveRecord::Base) }
 | 
			
		||||
    it { should respond_to :page }
 | 
			
		||||
    it { should respond_to :fake_gem_defined_method }
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,395 +0,0 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'spec_helper'
 | 
			
		||||
 | 
			
		||||
if defined? ActiveRecord
 | 
			
		||||
  describe Kaminari::ActiveRecordModelExtension do
 | 
			
		||||
    before do
 | 
			
		||||
      Kaminari.configure do |config|
 | 
			
		||||
        config.page_method_name = :per_page_kaminari
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    subject { Class.new ActiveRecord::Base }
 | 
			
		||||
    it { should respond_to(:per_page_kaminari) }
 | 
			
		||||
    it { should_not respond_to(:page) }
 | 
			
		||||
 | 
			
		||||
    after do
 | 
			
		||||
      Kaminari.configure do |config|
 | 
			
		||||
        config.page_method_name = :page
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe Kaminari::ActiveRecordExtension do
 | 
			
		||||
    shared_examples_for 'the first page' do
 | 
			
		||||
      it { should have(25).users }
 | 
			
		||||
      its('first.name') { should == 'user001' }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    shared_examples_for 'blank page' do
 | 
			
		||||
      it { should have(0).users }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    before :all do
 | 
			
		||||
      [User, GemDefinedModel, Device].each do |m|
 | 
			
		||||
        1.upto(100) {|i| m.create! :name => "user#{'%03d' % i}", :age => (i / 10)}
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    after :all do
 | 
			
		||||
      [User, GemDefinedModel, Device].each(&:delete_all)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    [User, Admin, GemDefinedModel, Device].each do |model_class|
 | 
			
		||||
      context "for #{model_class}" do
 | 
			
		||||
        describe '#page' do
 | 
			
		||||
          context 'page 1' do
 | 
			
		||||
            subject { model_class.page 1 }
 | 
			
		||||
            it_should_behave_like 'the first page'
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'page 2' do
 | 
			
		||||
            subject { model_class.page 2 }
 | 
			
		||||
            it { should have(25).users }
 | 
			
		||||
            its('first.name') { should == 'user026' }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'page without an argument' do
 | 
			
		||||
            subject { model_class.page }
 | 
			
		||||
            it_should_behave_like 'the first page'
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'page < 1' do
 | 
			
		||||
            subject { model_class.page 0 }
 | 
			
		||||
            it_should_behave_like 'the first page'
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'page > max page' do
 | 
			
		||||
            subject { model_class.page 5 }
 | 
			
		||||
            it_should_behave_like 'blank page'
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          describe 'ensure #order_values is preserved' do
 | 
			
		||||
            subject { model_class.order('id').page 1 }
 | 
			
		||||
            its('order_values.uniq') { should == ['id'] }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        describe '#per' do
 | 
			
		||||
          context 'page 1 per 5' do
 | 
			
		||||
            subject { model_class.page(1).per(5) }
 | 
			
		||||
            it { should have(5).users }
 | 
			
		||||
            its('first.name') { should == 'user001' }
 | 
			
		||||
 | 
			
		||||
            context 'with max_per_page < 5' do
 | 
			
		||||
              before { model_class.max_paginates_per 4 }
 | 
			
		||||
              it { should have(4).users }
 | 
			
		||||
              after { model_class.max_paginates_per nil }
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context "page 1 per nil (using default)" do
 | 
			
		||||
            subject { model_class.page(1).per(nil) }
 | 
			
		||||
            it { should have(model_class.default_per_page).users }
 | 
			
		||||
 | 
			
		||||
            context 'with max_per_page < default_per_page' do
 | 
			
		||||
              around do |example|
 | 
			
		||||
                begin
 | 
			
		||||
                  model_class.max_paginates_per(10)
 | 
			
		||||
                  example.run
 | 
			
		||||
                ensure
 | 
			
		||||
                  model_class.max_paginates_per(nil)
 | 
			
		||||
                end
 | 
			
		||||
              end
 | 
			
		||||
 | 
			
		||||
              it { should have(10).users }
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context "page 1 per 0" do
 | 
			
		||||
            subject { model_class.page(1).per(0) }
 | 
			
		||||
            it { should have(0).users }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          # I know it's a bit strange to have this here, but I couldn't find any better place for this case
 | 
			
		||||
          context 'when max_per_page is given via model class, and `per` is not actually called' do
 | 
			
		||||
            subject { model_class.page(1) }
 | 
			
		||||
 | 
			
		||||
            context 'with max_per_page > default_per_page' do
 | 
			
		||||
              around do |example|
 | 
			
		||||
                begin
 | 
			
		||||
                  model_class.max_paginates_per(200)
 | 
			
		||||
                  example.run
 | 
			
		||||
                ensure
 | 
			
		||||
                  model_class.max_paginates_per(nil)
 | 
			
		||||
                end
 | 
			
		||||
              end
 | 
			
		||||
 | 
			
		||||
              it { should have(25).users }
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            context 'with max_per_page < default_per_page' do
 | 
			
		||||
              around do |example|
 | 
			
		||||
                begin
 | 
			
		||||
                  model_class.max_paginates_per(5)
 | 
			
		||||
                  example.run
 | 
			
		||||
                ensure
 | 
			
		||||
                  model_class.max_paginates_per(nil)
 | 
			
		||||
                end
 | 
			
		||||
              end
 | 
			
		||||
 | 
			
		||||
              it { should have(5).users }
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        describe '#max_paginates_per' do
 | 
			
		||||
          around do |example|
 | 
			
		||||
            begin
 | 
			
		||||
              model_class.max_paginates_per(10)
 | 
			
		||||
              example.run
 | 
			
		||||
            ensure
 | 
			
		||||
              model_class.max_paginates_per(nil)
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'calling max_paginates_per() after per()' do
 | 
			
		||||
            context 'when #max_paginates_per is greater than #per' do
 | 
			
		||||
              subject { model_class.page(1).per(15).max_paginates_per(20) }
 | 
			
		||||
              it { should have(15).users }
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            context 'when #per is greater than #max_paginates_per' do
 | 
			
		||||
              subject { model_class.page(1).per(30).max_paginates_per(20) }
 | 
			
		||||
              it { should have(20).users }
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            context 'when nil is given to #per and #max_paginates_per is specified' do
 | 
			
		||||
              subject { model_class.page(1).per(nil).max_paginates_per(20) }
 | 
			
		||||
              it { should have(20).users }
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'calling max_paginates_per() before per()' do
 | 
			
		||||
            context 'when #max_paginates_per is greater than #per' do
 | 
			
		||||
              subject { model_class.page(1).max_paginates_per(20).per(15) }
 | 
			
		||||
              it { should have(15).users }
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            context 'when #per is greater than #max_paginates_per' do
 | 
			
		||||
              subject { model_class.page(1).max_paginates_per(20).per(30) }
 | 
			
		||||
              it { should have(20).users }
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            context 'when nil is given to #per and #max_paginates_per is specified' do
 | 
			
		||||
              subject { model_class.page(1).max_paginates_per(20).per(nil) }
 | 
			
		||||
              it { should have(20).users }
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'calling max_paginates_per() without per()' do
 | 
			
		||||
            context 'when #max_paginates_per is greater than the default per_page' do
 | 
			
		||||
              subject { model_class.page(1).max_paginates_per(20) }
 | 
			
		||||
              it { should have(20).users }
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            context 'when #max_paginates_per is less than the default per_page' do
 | 
			
		||||
              subject { model_class.page(1).max_paginates_per(30) }
 | 
			
		||||
              it { should have(25).users }
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        describe '#padding' do
 | 
			
		||||
          context 'page 1 per 5 padding 1' do
 | 
			
		||||
            subject { model_class.page(1).per(5).padding(1) }
 | 
			
		||||
            it { should have(5).users }
 | 
			
		||||
            its('first.name') { should == 'user002' }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'page 19 per 5 padding 5' do
 | 
			
		||||
            subject { model_class.page(19).per(5).padding(5) }
 | 
			
		||||
            its(:current_page) { should == 19 }
 | 
			
		||||
            its(:total_pages) { should == 19 }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        describe '#total_pages' do
 | 
			
		||||
          context 'per 25 (default)' do
 | 
			
		||||
            subject { model_class.page }
 | 
			
		||||
            its(:total_pages) { should == 4 }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'per 7' do
 | 
			
		||||
            subject { model_class.page(2).per(7) }
 | 
			
		||||
            its(:total_pages) { should == 15 }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'per 65536' do
 | 
			
		||||
            subject { model_class.page(50).per(65536) }
 | 
			
		||||
            its(:total_pages) { should == 1 }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'per 0' do
 | 
			
		||||
            subject { model_class.page(50).per(0) }
 | 
			
		||||
            it "raises Kaminari::ZeroPerPageOperation" do
 | 
			
		||||
              expect { subject.total_pages }.to raise_error(Kaminari::ZeroPerPageOperation)
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'per -1 (using default)' do
 | 
			
		||||
            subject { model_class.page(5).per(-1) }
 | 
			
		||||
            its(:total_pages) { should == 4 }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'per "String value that can not be converted into Number" (using default)' do
 | 
			
		||||
            subject { model_class.page(5).per('aho') }
 | 
			
		||||
            its(:total_pages) { should == 4 }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'with max_pages < total pages count from database' do
 | 
			
		||||
            before { model_class.max_pages_per 3 }
 | 
			
		||||
            subject { model_class.page }
 | 
			
		||||
            its(:total_pages) { should == 3 }
 | 
			
		||||
            after { model_class.max_pages_per nil }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'with max_pages > total pages count from database' do
 | 
			
		||||
            before { model_class.max_pages_per 11 }
 | 
			
		||||
            subject { model_class.page }
 | 
			
		||||
            its(:total_pages) { should == 4 }
 | 
			
		||||
            after { model_class.max_pages_per nil }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'with max_pages is nil' do
 | 
			
		||||
            before { model_class.max_pages_per nil }
 | 
			
		||||
            subject { model_class.page }
 | 
			
		||||
            its(:total_pages) { should == 4 }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context "with per(nil) using default" do
 | 
			
		||||
            subject { model_class.page.per(nil) }
 | 
			
		||||
            its(:total_pages) { should == 4 }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        describe '#current_page' do
 | 
			
		||||
          context 'any page, per 0' do
 | 
			
		||||
            subject { model_class.page.per(0) }
 | 
			
		||||
            it "raises Kaminari::ZeroPerPageOperation" do
 | 
			
		||||
              expect { subject.current_page }.to raise_error(Kaminari::ZeroPerPageOperation)
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'page 1' do
 | 
			
		||||
            subject { model_class.page }
 | 
			
		||||
            its(:current_page) { should == 1 }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'page 2' do
 | 
			
		||||
            subject { model_class.page(2).per 3 }
 | 
			
		||||
            its(:current_page) { should == 2 }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        describe '#next_page' do
 | 
			
		||||
          context 'page 1' do
 | 
			
		||||
            subject { model_class.page }
 | 
			
		||||
            its(:next_page) { should == 2 }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'page 5' do
 | 
			
		||||
            subject { model_class.page(5) }
 | 
			
		||||
            its(:next_page) { should be_nil }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        describe '#prev_page' do
 | 
			
		||||
          context 'page 1' do
 | 
			
		||||
            subject { model_class.page }
 | 
			
		||||
            its(:prev_page) { should be_nil }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'page 3' do
 | 
			
		||||
            subject { model_class.page(3) }
 | 
			
		||||
            its(:prev_page) { should == 2 }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'page 5' do
 | 
			
		||||
            subject { model_class.page(5) }
 | 
			
		||||
            its(:prev_page) { should be_nil }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        describe '#first_page?' do
 | 
			
		||||
          context 'on first page' do
 | 
			
		||||
            subject { model_class.page(1).per(10) }
 | 
			
		||||
            its(:first_page?) { should == true }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'not on first page' do
 | 
			
		||||
            subject { model_class.page(5).per(10) }
 | 
			
		||||
            its(:first_page?) { should == false }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        describe '#last_page?' do
 | 
			
		||||
          context 'on last page' do
 | 
			
		||||
            subject { model_class.page(10).per(10) }
 | 
			
		||||
            its(:last_page?) { should == true }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'within range' do
 | 
			
		||||
            subject { model_class.page(1).per(10) }
 | 
			
		||||
            its(:last_page?) { should == false }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'out of range' do
 | 
			
		||||
            subject { model_class.page(11).per(10) }
 | 
			
		||||
            its(:last_page?) { should == false }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        describe '#out_of_range?' do
 | 
			
		||||
          context 'on last page' do
 | 
			
		||||
            subject { model_class.page(10).per(10) }
 | 
			
		||||
            its(:out_of_range?) { should == false }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'within range' do
 | 
			
		||||
            subject { model_class.page(1).per(10) }
 | 
			
		||||
            its(:out_of_range?) { should == false }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'out of range' do
 | 
			
		||||
            subject { model_class.page(11).per(10) }
 | 
			
		||||
            its(:out_of_range?) { should == true }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        describe '#count' do
 | 
			
		||||
          context 'page 1' do
 | 
			
		||||
            subject { model_class.page }
 | 
			
		||||
            its(:count) { should == 25 }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          context 'page 2' do
 | 
			
		||||
            subject { model_class.page 2 }
 | 
			
		||||
            its(:count) { should == 25 }
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        context 'chained with .group' do
 | 
			
		||||
          subject { model_class.group('age').page(2).per 5 }
 | 
			
		||||
          # 0..10
 | 
			
		||||
          its(:total_count) { should == 11 }
 | 
			
		||||
          its(:total_pages) { should == 3 }
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        context 'activerecord descendants' do
 | 
			
		||||
          subject { ActiveRecord::Base.descendants }
 | 
			
		||||
          its(:length) { should_not == 0 }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,192 +0,0 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'spec_helper'
 | 
			
		||||
 | 
			
		||||
describe Kaminari::PaginatableArray do
 | 
			
		||||
  it { should have(0).items }
 | 
			
		||||
 | 
			
		||||
  context 'specifying limit and offset when initializing' do
 | 
			
		||||
    subject { Kaminari::PaginatableArray.new((1..100).to_a, :limit => 10, :offset => 20) }
 | 
			
		||||
    its(:current_page) { should == 3 }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  let(:array) { Kaminari::PaginatableArray.new((1..100).to_a) }
 | 
			
		||||
  describe '#page' do
 | 
			
		||||
    shared_examples_for 'the first page of array' do
 | 
			
		||||
      it { should have(25).users }
 | 
			
		||||
      its(:current_page) { should == 1 }
 | 
			
		||||
      its(:first) { should == 1 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    shared_examples_for 'blank array page' do
 | 
			
		||||
      it { should have(0).items }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'page 1' do
 | 
			
		||||
      subject { array.page 1 }
 | 
			
		||||
      it_should_behave_like 'the first page of array'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'page 2' do
 | 
			
		||||
      subject { array.page 2 }
 | 
			
		||||
      it { should have(25).users }
 | 
			
		||||
      its(:current_page) { should == 2 }
 | 
			
		||||
      its(:first) { should == 26 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'page without an argument' do
 | 
			
		||||
      subject { array.page }
 | 
			
		||||
      it_should_behave_like 'the first page of array'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'page < 1' do
 | 
			
		||||
      subject { array.page 0 }
 | 
			
		||||
      it_should_behave_like 'the first page of array'
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'page > max page' do
 | 
			
		||||
      subject { array.page 5 }
 | 
			
		||||
      it_should_behave_like 'blank array page'
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#per' do
 | 
			
		||||
    context 'page 1 per 5' do
 | 
			
		||||
      subject { array.page(1).per(5) }
 | 
			
		||||
      it { should have(5).users }
 | 
			
		||||
      its(:first) { should == 1 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "page 1 per 0" do
 | 
			
		||||
      subject { array.page(1).per(0) }
 | 
			
		||||
      it { should have(0).users }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#total_pages' do
 | 
			
		||||
    context 'per 25 (default)' do
 | 
			
		||||
      subject { array.page }
 | 
			
		||||
      its(:total_pages) { should == 4 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'per 7' do
 | 
			
		||||
      subject { array.page(2).per(7) }
 | 
			
		||||
      its(:total_pages) { should == 15 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'per 65536' do
 | 
			
		||||
      subject { array.page(50).per(65536) }
 | 
			
		||||
      its(:total_pages) { should == 1 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'per 0' do
 | 
			
		||||
      subject { array.page(50).per(0) }
 | 
			
		||||
      it "raises Kaminari::ZeroPerPageOperation" do
 | 
			
		||||
        expect { subject.total_pages }.to raise_error(Kaminari::ZeroPerPageOperation)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'per -1 (using default)' do
 | 
			
		||||
      subject { array.page(5).per(-1) }
 | 
			
		||||
      its(:total_pages) { should == 4 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'per "String value that can not be converted into Number" (using default)' do
 | 
			
		||||
      subject { array.page(5).per('aho') }
 | 
			
		||||
      its(:total_pages) { should == 4 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'per 25, padding 25' do
 | 
			
		||||
      subject { array.page(1).padding(25) }
 | 
			
		||||
      its(:total_pages) { should == 3 }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#current_page' do
 | 
			
		||||
    context 'any page, per 0' do
 | 
			
		||||
      subject { array.page.per(0) }
 | 
			
		||||
      it "raises Kaminari::ZeroPerPageOperation" do
 | 
			
		||||
        expect { subject.current_page }.to raise_error(Kaminari::ZeroPerPageOperation)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'page 1' do
 | 
			
		||||
      subject { array.page }
 | 
			
		||||
      its(:current_page) { should == 1 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'page 2' do
 | 
			
		||||
      subject { array.page(2).per 3 }
 | 
			
		||||
      its(:current_page) { should == 2 }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#next_page' do
 | 
			
		||||
    context 'page 1' do
 | 
			
		||||
      subject { array.page }
 | 
			
		||||
      its(:next_page) { should == 2 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'page 5' do
 | 
			
		||||
      subject { array.page 5 }
 | 
			
		||||
      its(:next_page) { should be_nil }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#prev_page' do
 | 
			
		||||
    context 'page 1' do
 | 
			
		||||
      subject { array.page }
 | 
			
		||||
      its(:prev_page) { should be_nil }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'page 3' do
 | 
			
		||||
      subject { array.page 3 }
 | 
			
		||||
      its(:prev_page) { should == 2 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'page 5' do
 | 
			
		||||
      subject { array.page 5 }
 | 
			
		||||
      its(:prev_page) { should be_nil }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#count' do
 | 
			
		||||
    context 'page 1' do
 | 
			
		||||
      subject { array.page }
 | 
			
		||||
      its(:count) { should == 25 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context 'page 2' do
 | 
			
		||||
      subject { array.page 2 }
 | 
			
		||||
      its(:count) { should == 25 }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  context 'when setting total count explicitly' do
 | 
			
		||||
    context "array 1..10, page 5, per 10, total_count 9999" do
 | 
			
		||||
      subject { Kaminari::PaginatableArray.new((1..10).to_a, :total_count => 9999).page(5).per(10) }
 | 
			
		||||
 | 
			
		||||
      it { should have(10).items }
 | 
			
		||||
      its(:first) { should == 1 }
 | 
			
		||||
      its(:current_page) { should == 5 }
 | 
			
		||||
      its(:total_count) { should == 9999 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "array 1..15, page 1, per 10, total_count 15" do
 | 
			
		||||
      subject { Kaminari.paginate_array((1..15).to_a, :total_count => 15).page(1).per(10) }
 | 
			
		||||
 | 
			
		||||
      it { should have(10).items }
 | 
			
		||||
      its(:first) { should == 1 }
 | 
			
		||||
      its(:current_page) { should == 1 }
 | 
			
		||||
      its(:total_count) { should == 15 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "array 1..25, page 2, per 10, total_count 15" do
 | 
			
		||||
      subject { Kaminari.paginate_array((1..25).to_a, :total_count => 15).page(2).per(10) }
 | 
			
		||||
 | 
			
		||||
      it { should have(5).items }
 | 
			
		||||
      its(:first) { should == 11 }
 | 
			
		||||
      its(:current_page) { should == 2 }
 | 
			
		||||
      its(:total_count) { should == 15 }
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,126 +0,0 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'spec_helper'
 | 
			
		||||
 | 
			
		||||
describe "configuration methods" do
 | 
			
		||||
  let(:model){ User }
 | 
			
		||||
 | 
			
		||||
  describe "#default_per_page" do
 | 
			
		||||
    if defined? ActiveRecord
 | 
			
		||||
      describe 'AR::Base' do
 | 
			
		||||
        subject { ActiveRecord::Base }
 | 
			
		||||
        it { should_not respond_to :paginates_per }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    subject { model.page(1) }
 | 
			
		||||
 | 
			
		||||
    context "by default" do
 | 
			
		||||
      its(:limit_value){ should == 25 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "when configuring both on global and model-level" do
 | 
			
		||||
      before do
 | 
			
		||||
        Kaminari.configure {|c| c.default_per_page = 50 }
 | 
			
		||||
        model.paginates_per 100
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      its(:limit_value){ should == 100 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "when configuring multiple times" do
 | 
			
		||||
      before do
 | 
			
		||||
        Kaminari.configure {|c| c.default_per_page = 10 }
 | 
			
		||||
        Kaminari.configure {|c| c.default_per_page = 20 }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      its(:limit_value){ should == 20 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    after do
 | 
			
		||||
      Kaminari.configure {|c| c.default_per_page = 25 }
 | 
			
		||||
      model.paginates_per nil
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe "#max_per_page" do
 | 
			
		||||
    if defined? ActiveRecord
 | 
			
		||||
      describe 'AR::Base' do
 | 
			
		||||
        subject { ActiveRecord::Base }
 | 
			
		||||
        it { should_not respond_to :max_paginates_per }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    subject { model.page(1).per(1000) }
 | 
			
		||||
 | 
			
		||||
    context "by default" do
 | 
			
		||||
      its(:limit_value){ should == 1000 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "when configuring both on global and model-level" do
 | 
			
		||||
      before do
 | 
			
		||||
        Kaminari.configure {|c| c.max_per_page = 50 }
 | 
			
		||||
        model.max_paginates_per 100
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      its(:limit_value){ should == 100 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "when configuring multiple times" do
 | 
			
		||||
      before do
 | 
			
		||||
        Kaminari.configure {|c| c.max_per_page = 10 }
 | 
			
		||||
        Kaminari.configure {|c| c.max_per_page = 20 }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      its(:limit_value){ should == 20 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    after do
 | 
			
		||||
      Kaminari.configure {|c| c.max_per_page = nil }
 | 
			
		||||
      model.max_paginates_per nil
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe "#max_pages" do
 | 
			
		||||
    if defined? ActiveRecord
 | 
			
		||||
      describe 'AR::Base' do
 | 
			
		||||
        subject { ActiveRecord::Base }
 | 
			
		||||
        it { should_not respond_to :max_pages_per }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    before do
 | 
			
		||||
      100.times do |count|
 | 
			
		||||
        model.create!(:name => "User#{count}")
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    subject { model.page(1).per(5) }
 | 
			
		||||
 | 
			
		||||
    context "by default" do
 | 
			
		||||
      its(:total_pages){ should == 20 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "when configuring both on global and model-level" do
 | 
			
		||||
      before do
 | 
			
		||||
        Kaminari.configure {|c| c.max_pages = 10 }
 | 
			
		||||
        model.max_pages_per 15
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      its(:total_pages){ should == 15 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    context "when configuring multiple times" do
 | 
			
		||||
      before do
 | 
			
		||||
        Kaminari.configure {|c| c.max_pages = 10 }
 | 
			
		||||
        Kaminari.configure {|c| c.max_pages = 15 }
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      its(:total_pages){ should == 15 }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    after do
 | 
			
		||||
      Kaminari.configure {|c| c.max_pages = nil }
 | 
			
		||||
      model.max_pages_per nil
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,16 +0,0 @@
 | 
			
		|||
# encoding: UTF-8
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
require 'spec_helper'
 | 
			
		||||
 | 
			
		||||
feature 'Rendering with format: option' do
 | 
			
		||||
  background do
 | 
			
		||||
    User.create! :name => "user1"
 | 
			
		||||
  end
 | 
			
		||||
  scenario "Make sure that kaminari doesn't affect the format" do
 | 
			
		||||
    visit '/users/index_text.text'
 | 
			
		||||
 | 
			
		||||
    page.status_code.should == 200
 | 
			
		||||
    page.should have_content 'partial1'
 | 
			
		||||
    page.should have_content 'partial2'
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,14 +0,0 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
DatabaseCleaner[:active_record].strategy = :transaction if defined? ActiveRecord
 | 
			
		||||
 | 
			
		||||
RSpec.configure do |config|
 | 
			
		||||
  config.before :suite do
 | 
			
		||||
    DatabaseCleaner.clean_with :truncation if defined? ActiveRecord
 | 
			
		||||
  end
 | 
			
		||||
  config.before :each do
 | 
			
		||||
    DatabaseCleaner.start
 | 
			
		||||
  end
 | 
			
		||||
  config.after :each do
 | 
			
		||||
    DatabaseCleaner.clean
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,34 +0,0 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
RSpec::Matchers.define :contain_tag do |klass|
 | 
			
		||||
  match do |collection|
 | 
			
		||||
    if @num.blank?
 | 
			
		||||
      collection.any? {|tag| tag.is_a? klass}
 | 
			
		||||
    else
 | 
			
		||||
      (@count = collection.count {|tag| tag.is_a? klass}) == @num
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def count(num)
 | 
			
		||||
    @num = num
 | 
			
		||||
    self
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  description do
 | 
			
		||||
    "contain #{@num || 'any'} instance(s) of #{klass.name}"
 | 
			
		||||
  end
 | 
			
		||||
  failure_message_for_should do |_collection|
 | 
			
		||||
    "expected #{@num || 'any'} instance(s) of #{klass.name} but was #{@count}"
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
RSpec::Matchers.define :skip do |num|
 | 
			
		||||
  match do |criteria|
 | 
			
		||||
    criteria.instance_variable_get('@options')[:skip] == num
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
RSpec::Matchers.define :offset do |num|
 | 
			
		||||
  match do |collection|
 | 
			
		||||
    collection.offset_value == num
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										98
									
								
								kaminari-core/test/config/config_test.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								kaminari-core/test/config/config_test.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,98 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'test_helper'
 | 
			
		||||
 | 
			
		||||
class ConfigurationTest < ::Test::Unit::TestCase
 | 
			
		||||
  sub_test_case 'default_per_page' do
 | 
			
		||||
    test 'by default' do
 | 
			
		||||
      assert_equal 25, Kaminari.config.default_per_page
 | 
			
		||||
    end
 | 
			
		||||
    test 'configured via config block' do
 | 
			
		||||
      begin
 | 
			
		||||
        Kaminari.configure {|c| c.default_per_page = 17}
 | 
			
		||||
        assert_equal 17, Kaminari.config.default_per_page
 | 
			
		||||
      ensure
 | 
			
		||||
        Kaminari.configure {|c| c.default_per_page = 25}
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case 'max_per_page' do
 | 
			
		||||
    test 'by default' do
 | 
			
		||||
      assert_nil Kaminari.config.max_per_page
 | 
			
		||||
    end
 | 
			
		||||
    test 'configure via config block' do
 | 
			
		||||
      begin
 | 
			
		||||
        Kaminari.configure {|c| c.max_per_page = 100}
 | 
			
		||||
        assert_equal 100, Kaminari.config.max_per_page
 | 
			
		||||
      ensure
 | 
			
		||||
        Kaminari.configure {|c| c.max_per_page = nil}
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case 'window' do
 | 
			
		||||
    test 'by default' do
 | 
			
		||||
      assert_equal 4, Kaminari.config.window
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case 'outer_window' do
 | 
			
		||||
    test 'by default' do
 | 
			
		||||
      assert_equal 0, Kaminari.config.outer_window
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case 'left' do
 | 
			
		||||
    test 'by default' do
 | 
			
		||||
      assert_equal 0, Kaminari.config.left
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case 'right' do
 | 
			
		||||
    test 'by default' do
 | 
			
		||||
      assert_equal 0, Kaminari.config.right
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case 'param_name' do
 | 
			
		||||
    test 'by default' do
 | 
			
		||||
      assert_equal :page, Kaminari.config.param_name
 | 
			
		||||
    end
 | 
			
		||||
    test 'configured via config block' do
 | 
			
		||||
      begin
 | 
			
		||||
        Kaminari.configure {|c| c.param_name = -> { :test } }
 | 
			
		||||
        assert_equal :test, Kaminari.config.param_name
 | 
			
		||||
      ensure
 | 
			
		||||
        Kaminari.configure {|c| c.param_name = :page }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case 'max_pages' do
 | 
			
		||||
    test 'by default' do
 | 
			
		||||
      assert_nil Kaminari.config.max_pages
 | 
			
		||||
    end
 | 
			
		||||
    test 'configure via config block' do
 | 
			
		||||
      begin
 | 
			
		||||
        Kaminari.configure {|c| c.max_pages = 5}
 | 
			
		||||
        assert_equal 5, Kaminari.config.max_pages
 | 
			
		||||
      ensure
 | 
			
		||||
        Kaminari.configure {|c| c.max_pages = nil}
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case 'params_on_first_page' do
 | 
			
		||||
    test 'by default' do
 | 
			
		||||
      assert_equal false, Kaminari.config.params_on_first_page
 | 
			
		||||
    end
 | 
			
		||||
    test 'configure via config block' do
 | 
			
		||||
      begin
 | 
			
		||||
        Kaminari.configure {|c| c.params_on_first_page = true }
 | 
			
		||||
        assert_equal true, Kaminari.config.params_on_first_page
 | 
			
		||||
      ensure
 | 
			
		||||
        Kaminari.configure {|c| c.params_on_first_page = false }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										17
									
								
								kaminari-core/test/generators/views_generator_test.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								kaminari-core/test/generators/views_generator_test.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'test_helper'
 | 
			
		||||
 | 
			
		||||
if defined?(::Rails::Railtie) && ENV['GENERATOR_SPEC']
 | 
			
		||||
  require 'rails/generators'
 | 
			
		||||
  require 'generators/kaminari/views_generator'
 | 
			
		||||
 | 
			
		||||
  class GitHubApiHelperTest < ::Test::Unit::TestCase
 | 
			
		||||
    test '.get_files_in_master' do
 | 
			
		||||
      assert_include Kaminari::Generators::GitHubApiHelper.get_files_in_master, %w(README.md 7f712676aac6bcd912981a9189c110303a1ee266)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test '.get_content_for' do
 | 
			
		||||
      assert Kaminari::Generators::GitHubApiHelper.get_content_for('README.md').start_with?('# ')
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										416
									
								
								kaminari-core/test/helpers/action_view_extension_test.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										416
									
								
								kaminari-core/test/helpers/action_view_extension_test.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,416 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'test_helper'
 | 
			
		||||
 | 
			
		||||
if defined?(::Rails::Railtie) && defined?(::ActionView)
 | 
			
		||||
  class ActionViewExtensionTest < ActionView::TestCase
 | 
			
		||||
    setup do
 | 
			
		||||
      self.output_buffer = ::ActionView::OutputBuffer.new
 | 
			
		||||
    end
 | 
			
		||||
    teardown do
 | 
			
		||||
      User.delete_all
 | 
			
		||||
    end
 | 
			
		||||
    sub_test_case '#paginate' do
 | 
			
		||||
      setup do
 | 
			
		||||
        50.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
        @users = User.page(1)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'returns a String' do
 | 
			
		||||
        assert_kind_of String, view.paginate(@users, :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'escaping the pagination for javascript' do
 | 
			
		||||
        assert_nothing_raised do
 | 
			
		||||
          escape_javascript(view.paginate @users, :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'accepts :theme option' do
 | 
			
		||||
        begin
 | 
			
		||||
          controller.append_view_path File.join(Gem.loaded_specs['kaminari-core'].gem_dir, 'test/fake_app/views')
 | 
			
		||||
 | 
			
		||||
          html = view.paginate @users, :theme => 'bootstrap', :params => {:controller => 'users', :action => 'index'}
 | 
			
		||||
          assert_match(/bootstrap-paginator/, html)
 | 
			
		||||
          assert_match(/bootstrap-page-link/, html)
 | 
			
		||||
        ensure
 | 
			
		||||
          controller.view_paths.pop
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'accepts :views_prefix option' do
 | 
			
		||||
        begin
 | 
			
		||||
          controller.append_view_path File.join(Gem.loaded_specs['kaminari-core'].gem_dir, 'test/fake_app/views')
 | 
			
		||||
 | 
			
		||||
          assert_equal "  <b>1</b>\n", view.paginate(@users, :views_prefix => 'alternative/', :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
        ensure
 | 
			
		||||
          controller.view_paths.pop
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'accepts :paginator_class option' do
 | 
			
		||||
        custom_paginator = Class.new(Kaminari::Helpers::Paginator) do
 | 
			
		||||
          def to_s
 | 
			
		||||
            "CUSTOM PAGINATION"
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        assert_equal 'CUSTOM PAGINATION', view.paginate(@users, :paginator_class => custom_paginator, :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'total_pages: 3' do
 | 
			
		||||
        assert_match(/<a href="\/users\?page=3">Last/, view.paginate(@users, :total_pages => 3, :params => {:controller => 'users', :action => 'index'}))
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test "page: 20 (out of range)" do
 | 
			
		||||
        users = User.page(20)
 | 
			
		||||
 | 
			
		||||
        html = view.paginate users, :params => {:controller => 'users', :action => 'index'}
 | 
			
		||||
        assert_not_match(/Last/, html)
 | 
			
		||||
        assert_not_match(/Next/, html)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    sub_test_case '#link_to_previous_page' do
 | 
			
		||||
      setup do
 | 
			
		||||
        60.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      sub_test_case 'having previous pages' do
 | 
			
		||||
        setup do
 | 
			
		||||
          @users = User.page(3)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        test 'the default behaviour' do
 | 
			
		||||
          html = view.link_to_previous_page @users, 'Previous', :params => {:controller => 'users', :action => 'index'}
 | 
			
		||||
          assert_match(/page=2/, html)
 | 
			
		||||
          assert_match(/rel="prev"/, html)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        test 'overriding rel=' do
 | 
			
		||||
          assert_match(/rel="external"/, view.link_to_previous_page(@users, 'Previous', :rel => 'external', :params => {:controller => 'users', :action => 'index'}))
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        test 'with params' do
 | 
			
		||||
          params[:status] = 'active'
 | 
			
		||||
 | 
			
		||||
          assert_match(/status=active/, view.link_to_previous_page(@users, 'Previous', :params => {:controller => 'users', :action => 'index'}))
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'the first page' do
 | 
			
		||||
        users = User.page(1)
 | 
			
		||||
 | 
			
		||||
        assert_nil view.link_to_previous_page(users, 'Previous', :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'out of range' do
 | 
			
		||||
        users = User.page(5)
 | 
			
		||||
 | 
			
		||||
        assert_nil view.link_to_next_page(users, 'More', :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    sub_test_case '#link_to_next_page' do
 | 
			
		||||
      setup do
 | 
			
		||||
        50.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      sub_test_case 'having more page' do
 | 
			
		||||
        setup do
 | 
			
		||||
          @users = User.page(1)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        test 'the default behaviour' do
 | 
			
		||||
          html = view.link_to_next_page @users, 'More', :params => {:controller => 'users', :action => 'index'}
 | 
			
		||||
          assert_match(/page=2/, html)
 | 
			
		||||
          assert_match(/rel="next"/, html)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        test 'overriding rel=' do
 | 
			
		||||
          assert_match(/rel="external"/, view.link_to_next_page(@users, 'More', :rel => 'external', :params => {:controller => 'users', :action => 'index'}))
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        test 'with params' do
 | 
			
		||||
          params[:status] = 'active'
 | 
			
		||||
 | 
			
		||||
          assert_match(/status=active/, view.link_to_next_page(@users, 'More', :params => {:controller => 'users', :action => 'index'}))
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'the last page' do
 | 
			
		||||
        users = User.page(2)
 | 
			
		||||
 | 
			
		||||
        assert_nil view.link_to_next_page(users, 'More', :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'out of range' do
 | 
			
		||||
        users = User.page(5)
 | 
			
		||||
 | 
			
		||||
        assert_nil view.link_to_next_page(users, 'More', :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    sub_test_case '#page_entries_info' do
 | 
			
		||||
      sub_test_case 'on a model without namespace' do
 | 
			
		||||
        setup do
 | 
			
		||||
          @users = User.page(1).per(25)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case 'having no entries' do
 | 
			
		||||
          test 'with default entry name' do
 | 
			
		||||
            assert_equal 'No users found', view.page_entries_info(@users, :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'setting the entry name option to "member"' do
 | 
			
		||||
            assert_equal 'No members found', view.page_entries_info(@users, :entry_name => 'member', :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case 'having 1 entry' do
 | 
			
		||||
          setup do
 | 
			
		||||
            User.create! :name => 'user1'
 | 
			
		||||
            @users = User.page(1).per(25)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'with default entry name' do
 | 
			
		||||
            assert_equal 'Displaying <b>1</b> user', view.page_entries_info(@users, :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'setting the entry name option to "member"' do
 | 
			
		||||
            assert_equal 'Displaying <b>1</b> member', view.page_entries_info(@users, :entry_name => 'member', :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case 'having more than 1 but less than a page of entries' do
 | 
			
		||||
          setup do
 | 
			
		||||
            10.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
            @users = User.page(1).per(25)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'with default entry name' do
 | 
			
		||||
            assert_equal 'Displaying <b>all 10</b> users', view.page_entries_info(@users, :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'setting the entry name option to "member"' do
 | 
			
		||||
            assert_equal 'Displaying <b>all 10</b> members', view.page_entries_info(@users, :entry_name => 'member', :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case 'having more than one page of entries' do
 | 
			
		||||
          setup do
 | 
			
		||||
            50.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          sub_test_case 'the first page' do
 | 
			
		||||
            setup do
 | 
			
		||||
              @users = User.page(1).per(25)
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            test 'with default entry name' do
 | 
			
		||||
              assert_equal 'Displaying users <b>1 - 25</b> of <b>50</b> in total', view.page_entries_info(@users, :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            test 'setting the entry name option to "member"' do
 | 
			
		||||
              assert_equal 'Displaying members <b>1 - 25</b> of <b>50</b> in total', view.page_entries_info(@users, :entry_name => 'member', :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          sub_test_case 'the next page' do
 | 
			
		||||
            setup do
 | 
			
		||||
              @users = User.page(2).per(25)
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            test 'with default entry name' do
 | 
			
		||||
              assert_equal 'Displaying users <b>26 - 50</b> of <b>50</b> in total', view.page_entries_info(@users, :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            test 'setting the entry name option to "member"' do
 | 
			
		||||
              assert_equal 'Displaying members <b>26 - 50</b> of <b>50</b> in total', view.page_entries_info(@users, :entry_name => 'member', :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          sub_test_case 'the last page' do
 | 
			
		||||
            setup do
 | 
			
		||||
              User.max_pages_per 4
 | 
			
		||||
              @users = User.page(4).per(10)
 | 
			
		||||
            end
 | 
			
		||||
            teardown do
 | 
			
		||||
              User.max_pages_per nil
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            test 'with default entry name' do
 | 
			
		||||
              assert_equal 'Displaying users <b>31 - 40</b> of <b>50</b> in total', view.page_entries_info(@users, :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      sub_test_case 'I18n' do
 | 
			
		||||
        setup do
 | 
			
		||||
          50.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
          @users = User.page(1).per(25)
 | 
			
		||||
          I18n.backend.store_translations(:en, User.i18n_scope => { :models => { :user => { :one => "person", :other => "people" } } })
 | 
			
		||||
        end
 | 
			
		||||
        teardown do
 | 
			
		||||
          I18n.backend.reload!
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        test 'page_entries_info translates entry' do
 | 
			
		||||
          assert_equal 'Displaying people <b>1 - 25</b> of <b>50</b> in total', view.page_entries_info(@users, :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      sub_test_case 'on a model with namespace' do
 | 
			
		||||
        setup do
 | 
			
		||||
          @addresses = User::Address.page(1).per(25)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        test 'having no entries' do
 | 
			
		||||
          assert_equal 'No addresses found', view.page_entries_info(@addresses, :params => {:controller => 'addresses', :action => 'index'})
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case 'having 1 entry' do
 | 
			
		||||
          setup do
 | 
			
		||||
            User::Address.create!
 | 
			
		||||
            @addresses = User::Address.page(1).per(25)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'with default entry name' do
 | 
			
		||||
            assert_equal 'Displaying <b>1</b> address', view.page_entries_info(@addresses, :params => {:controller => 'addresses', :action => 'index'})
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'setting the entry name option to "place"' do
 | 
			
		||||
            assert_equal 'Displaying <b>1</b> place', view.page_entries_info(@addresses, :entry_name => 'place', :params => {:controller => 'addresses', :action => 'index'})
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case 'having more than 1 but less than a page of entries' do
 | 
			
		||||
          setup do
 | 
			
		||||
            10.times { User::Address.create! }
 | 
			
		||||
            @addresses = User::Address.page(1).per(25)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'with default entry name' do
 | 
			
		||||
            assert_equal 'Displaying <b>all 10</b> addresses', view.page_entries_info(@addresses, :params => {:controller => 'addresses', :action => 'index'})
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'setting the entry name option to "place"' do
 | 
			
		||||
            assert_equal 'Displaying <b>all 10</b> places', view.page_entries_info(@addresses, :entry_name => 'place', :params => {:controller => 'addresses', :action => 'index'})
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case 'having more than one page of entries' do
 | 
			
		||||
          setup do
 | 
			
		||||
            50.times { User::Address.create! }
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          sub_test_case 'the first page' do
 | 
			
		||||
            setup do
 | 
			
		||||
              @addresses = User::Address.page(1).per(25)
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            test 'with default entry name' do
 | 
			
		||||
              assert_equal 'Displaying addresses <b>1 - 25</b> of <b>50</b> in total', view.page_entries_info(@addresses, :params => {:controller => 'addresses', :action => 'index'})
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            test 'setting the entry name option to "place"' do
 | 
			
		||||
              assert_equal 'Displaying places <b>1 - 25</b> of <b>50</b> in total', view.page_entries_info(@addresses, :entry_name => 'place', :params => {:controller => 'addresses', :action => 'index'})
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          sub_test_case 'the next page' do
 | 
			
		||||
            setup do
 | 
			
		||||
              @addresses = User::Address.page(2).per(25)
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            test 'with default entry name' do
 | 
			
		||||
              assert_equal 'Displaying addresses <b>26 - 50</b> of <b>50</b> in total', view.page_entries_info(@addresses, :params => {:controller => 'addresses', :action => 'index'})
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            test 'setting the entry name option to "place"' do
 | 
			
		||||
              assert_equal 'Displaying places <b>26 - 50</b> of <b>50</b> in total', view.page_entries_info(@addresses, :entry_name => 'place', :params => {:controller => 'addresses', :action => 'index'})
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'on a PaginatableArray' do
 | 
			
		||||
        numbers = Kaminari.paginate_array(%w{one two three}).page(1)
 | 
			
		||||
 | 
			
		||||
        assert_equal 'Displaying <b>all 3</b> entries', view.page_entries_info(numbers)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    sub_test_case '#rel_next_prev_link_tags' do
 | 
			
		||||
      setup do
 | 
			
		||||
        31.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      test 'the first page' do
 | 
			
		||||
        users = User.page(1).per(10)
 | 
			
		||||
        html = view.rel_next_prev_link_tags users, :params => {:controller => 'users', :action => 'index'}
 | 
			
		||||
 | 
			
		||||
        assert_not_match(/rel="prev"/, html)
 | 
			
		||||
        assert_match(/rel="next"/, html)
 | 
			
		||||
        assert_match(/\?page=2/, html)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'the second page' do
 | 
			
		||||
        users = User.page(2).per(10)
 | 
			
		||||
        html = view.rel_next_prev_link_tags users, :params => {:controller => 'users', :action => 'index'}
 | 
			
		||||
 | 
			
		||||
        assert_match(/rel="prev"/, html)
 | 
			
		||||
        assert_not_match(/\?page=1/, html)
 | 
			
		||||
        assert_match(/rel="next"/, html)
 | 
			
		||||
        assert_match(/\?page=3/, html)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'the last page' do
 | 
			
		||||
        users = User.page(4).per(10)
 | 
			
		||||
        html = view.rel_next_prev_link_tags users, :params => {:controller => 'users', :action => 'index'}
 | 
			
		||||
 | 
			
		||||
        assert_match(/rel="prev"/, html)
 | 
			
		||||
        assert_match(/\?page=3"/, html)
 | 
			
		||||
        assert_not_match(/rel="next"/, html)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    sub_test_case '#path_to_next_page' do
 | 
			
		||||
      setup do
 | 
			
		||||
        2.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'the first page' do
 | 
			
		||||
        users = User.page(1).per(1)
 | 
			
		||||
        assert_equal '/users?page=2', view.path_to_next_page(users, :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'the last page' do
 | 
			
		||||
        users = User.page(2).per(1)
 | 
			
		||||
        assert_nil view.path_to_next_page(users, :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    sub_test_case '#path_to_prev_page' do
 | 
			
		||||
      setup do
 | 
			
		||||
        3.times {|i| User.create! :name => "user#{i}"}
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'the first page' do
 | 
			
		||||
        users = User.page(1).per(1)
 | 
			
		||||
        assert_nil view.path_to_prev_page(users, :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'the second page' do
 | 
			
		||||
        users = User.page(2).per(1)
 | 
			
		||||
        assert_equal '/users', view.path_to_prev_page(users, :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'the last page' do
 | 
			
		||||
        users = User.page(3).per(1)
 | 
			
		||||
        assert_equal'/users?page=2', view.path_to_prev_page(users, :params => {:controller => 'users', :action => 'index'})
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,8 +1,10 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'spec_helper'
 | 
			
		||||
require 'test_helper'
 | 
			
		||||
 | 
			
		||||
describe 'Kaminari::Helpers::Paginator' do
 | 
			
		||||
  let :template do
 | 
			
		||||
class PaginatorHelperTest < ActiveSupport::TestCase
 | 
			
		||||
  include Kaminari::Helpers
 | 
			
		||||
 | 
			
		||||
  def template
 | 
			
		||||
    stub(r = Object.new) do
 | 
			
		||||
      render.with_any_args
 | 
			
		||||
      params { {} }
 | 
			
		||||
| 
						 | 
				
			
			@ -14,43 +16,32 @@ describe 'Kaminari::Helpers::Paginator' do
 | 
			
		|||
    r
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe "view helper methods delegated to template" do
 | 
			
		||||
    before do
 | 
			
		||||
      @paginator = Kaminari::Helpers::Paginator.new(template, :params => {})
 | 
			
		||||
    end
 | 
			
		||||
    subject { @paginator.link_to("link", "#") }
 | 
			
		||||
    it { should == "<a href='#'>link</a>" }
 | 
			
		||||
  test 'view helper methods delegated to template' do
 | 
			
		||||
    paginator = Paginator.new(template, :params => {})
 | 
			
		||||
    assert_equal "<a href='#'>link</a>", paginator.link_to('link', '#')
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#params' do
 | 
			
		||||
    before do
 | 
			
		||||
      @paginator = Kaminari::Helpers::Paginator.new(template, :params => {:controller => 'foo', :action => 'bar'})
 | 
			
		||||
  sub_test_case '#params' do
 | 
			
		||||
    setup do
 | 
			
		||||
      @paginator = Paginator.new(template, :params => {:controller => 'foo', :action => 'bar'})
 | 
			
		||||
    end
 | 
			
		||||
    subject { @paginator.page_tag(template).instance_variable_get('@params') }
 | 
			
		||||
    it { should == {'controller' => 'foo', 'action' => 'bar'} }
 | 
			
		||||
 | 
			
		||||
    context "when params has form params" do
 | 
			
		||||
      before do
 | 
			
		||||
        stub(template).params do
 | 
			
		||||
          {
 | 
			
		||||
            :authenticity_token => "token",
 | 
			
		||||
            :commit => "submit",
 | 
			
		||||
            :utf8 => "true",
 | 
			
		||||
            :_method => "patch"
 | 
			
		||||
          }
 | 
			
		||||
        end
 | 
			
		||||
    test 'when params has no form params' do
 | 
			
		||||
      assert_equal({'controller' => 'foo', 'action' => 'bar'}, @paginator.page_tag(template).instance_variable_get('@params'))
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'when params has form params' do
 | 
			
		||||
      stub(template).params do
 | 
			
		||||
        {:authenticity_token => 'token', :commit => 'submit', :utf8 => 'true', :_method => 'patch'}
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      it { should == {'controller' => 'foo', 'action' => 'bar'} }
 | 
			
		||||
      assert_equal({'controller' => 'foo', 'action' => 'bar'}, @paginator.page_tag(template).instance_variable_get('@params'))
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe '#param_name' do
 | 
			
		||||
    before do
 | 
			
		||||
      @paginator = Kaminari::Helpers::Paginator.new(template, :param_name => :pagina)
 | 
			
		||||
    end
 | 
			
		||||
    subject { @paginator.page_tag(template).instance_variable_get('@param_name') }
 | 
			
		||||
    it { should == :pagina }
 | 
			
		||||
  test '#param_name' do
 | 
			
		||||
    paginator = Paginator.new(template, :param_name => :pagina)
 | 
			
		||||
    assert_equal :pagina, paginator.page_tag(template).instance_variable_get('@param_name')
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  #TODO test somehow...
 | 
			
		||||
							
								
								
									
										238
									
								
								kaminari-core/test/helpers/tags_test.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										238
									
								
								kaminari-core/test/helpers/tags_test.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,238 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'test_helper'
 | 
			
		||||
 | 
			
		||||
if defined?(::Rails::Railtie) && defined?(ActionView)
 | 
			
		||||
  class TagTest < ActionView::TestCase
 | 
			
		||||
    sub_test_case '#page_url_for' do
 | 
			
		||||
      setup do
 | 
			
		||||
        self.params[:controller] = 'users'
 | 
			
		||||
        self.params[:action]     = 'index'
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      sub_test_case 'for first page' do
 | 
			
		||||
        test 'by default' do
 | 
			
		||||
          assert_equal '/users', Kaminari::Helpers::Tag.new(self).page_url_for(1)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        test 'config.params_on_first_page == false' do
 | 
			
		||||
          begin
 | 
			
		||||
            Kaminari.config.params_on_first_page = true
 | 
			
		||||
            assert_equal '/users?page=1', Kaminari::Helpers::Tag.new(self).page_url_for(1)
 | 
			
		||||
          ensure
 | 
			
		||||
            Kaminari.config.params_on_first_page = false
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      sub_test_case 'with a friendly route setting' do
 | 
			
		||||
        setup do
 | 
			
		||||
          self.params[:controller] = 'addresses'
 | 
			
		||||
          self.params[:action]     = 'index'
 | 
			
		||||
          self.params[:page]       = 3
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case 'for first page' do
 | 
			
		||||
          test 'by default' do
 | 
			
		||||
            assert_equal('/addresses', Kaminari::Helpers::Tag.new(self).page_url_for(1))
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'config.params_on_first_page == false' do
 | 
			
		||||
            begin
 | 
			
		||||
              Kaminari.config.params_on_first_page = true
 | 
			
		||||
              assert_equal('/addresses/page/1', Kaminari::Helpers::Tag.new(self).page_url_for(1))
 | 
			
		||||
            ensure
 | 
			
		||||
              Kaminari.config.params_on_first_page = false
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        test 'for other page' do
 | 
			
		||||
          assert_equal('/addresses/page/5', Kaminari::Helpers::Tag.new(self).page_url_for(5))
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      sub_test_case "with param_name = 'user[page]' option" do
 | 
			
		||||
        setup do
 | 
			
		||||
          self.params[:user] = {:page => '3', :scope => 'active'}
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        test 'for first page' do
 | 
			
		||||
          assert_not_match(/user%5Bpage%5D=\d+/, Kaminari::Helpers::Tag.new(self, :param_name => 'user[page]').page_url_for(1))  # not match user[page]=\d+
 | 
			
		||||
          assert_match(/user%5Bscope%5D=active/, Kaminari::Helpers::Tag.new(self, :param_name => 'user[page]').page_url_for(1))  # match user[scope]=active
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        test 'for other page' do
 | 
			
		||||
          assert_match(/user%5Bpage%5D=2/, Kaminari::Helpers::Tag.new(self, :param_name => 'user[page]').page_url_for(2))  # match user[page]=2
 | 
			
		||||
          assert_match(/user%5Bscope%5D=active/, Kaminari::Helpers::Tag.new(self, :param_name => 'user[page]').page_url_for(2))  # match user[scope]=active
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      sub_test_case "with param_name = 'foo.page' option" do
 | 
			
		||||
        setup do
 | 
			
		||||
          self.params['foo.page'] = 2
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        test 'for first page' do
 | 
			
		||||
          assert_not_match(/foo\.page=\d+/, Kaminari::Helpers::Tag.new(self, :param_name => 'foo.page').page_url_for(1))
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        test 'for other page' do
 | 
			
		||||
          assert_match(/foo\.page=\d+/, Kaminari::Helpers::Tag.new(self, :param_name => 'foo.page').page_url_for(2))
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  class PaginatorTest < ActionView::TestCase
 | 
			
		||||
    test '#current?' do
 | 
			
		||||
      # current_page == page
 | 
			
		||||
      assert_true Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 26}, 26, nil).current?
 | 
			
		||||
      # current_page != page
 | 
			
		||||
      assert_false Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 13}, 26, nil).current?
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test '#first?' do
 | 
			
		||||
      # page == 1
 | 
			
		||||
      assert_true Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 26}, 1, nil).first?
 | 
			
		||||
      # page != 1
 | 
			
		||||
      assert_false Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 13}, 2, nil).first?
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test '#last?' do
 | 
			
		||||
      # current_page == page
 | 
			
		||||
      assert_true Kaminari::Helpers::Paginator::PageProxy.new({:total_pages => 39}, 39, nil).last?
 | 
			
		||||
      # current_page != page
 | 
			
		||||
      assert_false Kaminari::Helpers::Paginator::PageProxy.new({:total_pages => 39}, 38, nil).last?
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test '#next?' do
 | 
			
		||||
      # page == current_page + 1
 | 
			
		||||
      assert_true Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 52}, 53, nil).next?
 | 
			
		||||
      # page != current_page + 1
 | 
			
		||||
      assert_false Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 52}, 77, nil).next?
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test '#prev?' do
 | 
			
		||||
      # page == current_page - 1
 | 
			
		||||
      assert_true Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 77}, 76, nil).prev?
 | 
			
		||||
      # page != current_page + 1
 | 
			
		||||
      assert_false Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 77}, 80, nil).prev?
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test '#rel' do
 | 
			
		||||
      # page == current_page - 1
 | 
			
		||||
      assert_equal 'prev', Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 77}, 76, nil).rel
 | 
			
		||||
      # page == current_page
 | 
			
		||||
      assert_nil Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 78}, 78, nil).rel
 | 
			
		||||
      # page == current_page + 1
 | 
			
		||||
      assert_equal 'next', Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 52}, 53, nil).rel
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test '#left_outer?' do
 | 
			
		||||
      # current_page == left
 | 
			
		||||
      assert_true Kaminari::Helpers::Paginator::PageProxy.new({:left => 3}, 3, nil).left_outer?
 | 
			
		||||
      # current_page == left + 1
 | 
			
		||||
      assert_false Kaminari::Helpers::Paginator::PageProxy.new({:left => 3}, 4, nil).left_outer?
 | 
			
		||||
      # current_page == left + 2
 | 
			
		||||
      assert_false Kaminari::Helpers::Paginator::PageProxy.new({:left => 3}, 5, nil).left_outer?
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test '#right_outer?' do
 | 
			
		||||
      # total_pages - page > right
 | 
			
		||||
      assert_false Kaminari::Helpers::Paginator::PageProxy.new({:total_pages => 10, :right => 3}, 6, nil).right_outer?
 | 
			
		||||
      # total_pages - page == right
 | 
			
		||||
      assert_false Kaminari::Helpers::Paginator::PageProxy.new({:total_pages => 10, :right => 3}, 7, nil).right_outer?
 | 
			
		||||
      # total_pages - page < right
 | 
			
		||||
      assert_true Kaminari::Helpers::Paginator::PageProxy.new({:total_pages => 10, :right => 3}, 8, nil).right_outer?
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    sub_test_case '#inside_window?' do
 | 
			
		||||
      test 'page > current_page' do
 | 
			
		||||
        # page - current_page > window
 | 
			
		||||
        assert_false Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 4, :window => 5}, 10, nil).inside_window?
 | 
			
		||||
        # page - current_page == window
 | 
			
		||||
        assert_true Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 4, :window => 6}, 10, nil).inside_window?
 | 
			
		||||
        # page - current_page < window
 | 
			
		||||
        assert_true Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 4, :window => 7}, 10, nil).inside_window?
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'current_page > page' do
 | 
			
		||||
        # current_page - page > window
 | 
			
		||||
        assert_false Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 15, :window => 4}, 10, nil).inside_window?
 | 
			
		||||
        # current_page - page == window
 | 
			
		||||
        assert_true Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 15, :window => 5}, 10, nil).inside_window?
 | 
			
		||||
        # current_page - page < window
 | 
			
		||||
        assert_true Kaminari::Helpers::Paginator::PageProxy.new({:current_page => 15, :window => 6}, 10, nil).inside_window?
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    sub_test_case '#was_truncated?' do
 | 
			
		||||
      setup do
 | 
			
		||||
        stub(@template = Object.new) do
 | 
			
		||||
          options { {} }
 | 
			
		||||
          params { {} }
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'last.is_a? Gap' do
 | 
			
		||||
        assert_true Kaminari::Helpers::Paginator::PageProxy.new({}, 10, Kaminari::Helpers::Gap.new(@template)).was_truncated?
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'last.is not a Gap' do
 | 
			
		||||
        assert_false Kaminari::Helpers::Paginator::PageProxy.new({}, 10, Kaminari::Helpers::Page.new(@template)).was_truncated?
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    sub_test_case '#single_gap?' do
 | 
			
		||||
      setup do
 | 
			
		||||
        @window_options = {:left => 1, :window => 1, :right => 1, :total_pages => 9}
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def gap_for(page)
 | 
			
		||||
        Kaminari::Helpers::Paginator::PageProxy.new(@window_options, page, nil)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test "in case of '1 ... 4 5 6 ... 9'" do
 | 
			
		||||
        @window_options[:current_page] = 5
 | 
			
		||||
 | 
			
		||||
        assert_false gap_for(2).single_gap?
 | 
			
		||||
        assert_false gap_for(3).single_gap?
 | 
			
		||||
        assert_false gap_for(7).single_gap?
 | 
			
		||||
        assert_false gap_for(8).single_gap?
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test "in case of '1 ... 3 4 5 ... 9'" do
 | 
			
		||||
        @window_options[:current_page] = 4
 | 
			
		||||
 | 
			
		||||
        assert_true gap_for(2).single_gap?
 | 
			
		||||
        assert_false gap_for(6).single_gap?
 | 
			
		||||
        assert_false gap_for(8).single_gap?
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test "in case of '1 ... 3 4 5 ... 7'" do
 | 
			
		||||
        @window_options[:current_page] = 4
 | 
			
		||||
        @window_options[:total_pages] = 7
 | 
			
		||||
 | 
			
		||||
        assert_true gap_for(2).single_gap?
 | 
			
		||||
        assert_true gap_for(6).single_gap?
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test "in case of '1 ... 5 6 7 ... 9'" do
 | 
			
		||||
        @window_options[:current_page] = 6
 | 
			
		||||
 | 
			
		||||
        assert_false gap_for(2).single_gap?
 | 
			
		||||
        assert_false gap_for(4).single_gap?
 | 
			
		||||
        assert_true gap_for(8).single_gap?
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test '#out_of_range?' do
 | 
			
		||||
      # within range
 | 
			
		||||
      assert_false Kaminari::Helpers::Paginator::PageProxy.new({:total_pages => 5}, 4, nil).out_of_range?
 | 
			
		||||
      # on last page
 | 
			
		||||
      assert_false Kaminari::Helpers::Paginator::PageProxy.new({:total_pages => 5}, 5, nil).out_of_range?
 | 
			
		||||
      # out of range
 | 
			
		||||
      assert_true Kaminari::Helpers::Paginator::PageProxy.new({:total_pages => 5}, 6, nil).out_of_range?
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,52 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'test_helper'
 | 
			
		||||
 | 
			
		||||
if defined? ActiveRecord
 | 
			
		||||
  class ActiveRecordRelationMethodsTest < ActiveSupport::TestCase
 | 
			
		||||
    sub_test_case '#total_count' do
 | 
			
		||||
      setup do
 | 
			
		||||
        @author = User.create! :name => 'author'
 | 
			
		||||
        @author2 = User.create! :name => 'author2'
 | 
			
		||||
        @author3 = User.create! :name => 'author3'
 | 
			
		||||
        @books = 2.times.map {|i| @author.books_authored.create!(:title => "title%03d" % i) }
 | 
			
		||||
        @books2 = 3.times.map {|i| @author2.books_authored.create!(:title => "title%03d" % i) }
 | 
			
		||||
        @books3 = 4.times.map {|i| @author3.books_authored.create!(:title => "subject%03d" % i) }
 | 
			
		||||
        @readers = 4.times.map { User.create! :name => 'reader' }
 | 
			
		||||
        @books.each {|book| book.readers << @readers }
 | 
			
		||||
      end
 | 
			
		||||
      teardown do
 | 
			
		||||
        Book.delete_all
 | 
			
		||||
        User.delete_all
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'it should reset total_count memoization when the scope is cloned' do
 | 
			
		||||
        assert_equal 1, User.page.tap(&:total_count).where(:name => 'author').total_count
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'it should successfully count the results when the scope includes an order which references a generated column' do
 | 
			
		||||
        assert_equal @readers.size, @author.readers.by_read_count.page(1).total_count
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'it should keep includes and successfully count the results when the scope use conditions on includes' do
 | 
			
		||||
        # Only @author and @author2 have books titled with the title00x pattern
 | 
			
		||||
        assert_equal 2, User.includes(:books_authored).references(:books).where("books.title LIKE 'title00%'").page(1).total_count
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'when the Relation has custom select clause' do
 | 
			
		||||
        assert_nothing_raised do
 | 
			
		||||
          User.select('*, 1 as one').page(1).total_count
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'it should ignore the options for rails 4.1+ when total_count receives options' do
 | 
			
		||||
        assert_equal 7, User.page(1).total_count(:name, :distinct => true)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      test 'it should not throw exception by passing options to count when the scope returns an ActiveSupport::OrderedHash' do
 | 
			
		||||
        assert_nothing_raised do
 | 
			
		||||
          @author.readers.by_read_count.page(1).total_count(:name, :distinct => true)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										14
									
								
								kaminari-core/test/models/active_record/inherited_test.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								kaminari-core/test/models/active_record/inherited_test.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'test_helper'
 | 
			
		||||
 | 
			
		||||
if defined? ActiveRecord
 | 
			
		||||
  class ActiveRecordModelExtensionTest < ActiveSupport::TestCase
 | 
			
		||||
    test 'An AR model responds to Kaminari defined methods' do
 | 
			
		||||
      assert_respond_to Class.new(ActiveRecord::Base), :page
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test "Kaminari doesn't prevent other AR extension gems to define a method" do
 | 
			
		||||
      assert_respond_to Class.new(ActiveRecord::Base), :fake_gem_defined_method
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										360
									
								
								kaminari-core/test/models/active_record/scopes_test.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										360
									
								
								kaminari-core/test/models/active_record/scopes_test.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,360 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'test_helper'
 | 
			
		||||
 | 
			
		||||
if defined? ActiveRecord
 | 
			
		||||
  class ActiveRecordModelExtensionTest < ActiveSupport::TestCase
 | 
			
		||||
    test 'Changing page_method_name' do
 | 
			
		||||
      begin
 | 
			
		||||
        Kaminari.configure {|config| config.page_method_name = :per_page_kaminari }
 | 
			
		||||
 | 
			
		||||
        model = Class.new ActiveRecord::Base
 | 
			
		||||
 | 
			
		||||
        assert_respond_to model, :per_page_kaminari
 | 
			
		||||
        assert_not_respond_to model, :page
 | 
			
		||||
      ensure
 | 
			
		||||
        Kaminari.configure {|config| config.page_method_name = :page }
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  class ActiveRecordExtensionTest < ActiveSupport::TestCase
 | 
			
		||||
    def assert_first_page(relation)
 | 
			
		||||
      assert_equal 25, relation.count
 | 
			
		||||
      assert_equal 'user001', relation.first.name
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def assert_blank_page(relation)
 | 
			
		||||
      assert_equal 0, relation.count
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    class << self
 | 
			
		||||
      def startup
 | 
			
		||||
        [User, GemDefinedModel, Device].each do |m|
 | 
			
		||||
          1.upto(100) {|i| m.create! :name => "user#{'%03d' % i}", :age => (i / 10)}
 | 
			
		||||
        end
 | 
			
		||||
        super
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def shutdown
 | 
			
		||||
        [User, GemDefinedModel, Device].each(&:delete_all)
 | 
			
		||||
        super
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    [User, Admin, GemDefinedModel, Device].each do |model_class|
 | 
			
		||||
      sub_test_case "for #{model_class}" do
 | 
			
		||||
        sub_test_case '#page' do
 | 
			
		||||
          test 'page 1' do
 | 
			
		||||
            assert_first_page model_class.page(1)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'page 2' do
 | 
			
		||||
            relation = model_class.page 2
 | 
			
		||||
 | 
			
		||||
            assert_equal 25, relation.count
 | 
			
		||||
            assert_equal 'user026', relation.first.name
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'page without an argument' do
 | 
			
		||||
            assert_first_page model_class.page
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'page < 1' do
 | 
			
		||||
            assert_first_page model_class.page(0)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'page > max page' do
 | 
			
		||||
            assert_blank_page model_class.page(5)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'ensure #order_values is preserved' do
 | 
			
		||||
            relation = model_class.order('id').page 1
 | 
			
		||||
 | 
			
		||||
            assert_equal ['id'], relation.order_values.uniq
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case '#per' do
 | 
			
		||||
          test 'page 1 per 5' do
 | 
			
		||||
            relation = model_class.page(1).per(5)
 | 
			
		||||
 | 
			
		||||
            assert_equal 5, relation.count
 | 
			
		||||
            assert_equal 'user001', relation.first.name
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'page 1 per 5 with max_per_page < 5' do
 | 
			
		||||
            begin
 | 
			
		||||
              model_class.max_paginates_per 4
 | 
			
		||||
              relation = model_class.page(1).per(5)
 | 
			
		||||
 | 
			
		||||
              assert_equal 4, relation.count
 | 
			
		||||
            ensure
 | 
			
		||||
              model_class.max_paginates_per nil
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'page 1 per nil (using default)' do
 | 
			
		||||
            assert_equal model_class.default_per_page, model_class.page(1).per(nil).count
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'page 1 per nil with max_per_page < default_per_page' do
 | 
			
		||||
            begin
 | 
			
		||||
              model_class.max_paginates_per(10)
 | 
			
		||||
 | 
			
		||||
              assert_equal 10, model_class.page(1).per(nil).count
 | 
			
		||||
            ensure
 | 
			
		||||
              model_class.max_paginates_per(nil)
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'page 1 per 0' do
 | 
			
		||||
            assert_equal 0, model_class.page(1).per(0).count
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          # I know it's a bit strange to have this here, but I couldn't find any better place for this case
 | 
			
		||||
          sub_test_case 'when max_per_page is given via model class, and `per` is not actually called' do
 | 
			
		||||
            test 'with max_per_page > default_per_page' do
 | 
			
		||||
              begin
 | 
			
		||||
                model_class.max_paginates_per(200)
 | 
			
		||||
 | 
			
		||||
                assert_equal 25, model_class.page(1).count
 | 
			
		||||
              ensure
 | 
			
		||||
                model_class.max_paginates_per(nil)
 | 
			
		||||
              end
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            test 'with max_per_page < default_per_page' do
 | 
			
		||||
              begin
 | 
			
		||||
                model_class.max_paginates_per(5)
 | 
			
		||||
 | 
			
		||||
                assert_equal 5, model_class.page(1).count
 | 
			
		||||
              ensure
 | 
			
		||||
                model_class.max_paginates_per(nil)
 | 
			
		||||
              end
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case '#max_paginates_per' do
 | 
			
		||||
          setup do
 | 
			
		||||
            model_class.max_paginates_per(10)
 | 
			
		||||
          end
 | 
			
		||||
          teardown do
 | 
			
		||||
            model_class.max_paginates_per(nil)
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          sub_test_case 'calling max_paginates_per() after per()' do
 | 
			
		||||
            test 'when #max_paginates_per is greater than #per' do
 | 
			
		||||
              assert_equal 15, model_class.page(1).per(15).max_paginates_per(20).count
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            test 'when #per is greater than #max_paginates_per' do
 | 
			
		||||
              assert_equal 20, model_class.page(1).per(30).max_paginates_per(20).count
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            test 'when nil is given to #per and #max_paginates_per is specified' do
 | 
			
		||||
              assert_equal 20, model_class.page(1).per(nil).max_paginates_per(20).count
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          sub_test_case 'calling max_paginates_per() before per()' do
 | 
			
		||||
            test 'when #max_paginates_per is greater than #per' do
 | 
			
		||||
              assert_equal 15, model_class.page(1).max_paginates_per(20).per(15).count
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            test 'when #per is greater than #max_paginates_per' do
 | 
			
		||||
              assert_equal 20, model_class.page(1).max_paginates_per(20).per(30).count
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            test 'when nil is given to #per and #max_paginates_per is specified' do
 | 
			
		||||
              assert_equal 20, model_class.page(1).max_paginates_per(20).per(nil).count
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          sub_test_case 'calling max_paginates_per() without per()' do
 | 
			
		||||
            test 'when #max_paginates_per is greater than the default per_page' do
 | 
			
		||||
              assert_equal 20, model_class.page(1).max_paginates_per(20).count
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            test 'when #max_paginates_per is less than the default per_page' do
 | 
			
		||||
              assert_equal 25, model_class.page(1).max_paginates_per(30).count
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case '#padding' do
 | 
			
		||||
          test 'page 1 per 5 padding 1' do
 | 
			
		||||
            relation = model_class.page(1).per(5).padding(1)
 | 
			
		||||
 | 
			
		||||
            assert_equal 5, relation.count
 | 
			
		||||
            assert_equal 'user002', relation.first.name
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'page 19 per 5 padding 5' do
 | 
			
		||||
            relation = model_class.page(19).per(5).padding(5)
 | 
			
		||||
 | 
			
		||||
            assert_equal 19, relation.current_page
 | 
			
		||||
            assert_equal 19, relation.total_pages
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case '#total_pages' do
 | 
			
		||||
          test 'per 25 (default)' do
 | 
			
		||||
            assert_equal 4, model_class.page.total_pages
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'per 7' do
 | 
			
		||||
            assert_equal 15, model_class.page(2).per(7).total_pages
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'per 65536' do
 | 
			
		||||
            assert_equal 1, model_class.page(50).per(65536).total_pages
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'per 0' do
 | 
			
		||||
            assert_raise Kaminari::ZeroPerPageOperation do
 | 
			
		||||
              model_class.page(50).per(0).total_pages
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'per -1 (using default)' do
 | 
			
		||||
            assert_equal 4, model_class.page(5).per(-1).total_pages
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'per "String value that can not be converted into Number" (using default)' do
 | 
			
		||||
            assert_equal 4, model_class.page(5).per('aho').total_pages
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'with max_pages < total pages count from database' do
 | 
			
		||||
            begin
 | 
			
		||||
              model_class.max_pages_per 3
 | 
			
		||||
 | 
			
		||||
              assert_equal 3, model_class.page.total_pages
 | 
			
		||||
            ensure
 | 
			
		||||
              model_class.max_pages_per nil
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'with max_pages > total pages count from database' do
 | 
			
		||||
            begin
 | 
			
		||||
              model_class.max_pages_per 11
 | 
			
		||||
 | 
			
		||||
              assert_equal 4, model_class.page.total_pages
 | 
			
		||||
            ensure
 | 
			
		||||
              model_class.max_pages_per nil
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'with max_pages is nil (default)' do
 | 
			
		||||
            model_class.max_pages_per nil
 | 
			
		||||
 | 
			
		||||
            assert_equal 4, model_class.page.total_pages
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'with per(nil) using default' do
 | 
			
		||||
            assert_equal 4, model_class.page.per(nil).total_pages
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case '#current_page' do
 | 
			
		||||
          test 'any page, per 0' do
 | 
			
		||||
            assert_raise Kaminari::ZeroPerPageOperation do
 | 
			
		||||
              model_class.page.per(0).current_page
 | 
			
		||||
            end
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'page 1' do
 | 
			
		||||
            assert_equal 1, model_class.page.current_page
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'page 2' do
 | 
			
		||||
            assert_equal 2, model_class.page(2).per(3).current_page
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case '#next_page' do
 | 
			
		||||
          test 'page 1' do
 | 
			
		||||
            assert_equal 2, model_class.page.next_page
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'page 5' do
 | 
			
		||||
            assert_nil model_class.page(5).next_page
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case '#prev_page' do
 | 
			
		||||
          test 'page 1' do
 | 
			
		||||
            assert_nil model_class.page.prev_page
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'page 3' do
 | 
			
		||||
            assert_equal 2, model_class.page(3).prev_page
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'page 5' do
 | 
			
		||||
            assert_nil model_class.page(5).prev_page
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case '#first_page?' do
 | 
			
		||||
          test 'on first page' do
 | 
			
		||||
            assert_true model_class.page(1).per(10).first_page?
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'not on first page' do
 | 
			
		||||
            assert_false model_class.page(5).per(10).first_page?
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case '#last_page?' do
 | 
			
		||||
          test 'on last page' do
 | 
			
		||||
            assert_true model_class.page(10).per(10).last_page?
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'within range' do
 | 
			
		||||
            assert_false model_class.page(1).per(10).last_page?
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'out of range' do
 | 
			
		||||
            assert_false model_class.page(11).per(10).last_page?
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case '#out_of_range?' do
 | 
			
		||||
          test 'on last page' do
 | 
			
		||||
            assert_false model_class.page(10).per(10).out_of_range?
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'within range' do
 | 
			
		||||
            assert_false model_class.page(1).per(10).out_of_range?
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'out of range' do
 | 
			
		||||
            assert_true model_class.page(11).per(10).out_of_range?
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        sub_test_case '#count' do
 | 
			
		||||
          test 'page 1' do
 | 
			
		||||
            assert_equal 25, model_class.page.count
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          test 'page 2' do
 | 
			
		||||
            assert_equal 25, model_class.page(2).count
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        test 'chained with .group' do
 | 
			
		||||
          relation = model_class.group('age').page(2).per 5
 | 
			
		||||
          # 0..10
 | 
			
		||||
          assert_equal 11, relation.total_count
 | 
			
		||||
          assert_equal 3, relation.total_pages
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        test 'activerecord descendants' do
 | 
			
		||||
          assert_not_equal 0, ActiveRecord::Base.descendants.length
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										172
									
								
								kaminari-core/test/models/array_test.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								kaminari-core/test/models/array_test.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,172 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'test_helper'
 | 
			
		||||
 | 
			
		||||
class PaginatableArrayTest < ActiveSupport::TestCase
 | 
			
		||||
  setup do
 | 
			
		||||
    @array = Kaminari::PaginatableArray.new((1..100).to_a)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  test 'initial state' do
 | 
			
		||||
    assert_equal 0, Kaminari::PaginatableArray.new.count
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  test 'specifying limit and offset when initializing' do
 | 
			
		||||
    assert_equal 3, Kaminari::PaginatableArray.new((1..100).to_a, :limit => 10, :offset => 20).current_page
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case '#page' do
 | 
			
		||||
    def assert_first_page_of_array(arr)
 | 
			
		||||
      assert_equal 25, arr.count
 | 
			
		||||
      assert_equal 1, arr.current_page
 | 
			
		||||
      assert_equal 1, arr.first
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def assert_blank_array_page(arr)
 | 
			
		||||
      assert_equal 0, arr.count
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'page 1' do
 | 
			
		||||
      assert_first_page_of_array @array.page(1)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'page 2' do
 | 
			
		||||
      arr = @array.page 2
 | 
			
		||||
 | 
			
		||||
      assert_equal 25, arr.count
 | 
			
		||||
      assert_equal 2, arr.current_page
 | 
			
		||||
      assert_equal 26, arr.first
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'page without an argument' do
 | 
			
		||||
      assert_first_page_of_array @array.page
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'page < 1' do
 | 
			
		||||
      assert_first_page_of_array @array.page(0)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'page > max page' do
 | 
			
		||||
      assert_blank_array_page @array.page(5)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case '#per' do
 | 
			
		||||
    test 'page 1 per 5' do
 | 
			
		||||
      arr =  @array.page(1).per(5)
 | 
			
		||||
 | 
			
		||||
      assert_equal 5, arr.count
 | 
			
		||||
      assert_equal 1, arr.first
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'page 1 per 0' do
 | 
			
		||||
      assert_equal 0, @array.page(1).per(0).count
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case '#total_pages' do
 | 
			
		||||
    test 'per 25 (default)' do
 | 
			
		||||
      assert_equal 4, @array.page.total_pages
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'per 7' do
 | 
			
		||||
      assert_equal 15, @array.page(2).per(7).total_pages
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'per 65536' do
 | 
			
		||||
      assert_equal 1, @array.page(50).per(65536).total_pages
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'per 0' do
 | 
			
		||||
      assert_raise(Kaminari::ZeroPerPageOperation) { @array.page(50).per(0).total_pages }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'per -1 (using default)' do
 | 
			
		||||
      assert_equal 4, @array.page(5).per(-1).total_pages
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'per "String value that can not be converted into Number" (using default)' do
 | 
			
		||||
      assert_equal 4, @array.page(5).per('aho').total_pages
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'per 25, padding 25' do
 | 
			
		||||
      assert_equal 3, @array.page(1).padding(25).total_pages
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case '#current_page' do
 | 
			
		||||
    test 'any page, per 0' do
 | 
			
		||||
      assert_raise(Kaminari::ZeroPerPageOperation) { @array.page.per(0).current_page }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'page 1' do
 | 
			
		||||
      assert_equal 1, @array.page(1).current_page
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'page 2' do
 | 
			
		||||
      assert_equal 2, @array.page(2).per(3).current_page
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case '#next_page' do
 | 
			
		||||
    test 'page 1' do
 | 
			
		||||
      assert_equal 2, @array.page.next_page
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'page 5' do
 | 
			
		||||
      assert_nil @array.page(5).next_page
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case '#prev_page' do
 | 
			
		||||
    test 'page 1' do
 | 
			
		||||
      assert_nil @array.page.prev_page
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'page 3' do
 | 
			
		||||
      assert_equal 2, @array.page(3).prev_page
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'page 5' do
 | 
			
		||||
      assert_nil @array.page(5).prev_page
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case '#count' do
 | 
			
		||||
    test 'page 1' do
 | 
			
		||||
      assert_equal 25, @array.page.count
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'page 2' do
 | 
			
		||||
      assert_equal 25, @array.page(2).count
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case 'when setting total count explicitly' do
 | 
			
		||||
    test 'array 1..10, page 5, per 10, total_count 9999' do
 | 
			
		||||
      arr = Kaminari::PaginatableArray.new((1..10).to_a, :total_count => 9999).page(5).per(10)
 | 
			
		||||
 | 
			
		||||
      assert_equal 10, arr.count
 | 
			
		||||
      assert_equal 1, arr.first
 | 
			
		||||
      assert_equal 5, arr.current_page
 | 
			
		||||
      assert_equal 9999, arr.total_count
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'array 1..15, page 1, per 10, total_count 15' do
 | 
			
		||||
      arr = Kaminari::PaginatableArray.new((1..15).to_a, :total_count => 15).page(1).per(10)
 | 
			
		||||
 | 
			
		||||
      assert_equal 10, arr.count
 | 
			
		||||
      assert_equal 1, arr.first
 | 
			
		||||
      assert_equal 1, arr.current_page
 | 
			
		||||
      assert_equal 15, arr.total_count
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'array 1..25, page 2, per 10, total_count 15' do
 | 
			
		||||
      arr = Kaminari::PaginatableArray.new((1..25).to_a, :total_count => 15).page(2).per(10)
 | 
			
		||||
 | 
			
		||||
      assert_equal 5, arr.count
 | 
			
		||||
      assert_equal 11, arr.first
 | 
			
		||||
      assert_equal 2, arr.current_page
 | 
			
		||||
      assert_equal 15, arr.total_count
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										104
									
								
								kaminari-core/test/models/configuration_methods_test.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								kaminari-core/test/models/configuration_methods_test.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,104 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
require 'test_helper'
 | 
			
		||||
 | 
			
		||||
class ConfigurationMethodsTest < ActiveSupport::TestCase
 | 
			
		||||
  sub_test_case '#default_per_page' do
 | 
			
		||||
    if defined? ActiveRecord
 | 
			
		||||
      test 'AR::Base should be not polluted by configuration methods' do
 | 
			
		||||
        assert_not_respond_to ActiveRecord::Base, :paginates_per
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'by default' do
 | 
			
		||||
      assert_equal 25, User.page(1).limit_value
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'when configuring both on global and model-level' do
 | 
			
		||||
      Kaminari.configure {|c| c.default_per_page = 50 }
 | 
			
		||||
      User.paginates_per 100
 | 
			
		||||
 | 
			
		||||
      assert_equal 100, User.page(1).limit_value
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'when configuring multiple times' do
 | 
			
		||||
      Kaminari.configure {|c| c.default_per_page = 10 }
 | 
			
		||||
      Kaminari.configure {|c| c.default_per_page = 20 }
 | 
			
		||||
 | 
			
		||||
      assert_equal 20, User.page(1).limit_value
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    teardown do
 | 
			
		||||
      Kaminari.configure {|c| c.default_per_page = 25 }
 | 
			
		||||
      User.paginates_per nil
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case '#max_per_page' do
 | 
			
		||||
    teardown do
 | 
			
		||||
      Kaminari.configure {|c| c.max_per_page = nil }
 | 
			
		||||
      User.max_paginates_per nil
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    if defined? ActiveRecord
 | 
			
		||||
      test 'AR::Base should be not polluted by configuration methods' do
 | 
			
		||||
        assert_not_respond_to ActiveRecord::Base, :max_paginates_per
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'by default' do
 | 
			
		||||
      assert_equal 1000, User.page(1).per(1000).limit_value
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'when configuring both on global and model-level' do
 | 
			
		||||
      Kaminari.configure {|c| c.max_per_page = 50 }
 | 
			
		||||
      User.max_paginates_per 100
 | 
			
		||||
 | 
			
		||||
      assert_equal 100, User.page(1).per(1000).limit_value
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'when configuring multiple times' do
 | 
			
		||||
      Kaminari.configure {|c| c.max_per_page = 10 }
 | 
			
		||||
      Kaminari.configure {|c| c.max_per_page = 20 }
 | 
			
		||||
 | 
			
		||||
      assert_equal 20, User.page(1).per(1000).limit_value
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  sub_test_case '#max_pages' do
 | 
			
		||||
    if defined? ActiveRecord
 | 
			
		||||
      test 'AR::Base should be not polluted by configuration methods' do
 | 
			
		||||
        assert_not_respond_to ActiveRecord::Base, :max_pages_per
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    setup do
 | 
			
		||||
      100.times do |count|
 | 
			
		||||
        User.create!(:name => "User#{count}")
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    teardown do
 | 
			
		||||
      Kaminari.configure {|c| c.max_pages = nil }
 | 
			
		||||
      User.max_pages_per nil
 | 
			
		||||
      User.delete_all
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'by default' do
 | 
			
		||||
      assert_equal 20, User.page(1).per(5).total_pages
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'when configuring both on global and model-level' do
 | 
			
		||||
      Kaminari.configure {|c| c.max_pages = 10 }
 | 
			
		||||
      User.max_pages_per 15
 | 
			
		||||
 | 
			
		||||
      assert_equal 15, User.page(1).per(5).total_pages
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test 'when configuring multiple times' do
 | 
			
		||||
      Kaminari.configure {|c| c.max_pages = 10 }
 | 
			
		||||
      Kaminari.configure {|c| c.max_pages = 15 }
 | 
			
		||||
 | 
			
		||||
      assert_equal 15, User.page(1).per(5).total_pages
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,17 +1,26 @@
 | 
			
		|||
# encoding: UTF-8
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
require 'spec_helper'
 | 
			
		||||
require 'test_helper'
 | 
			
		||||
 | 
			
		||||
feature 'Users' do
 | 
			
		||||
  background do
 | 
			
		||||
class NavigationTest < Test::Unit::TestCase
 | 
			
		||||
  include Capybara::DSL
 | 
			
		||||
 | 
			
		||||
  setup do
 | 
			
		||||
    1.upto(100) {|i| User.create! :name => "user#{'%03d' % i}" }
 | 
			
		||||
  end
 | 
			
		||||
  scenario 'navigating by pagination links' do
 | 
			
		||||
 | 
			
		||||
  teardown do
 | 
			
		||||
    Capybara.reset_sessions!
 | 
			
		||||
    Capybara.use_default_driver
 | 
			
		||||
    User.delete_all
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  test 'navigating by pagination links' do
 | 
			
		||||
    visit '/users'
 | 
			
		||||
 | 
			
		||||
    within 'nav.pagination' do
 | 
			
		||||
      within 'span.page.current' do
 | 
			
		||||
        page.should have_content '1'
 | 
			
		||||
        assert page.has_content? '1'
 | 
			
		||||
      end
 | 
			
		||||
      within 'span.next' do
 | 
			
		||||
        click_link 'Next ›'
 | 
			
		||||
| 
						 | 
				
			
			@ -20,7 +29,7 @@ feature 'Users' do
 | 
			
		|||
 | 
			
		||||
    within 'nav.pagination' do
 | 
			
		||||
      within 'span.page.current' do
 | 
			
		||||
        page.should have_content '2'
 | 
			
		||||
        assert page.has_content? '2'
 | 
			
		||||
      end
 | 
			
		||||
      within 'span.last' do
 | 
			
		||||
        click_link 'Last »'
 | 
			
		||||
| 
						 | 
				
			
			@ -29,7 +38,7 @@ feature 'Users' do
 | 
			
		|||
 | 
			
		||||
    within 'nav.pagination' do
 | 
			
		||||
      within 'span.page.current' do
 | 
			
		||||
        page.should have_content '4'
 | 
			
		||||
        assert page.has_content? '4'
 | 
			
		||||
      end
 | 
			
		||||
      within 'span.prev' do
 | 
			
		||||
        click_link '‹ Prev'
 | 
			
		||||
| 
						 | 
				
			
			@ -38,7 +47,7 @@ feature 'Users' do
 | 
			
		|||
 | 
			
		||||
    within 'nav.pagination' do
 | 
			
		||||
      within 'span.page.current' do
 | 
			
		||||
        page.should have_content '3'
 | 
			
		||||
        assert page.has_content? '3'
 | 
			
		||||
      end
 | 
			
		||||
      within 'span.first' do
 | 
			
		||||
        click_link '« First'
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +56,7 @@ feature 'Users' do
 | 
			
		|||
 | 
			
		||||
    within 'nav.pagination' do
 | 
			
		||||
      within 'span.page.current' do
 | 
			
		||||
        page.should have_content '1'
 | 
			
		||||
        assert page.has_content? '1'
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
							
								
								
									
										25
									
								
								kaminari-core/test/requests/request_format_test.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								kaminari-core/test/requests/request_format_test.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
# encoding: UTF-8
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
require 'test_helper'
 | 
			
		||||
 | 
			
		||||
class RenderingWithFormatOptionTest < Test::Unit::TestCase
 | 
			
		||||
  include Capybara::DSL
 | 
			
		||||
 | 
			
		||||
  setup do
 | 
			
		||||
    User.create! :name => 'user1'
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  teardown do
 | 
			
		||||
    Capybara.reset_sessions!
 | 
			
		||||
    Capybara.use_default_driver
 | 
			
		||||
    User.delete_all
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  test "Make sure that kaminari doesn't affect the format" do
 | 
			
		||||
    visit '/users/index_text.text'
 | 
			
		||||
 | 
			
		||||
    assert_equal 200, page.status_code
 | 
			
		||||
    assert page.has_content? 'partial1'
 | 
			
		||||
    assert page.has_content? 'partial2'
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										21
									
								
								kaminari-core/test/support/database_cleaner.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								kaminari-core/test/support/database_cleaner.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
#
 | 
			
		||||
# kaminari repo's tests successfully runs without DatabaseCleaner now.
 | 
			
		||||
# DatabaseCleaner[:active_record].strategy = :transaction if defined? ActiveRecord
 | 
			
		||||
 | 
			
		||||
# class ActiveSupport::TestCase
 | 
			
		||||
#   class << self
 | 
			
		||||
#     def startup
 | 
			
		||||
#       DatabaseCleaner.clean_with :truncation if defined? ActiveRecord
 | 
			
		||||
#       super
 | 
			
		||||
#     end
 | 
			
		||||
#   end
 | 
			
		||||
 | 
			
		||||
#   setup do
 | 
			
		||||
#     DatabaseCleaner.start
 | 
			
		||||
#   end
 | 
			
		||||
 | 
			
		||||
#   teardown do
 | 
			
		||||
#     DatabaseCleaner.clean
 | 
			
		||||
#   end
 | 
			
		||||
# end
 | 
			
		||||
| 
						 | 
				
			
			@ -23,10 +23,9 @@ Gem::Specification.new do |s|
 | 
			
		|||
  s.add_dependency 'kaminari-actionview'
 | 
			
		||||
  s.add_dependency 'kaminari-activerecord'
 | 
			
		||||
 | 
			
		||||
  s.add_development_dependency 'rspec-rails'
 | 
			
		||||
  s.add_development_dependency 'test-unit-rails'
 | 
			
		||||
  s.add_development_dependency 'bundler', '>= 1.0.0'
 | 
			
		||||
  s.add_development_dependency 'rake', '>= 0'
 | 
			
		||||
  s.add_development_dependency 'rspec', '~> 2.14.1'
 | 
			
		||||
  s.add_development_dependency 'rr', '>= 0'
 | 
			
		||||
  s.add_development_dependency 'capybara', '>= 1.0'
 | 
			
		||||
  s.add_development_dependency 'database_cleaner', '>= 1.4.1'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
# frozen_string_literal: true
 | 
			
		||||
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
 | 
			
		||||
$LOAD_PATH.unshift(File.join(Gem.loaded_specs['kaminari-core'].gem_dir, 'spec'))
 | 
			
		||||
$LOAD_PATH.unshift(File.join(Gem.loaded_specs['kaminari-core'].gem_dir, 'test'))
 | 
			
		||||
$LOAD_PATH.unshift(File.dirname(__FILE__))
 | 
			
		||||
 | 
			
		||||
require 'rails'
 | 
			
		||||
| 
						 | 
				
			
			@ -9,21 +9,14 @@ require 'active_record'
 | 
			
		|||
require 'bundler/setup'
 | 
			
		||||
Bundler.require
 | 
			
		||||
 | 
			
		||||
require 'capybara/rspec'
 | 
			
		||||
require 'database_cleaner'
 | 
			
		||||
 | 
			
		||||
# Simulate a gem providing a subclass of ActiveRecord::Base before the Railtie is loaded.
 | 
			
		||||
require 'fake_gem'
 | 
			
		||||
 | 
			
		||||
require 'fake_app/rails_app'
 | 
			
		||||
 | 
			
		||||
require 'rspec/rails'
 | 
			
		||||
require 'test/unit/rails/test_help'
 | 
			
		||||
 | 
			
		||||
# Requires supporting files with custom matchers and macros, etc,
 | 
			
		||||
# in ./support/ and its subdirectories.
 | 
			
		||||
Dir["#{File.join(Gem.loaded_specs['kaminari-core'].gem_dir, 'spec')}/support/**/*.rb"].each {|f| require f}
 | 
			
		||||
 | 
			
		||||
RSpec.configure do |config|
 | 
			
		||||
  config.mock_with :rr
 | 
			
		||||
  config.filter_run_excluding :generator_spec => true if !ENV['GENERATOR_SPEC']
 | 
			
		||||
end
 | 
			
		||||
Dir["#{File.join(Gem.loaded_specs['kaminari-core'].gem_dir, 'test')}/support/**/*.rb"].each {|f| require f}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue