@@ -4,9 +4,11 @@ module Elasticsearch
4
4
module Model
5
5
class ActiveRecordPaginationTest < Elasticsearch ::Test ::IntegrationTestCase
6
6
7
- class ::Article < ActiveRecord ::Base
7
+ class ::ArticleForPagination < ActiveRecord ::Base
8
8
include Elasticsearch ::Model
9
9
10
+ scope :published , -> { where ( published : true ) }
11
+
10
12
settings index : { number_of_shards : 1 , number_of_replicas : 0 } do
11
13
mapping do
12
14
indexes :title , type : 'string' , analyzer : 'snowball'
@@ -20,23 +22,26 @@ class ::Article < ActiveRecord::Base
20
22
context "ActiveRecord pagination" do
21
23
setup do
22
24
ActiveRecord ::Schema . define ( :version => 1 ) do
23
- create_table :articles do |t |
25
+ create_table :: ArticleForPagination . table_name do |t |
24
26
t . string :title
25
27
t . datetime :created_at , :default => 'NOW()'
28
+ t . boolean :published
26
29
end
27
30
end
28
31
29
- Article . delete_all
30
- Article . __elasticsearch__ . create_index! force : true
32
+ ArticleForPagination . delete_all
33
+ ArticleForPagination . __elasticsearch__ . create_index! force : true
31
34
32
- 68 . times do |i | ::Article . create! title : "Test #{ i } " end
35
+ 68 . times do |i |
36
+ ::ArticleForPagination . create! title : "Test #{ i } " , published : ( i % 2 == 0 )
37
+ end
33
38
34
- Article . import
35
- Article . __elasticsearch__ . refresh_index!
39
+ ArticleForPagination . import
40
+ ArticleForPagination . __elasticsearch__ . refresh_index!
36
41
end
37
42
38
43
should "be on the first page by default" do
39
- records = Article . search ( 'title:test' ) . page ( 1 ) . records
44
+ records = ArticleForPagination . search ( 'title:test' ) . page ( 1 ) . records
40
45
41
46
assert_equal 25 , records . size
42
47
assert_equal 1 , records . current_page
@@ -50,7 +55,7 @@ class ::Article < ActiveRecord::Base
50
55
end
51
56
52
57
should "load next page" do
53
- records = Article . search ( 'title:test' ) . page ( 2 ) . records
58
+ records = ArticleForPagination . search ( 'title:test' ) . page ( 2 ) . records
54
59
55
60
assert_equal 25 , records . size
56
61
assert_equal 2 , records . current_page
@@ -64,7 +69,7 @@ class ::Article < ActiveRecord::Base
64
69
end
65
70
66
71
should "load last page" do
67
- records = Article . search ( 'title:test' ) . page ( 3 ) . records
72
+ records = ArticleForPagination . search ( 'title:test' ) . page ( 3 ) . records
68
73
69
74
assert_equal 18 , records . size
70
75
assert_equal 3 , records . current_page
@@ -78,7 +83,7 @@ class ::Article < ActiveRecord::Base
78
83
end
79
84
80
85
should "not load invalid page" do
81
- records = Article . search ( 'title:test' ) . page ( 6 ) . records
86
+ records = ArticleForPagination . search ( 'title:test' ) . page ( 6 ) . records
82
87
83
88
assert_equal 0 , records . size
84
89
assert_equal 6 , records . current_page
@@ -91,16 +96,22 @@ class ::Article < ActiveRecord::Base
91
96
assert records . out_of_range? , "Should be out of range"
92
97
end
93
98
99
+ should "be combined with scopes" do
100
+ records = ArticleForPagination . search ( 'title:test' ) . page ( 2 ) . records . published
101
+ assert records . all? { |r | r . published? }
102
+ assert_equal 12 , records . size
103
+ end
104
+
94
105
context "with specific model settings" do
95
106
teardown do
96
- Article . instance_variable_set ( :@_default_per_page , nil )
107
+ ArticleForPagination . instance_variable_set ( :@_default_per_page , nil )
97
108
end
98
109
end
99
110
100
111
should "respect paginates_per" do
101
- Article . paginates_per 50
112
+ ArticleForPagination . paginates_per 50
102
113
103
- assert_equal 50 , Article . search ( '*' ) . page ( 1 ) . records . size
114
+ assert_equal 50 , ArticleForPagination . search ( '*' ) . page ( 1 ) . records . size
104
115
end
105
116
end
106
117
0 commit comments