1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
require File.dirname(__FILE__) + '/../active_record_unit'
class PaginationTest < ActiveRecordTestCase
fixtures :topics, :replies, :developers, :projects, :developers_projects
class PaginationController < ActionController::Base
self.view_paths = [ "#{File.dirname(__FILE__)}/../fixtures/" ]
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 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
end
|