Skip to content

Commit f5708eb

Browse files
committed
[TEST] Added an integration test for combining pagination with scopes
See: http://guides.rubyonrails.org/active_record_querying.html#scopes Related: elastic#16
1 parent 26a3ba2 commit f5708eb

File tree

1 file changed

+25
-14
lines changed

1 file changed

+25
-14
lines changed

elasticsearch-model/test/integration/active_record_pagination_test.rb

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ module Elasticsearch
44
module Model
55
class ActiveRecordPaginationTest < Elasticsearch::Test::IntegrationTestCase
66

7-
class ::Article < ActiveRecord::Base
7+
class ::ArticleForPagination < ActiveRecord::Base
88
include Elasticsearch::Model
99

10+
scope :published, -> { where(published: true) }
11+
1012
settings index: { number_of_shards: 1, number_of_replicas: 0 } do
1113
mapping do
1214
indexes :title, type: 'string', analyzer: 'snowball'
@@ -20,23 +22,26 @@ class ::Article < ActiveRecord::Base
2022
context "ActiveRecord pagination" do
2123
setup do
2224
ActiveRecord::Schema.define(:version => 1) do
23-
create_table :articles do |t|
25+
create_table ::ArticleForPagination.table_name do |t|
2426
t.string :title
2527
t.datetime :created_at, :default => 'NOW()'
28+
t.boolean :published
2629
end
2730
end
2831

29-
Article.delete_all
30-
Article.__elasticsearch__.create_index! force: true
32+
ArticleForPagination.delete_all
33+
ArticleForPagination.__elasticsearch__.create_index! force: true
3134

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
3338

34-
Article.import
35-
Article.__elasticsearch__.refresh_index!
39+
ArticleForPagination.import
40+
ArticleForPagination.__elasticsearch__.refresh_index!
3641
end
3742

3843
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
4045

4146
assert_equal 25, records.size
4247
assert_equal 1, records.current_page
@@ -50,7 +55,7 @@ class ::Article < ActiveRecord::Base
5055
end
5156

5257
should "load next page" do
53-
records = Article.search('title:test').page(2).records
58+
records = ArticleForPagination.search('title:test').page(2).records
5459

5560
assert_equal 25, records.size
5661
assert_equal 2, records.current_page
@@ -64,7 +69,7 @@ class ::Article < ActiveRecord::Base
6469
end
6570

6671
should "load last page" do
67-
records = Article.search('title:test').page(3).records
72+
records = ArticleForPagination.search('title:test').page(3).records
6873

6974
assert_equal 18, records.size
7075
assert_equal 3, records.current_page
@@ -78,7 +83,7 @@ class ::Article < ActiveRecord::Base
7883
end
7984

8085
should "not load invalid page" do
81-
records = Article.search('title:test').page(6).records
86+
records = ArticleForPagination.search('title:test').page(6).records
8287

8388
assert_equal 0, records.size
8489
assert_equal 6, records.current_page
@@ -91,16 +96,22 @@ class ::Article < ActiveRecord::Base
9196
assert records.out_of_range?, "Should be out of range"
9297
end
9398

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+
94105
context "with specific model settings" do
95106
teardown do
96-
Article.instance_variable_set(:@_default_per_page, nil)
107+
ArticleForPagination.instance_variable_set(:@_default_per_page, nil)
97108
end
98109
end
99110

100111
should "respect paginates_per" do
101-
Article.paginates_per 50
112+
ArticleForPagination.paginates_per 50
102113

103-
assert_equal 50, Article.search('*').page(1).records.size
114+
assert_equal 50, ArticleForPagination.search('*').page(1).records.size
104115
end
105116
end
106117

0 commit comments

Comments
 (0)