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