Chris@0
|
1 require File.dirname(__FILE__) + '/helper'
|
Chris@0
|
2 require File.dirname(__FILE__) + '/../init'
|
Chris@0
|
3
|
Chris@0
|
4 class PaginationTest < ActiveRecordTestCase
|
Chris@0
|
5 fixtures :topics, :replies, :developers, :projects, :developers_projects
|
Chris@0
|
6
|
Chris@0
|
7 class PaginationController < ActionController::Base
|
Chris@0
|
8 if respond_to? :view_paths=
|
Chris@0
|
9 self.view_paths = [ "#{File.dirname(__FILE__)}/../fixtures/" ]
|
Chris@0
|
10 else
|
Chris@0
|
11 self.template_root = [ "#{File.dirname(__FILE__)}/../fixtures/" ]
|
Chris@0
|
12 end
|
Chris@0
|
13
|
Chris@0
|
14 def simple_paginate
|
Chris@0
|
15 @topic_pages, @topics = paginate(:topics)
|
Chris@0
|
16 render :nothing => true
|
Chris@0
|
17 end
|
Chris@0
|
18
|
Chris@0
|
19 def paginate_with_per_page
|
Chris@0
|
20 @topic_pages, @topics = paginate(:topics, :per_page => 1)
|
Chris@0
|
21 render :nothing => true
|
Chris@0
|
22 end
|
Chris@0
|
23
|
Chris@0
|
24 def paginate_with_order
|
Chris@0
|
25 @topic_pages, @topics = paginate(:topics, :order => 'created_at asc')
|
Chris@0
|
26 render :nothing => true
|
Chris@0
|
27 end
|
Chris@0
|
28
|
Chris@0
|
29 def paginate_with_order_by
|
Chris@0
|
30 @topic_pages, @topics = paginate(:topics, :order_by => 'created_at asc')
|
Chris@0
|
31 render :nothing => true
|
Chris@0
|
32 end
|
Chris@0
|
33
|
Chris@0
|
34 def paginate_with_include_and_order
|
Chris@0
|
35 @topic_pages, @topics = paginate(:topics, :include => :replies, :order => 'replies.created_at asc, topics.created_at asc')
|
Chris@0
|
36 render :nothing => true
|
Chris@0
|
37 end
|
Chris@0
|
38
|
Chris@0
|
39 def paginate_with_conditions
|
Chris@0
|
40 @topic_pages, @topics = paginate(:topics, :conditions => ["created_at > ?", 30.minutes.ago])
|
Chris@0
|
41 render :nothing => true
|
Chris@0
|
42 end
|
Chris@0
|
43
|
Chris@0
|
44 def paginate_with_class_name
|
Chris@0
|
45 @developer_pages, @developers = paginate(:developers, :class_name => "DeVeLoPeR")
|
Chris@0
|
46 render :nothing => true
|
Chris@0
|
47 end
|
Chris@0
|
48
|
Chris@0
|
49 def paginate_with_singular_name
|
Chris@0
|
50 @developer_pages, @developers = paginate()
|
Chris@0
|
51 render :nothing => true
|
Chris@0
|
52 end
|
Chris@0
|
53
|
Chris@0
|
54 def paginate_with_joins
|
Chris@0
|
55 @developer_pages, @developers = paginate(:developers,
|
Chris@0
|
56 :joins => 'LEFT JOIN developers_projects ON developers.id = developers_projects.developer_id',
|
Chris@0
|
57 :conditions => 'project_id=1')
|
Chris@0
|
58 render :nothing => true
|
Chris@0
|
59 end
|
Chris@0
|
60
|
Chris@0
|
61 def paginate_with_join
|
Chris@0
|
62 @developer_pages, @developers = paginate(:developers,
|
Chris@0
|
63 :join => 'LEFT JOIN developers_projects ON developers.id = developers_projects.developer_id',
|
Chris@0
|
64 :conditions => 'project_id=1')
|
Chris@0
|
65 render :nothing => true
|
Chris@0
|
66 end
|
Chris@0
|
67
|
Chris@0
|
68 def paginate_with_join_and_count
|
Chris@0
|
69 @developer_pages, @developers = paginate(:developers,
|
Chris@0
|
70 :join => 'd LEFT JOIN developers_projects ON d.id = developers_projects.developer_id',
|
Chris@0
|
71 :conditions => 'project_id=1',
|
Chris@0
|
72 :count => "d.id")
|
Chris@0
|
73 render :nothing => true
|
Chris@0
|
74 end
|
Chris@0
|
75
|
Chris@0
|
76 def paginate_with_join_and_group
|
Chris@0
|
77 @developer_pages, @developers = paginate(:developers,
|
Chris@0
|
78 :join => 'INNER JOIN developers_projects ON developers.id = developers_projects.developer_id',
|
Chris@0
|
79 :group => 'developers.id')
|
Chris@0
|
80 render :nothing => true
|
Chris@0
|
81 end
|
Chris@0
|
82
|
Chris@0
|
83 def rescue_errors(e) raise e end
|
Chris@0
|
84
|
Chris@0
|
85 def rescue_action(e) raise end
|
Chris@0
|
86
|
Chris@0
|
87 end
|
Chris@0
|
88
|
Chris@0
|
89 def setup
|
Chris@0
|
90 @controller = PaginationController.new
|
Chris@0
|
91 @request = ActionController::TestRequest.new
|
Chris@0
|
92 @response = ActionController::TestResponse.new
|
Chris@0
|
93 super
|
Chris@0
|
94 end
|
Chris@0
|
95
|
Chris@0
|
96 # Single Action Pagination Tests
|
Chris@0
|
97
|
Chris@0
|
98 def test_simple_paginate
|
Chris@0
|
99 get :simple_paginate
|
Chris@0
|
100 assert_equal 1, assigns(:topic_pages).page_count
|
Chris@0
|
101 assert_equal 3, assigns(:topics).size
|
Chris@0
|
102 end
|
Chris@0
|
103
|
Chris@0
|
104 def test_paginate_with_per_page
|
Chris@0
|
105 get :paginate_with_per_page
|
Chris@0
|
106 assert_equal 1, assigns(:topics).size
|
Chris@0
|
107 assert_equal 3, assigns(:topic_pages).page_count
|
Chris@0
|
108 end
|
Chris@0
|
109
|
Chris@0
|
110 def test_paginate_with_order
|
Chris@0
|
111 get :paginate_with_order
|
Chris@0
|
112 expected = [topics(:futurama),
|
Chris@0
|
113 topics(:harvey_birdman),
|
Chris@0
|
114 topics(:rails)]
|
Chris@0
|
115 assert_equal expected, assigns(:topics)
|
Chris@0
|
116 assert_equal 1, assigns(:topic_pages).page_count
|
Chris@0
|
117 end
|
Chris@0
|
118
|
Chris@0
|
119 def test_paginate_with_order_by
|
Chris@0
|
120 get :paginate_with_order
|
Chris@0
|
121 expected = assigns(:topics)
|
Chris@0
|
122 get :paginate_with_order_by
|
Chris@0
|
123 assert_equal expected, assigns(:topics)
|
Chris@0
|
124 assert_equal 1, assigns(:topic_pages).page_count
|
Chris@0
|
125 end
|
Chris@0
|
126
|
Chris@0
|
127 def test_paginate_with_conditions
|
Chris@0
|
128 get :paginate_with_conditions
|
Chris@0
|
129 expected = [topics(:rails)]
|
Chris@0
|
130 assert_equal expected, assigns(:topics)
|
Chris@0
|
131 assert_equal 1, assigns(:topic_pages).page_count
|
Chris@0
|
132 end
|
Chris@0
|
133
|
Chris@0
|
134 def test_paginate_with_class_name
|
Chris@0
|
135 get :paginate_with_class_name
|
Chris@0
|
136
|
Chris@0
|
137 assert assigns(:developers).size > 0
|
Chris@0
|
138 assert_equal DeVeLoPeR, assigns(:developers).first.class
|
Chris@0
|
139 end
|
Chris@0
|
140
|
Chris@0
|
141 def test_paginate_with_joins
|
Chris@0
|
142 get :paginate_with_joins
|
Chris@0
|
143 assert_equal 2, assigns(:developers).size
|
Chris@0
|
144 developer_names = assigns(:developers).map { |d| d.name }
|
Chris@0
|
145 assert developer_names.include?('David')
|
Chris@0
|
146 assert developer_names.include?('Jamis')
|
Chris@0
|
147 end
|
Chris@0
|
148
|
Chris@0
|
149 def test_paginate_with_join_and_conditions
|
Chris@0
|
150 get :paginate_with_joins
|
Chris@0
|
151 expected = assigns(:developers)
|
Chris@0
|
152 get :paginate_with_join
|
Chris@0
|
153 assert_equal expected, assigns(:developers)
|
Chris@0
|
154 end
|
Chris@0
|
155
|
Chris@0
|
156 def test_paginate_with_join_and_count
|
Chris@0
|
157 get :paginate_with_joins
|
Chris@0
|
158 expected = assigns(:developers)
|
Chris@0
|
159 get :paginate_with_join_and_count
|
Chris@0
|
160 assert_equal expected, assigns(:developers)
|
Chris@0
|
161 end
|
Chris@0
|
162
|
Chris@0
|
163 def test_paginate_with_include_and_order
|
Chris@0
|
164 get :paginate_with_include_and_order
|
Chris@0
|
165 expected = Topic.find(:all, :include => 'replies', :order => 'replies.created_at asc, topics.created_at asc', :limit => 10)
|
Chris@0
|
166 assert_equal expected, assigns(:topics)
|
Chris@0
|
167 end
|
Chris@0
|
168
|
Chris@0
|
169 def test_paginate_with_join_and_group
|
Chris@0
|
170 get :paginate_with_join_and_group
|
Chris@0
|
171 assert_equal 2, assigns(:developers).size
|
Chris@0
|
172 assert_equal 2, assigns(:developer_pages).item_count
|
Chris@0
|
173 developer_names = assigns(:developers).map { |d| d.name }
|
Chris@0
|
174 assert developer_names.include?('David')
|
Chris@0
|
175 assert developer_names.include?('Jamis')
|
Chris@0
|
176 end
|
Chris@0
|
177 end
|