Chris@0: require File.dirname(__FILE__) + '/helper' Chris@0: require File.dirname(__FILE__) + '/../init' Chris@0: Chris@0: class PaginationTest < ActiveRecordTestCase Chris@0: fixtures :topics, :replies, :developers, :projects, :developers_projects Chris@0: Chris@0: class PaginationController < ActionController::Base Chris@0: if respond_to? :view_paths= Chris@0: self.view_paths = [ "#{File.dirname(__FILE__)}/../fixtures/" ] Chris@0: else Chris@0: self.template_root = [ "#{File.dirname(__FILE__)}/../fixtures/" ] Chris@0: end Chris@0: Chris@0: def simple_paginate Chris@0: @topic_pages, @topics = paginate(:topics) Chris@0: render :nothing => true Chris@0: end Chris@0: Chris@0: def paginate_with_per_page Chris@0: @topic_pages, @topics = paginate(:topics, :per_page => 1) Chris@0: render :nothing => true Chris@0: end Chris@0: Chris@0: def paginate_with_order Chris@0: @topic_pages, @topics = paginate(:topics, :order => 'created_at asc') Chris@0: render :nothing => true Chris@0: end Chris@0: Chris@0: def paginate_with_order_by Chris@0: @topic_pages, @topics = paginate(:topics, :order_by => 'created_at asc') Chris@0: render :nothing => true Chris@0: end Chris@0: Chris@0: def paginate_with_include_and_order Chris@0: @topic_pages, @topics = paginate(:topics, :include => :replies, :order => 'replies.created_at asc, topics.created_at asc') Chris@0: render :nothing => true Chris@0: end Chris@0: Chris@0: def paginate_with_conditions Chris@0: @topic_pages, @topics = paginate(:topics, :conditions => ["created_at > ?", 30.minutes.ago]) Chris@0: render :nothing => true Chris@0: end Chris@0: Chris@0: def paginate_with_class_name Chris@0: @developer_pages, @developers = paginate(:developers, :class_name => "DeVeLoPeR") Chris@0: render :nothing => true Chris@0: end Chris@0: Chris@0: def paginate_with_singular_name Chris@0: @developer_pages, @developers = paginate() Chris@0: render :nothing => true Chris@0: end Chris@0: Chris@0: def paginate_with_joins Chris@0: @developer_pages, @developers = paginate(:developers, Chris@0: :joins => 'LEFT JOIN developers_projects ON developers.id = developers_projects.developer_id', Chris@0: :conditions => 'project_id=1') Chris@0: render :nothing => true Chris@0: end Chris@0: Chris@0: def paginate_with_join Chris@0: @developer_pages, @developers = paginate(:developers, Chris@0: :join => 'LEFT JOIN developers_projects ON developers.id = developers_projects.developer_id', Chris@0: :conditions => 'project_id=1') Chris@0: render :nothing => true Chris@0: end Chris@0: Chris@0: def paginate_with_join_and_count Chris@0: @developer_pages, @developers = paginate(:developers, Chris@0: :join => 'd LEFT JOIN developers_projects ON d.id = developers_projects.developer_id', Chris@0: :conditions => 'project_id=1', Chris@0: :count => "d.id") Chris@0: render :nothing => true Chris@0: end Chris@0: Chris@0: def paginate_with_join_and_group Chris@0: @developer_pages, @developers = paginate(:developers, Chris@0: :join => 'INNER JOIN developers_projects ON developers.id = developers_projects.developer_id', Chris@0: :group => 'developers.id') Chris@0: render :nothing => true Chris@0: end Chris@0: Chris@0: def rescue_errors(e) raise e end Chris@0: Chris@0: def rescue_action(e) raise end Chris@0: Chris@0: end Chris@0: Chris@0: def setup Chris@0: @controller = PaginationController.new Chris@0: @request = ActionController::TestRequest.new Chris@0: @response = ActionController::TestResponse.new Chris@0: super Chris@0: end Chris@0: Chris@0: # Single Action Pagination Tests Chris@0: Chris@0: def test_simple_paginate Chris@0: get :simple_paginate Chris@0: assert_equal 1, assigns(:topic_pages).page_count Chris@0: assert_equal 3, assigns(:topics).size Chris@0: end Chris@0: Chris@0: def test_paginate_with_per_page Chris@0: get :paginate_with_per_page Chris@0: assert_equal 1, assigns(:topics).size Chris@0: assert_equal 3, assigns(:topic_pages).page_count Chris@0: end Chris@0: Chris@0: def test_paginate_with_order Chris@0: get :paginate_with_order Chris@0: expected = [topics(:futurama), Chris@0: topics(:harvey_birdman), Chris@0: topics(:rails)] Chris@0: assert_equal expected, assigns(:topics) Chris@0: assert_equal 1, assigns(:topic_pages).page_count Chris@0: end Chris@0: Chris@0: def test_paginate_with_order_by Chris@0: get :paginate_with_order Chris@0: expected = assigns(:topics) Chris@0: get :paginate_with_order_by Chris@0: assert_equal expected, assigns(:topics) Chris@0: assert_equal 1, assigns(:topic_pages).page_count Chris@0: end Chris@0: Chris@0: def test_paginate_with_conditions Chris@0: get :paginate_with_conditions Chris@0: expected = [topics(:rails)] Chris@0: assert_equal expected, assigns(:topics) Chris@0: assert_equal 1, assigns(:topic_pages).page_count Chris@0: end Chris@0: Chris@0: def test_paginate_with_class_name Chris@0: get :paginate_with_class_name Chris@0: Chris@0: assert assigns(:developers).size > 0 Chris@0: assert_equal DeVeLoPeR, assigns(:developers).first.class Chris@0: end Chris@0: Chris@0: def test_paginate_with_joins Chris@0: get :paginate_with_joins Chris@0: assert_equal 2, assigns(:developers).size Chris@0: developer_names = assigns(:developers).map { |d| d.name } Chris@0: assert developer_names.include?('David') Chris@0: assert developer_names.include?('Jamis') Chris@0: end Chris@0: Chris@0: def test_paginate_with_join_and_conditions Chris@0: get :paginate_with_joins Chris@0: expected = assigns(:developers) Chris@0: get :paginate_with_join Chris@0: assert_equal expected, assigns(:developers) Chris@0: end Chris@0: Chris@0: def test_paginate_with_join_and_count Chris@0: get :paginate_with_joins Chris@0: expected = assigns(:developers) Chris@0: get :paginate_with_join_and_count Chris@0: assert_equal expected, assigns(:developers) Chris@0: end Chris@0: Chris@0: def test_paginate_with_include_and_order Chris@0: get :paginate_with_include_and_order Chris@0: expected = Topic.find(:all, :include => 'replies', :order => 'replies.created_at asc, topics.created_at asc', :limit => 10) Chris@0: assert_equal expected, assigns(:topics) Chris@0: end Chris@0: Chris@0: def test_paginate_with_join_and_group Chris@0: get :paginate_with_join_and_group Chris@0: assert_equal 2, assigns(:developers).size Chris@0: assert_equal 2, assigns(:developer_pages).item_count Chris@0: developer_names = assigns(:developers).map { |d| d.name } Chris@0: assert developer_names.include?('David') Chris@0: assert developer_names.include?('Jamis') Chris@0: end Chris@0: end