@@ -10,21 +10,22 @@ module Elasticsearch
10
10
module Model
11
11
class ActiveRecordImportIntegrationTest < Elasticsearch ::Test ::IntegrationTestCase
12
12
13
- class ::ImportArticle < ActiveRecord ::Base
14
- include Elasticsearch ::Model
13
+ context "ActiveRecord importing" do
14
+ setup do
15
+ Object . send ( :remove_const , :ImportArticle ) if defined? ( ImportArticle )
16
+ class ::ImportArticle < ActiveRecord ::Base
17
+ include Elasticsearch ::Model
15
18
16
- scope :popular , -> { where ( 'views >= 50' ) }
19
+ scope :popular , -> { where ( 'views >= 50' ) }
17
20
18
- mapping do
19
- indexes :title , type : 'text'
20
- indexes :views , type : 'integer'
21
- indexes :numeric , type : 'integer'
22
- indexes :created_at , type : 'date'
23
- end
24
- end
21
+ mapping do
22
+ indexes :title , type : 'text'
23
+ indexes :views , type : 'integer'
24
+ indexes :numeric , type : 'integer'
25
+ indexes :created_at , type : 'date'
26
+ end
27
+ end
25
28
26
- context "ActiveRecord importing" do
27
- setup do
28
29
ActiveRecord ::Schema . define ( :version => 1 ) do
29
30
create_table :import_articles do |t |
30
31
t . string :title
@@ -110,6 +111,58 @@ class ::ImportArticle < ActiveRecord::Base
110
111
end
111
112
end
112
113
114
+ context "ActiveRecord importing when the model has a default scope" do
115
+
116
+ setup do
117
+ Object . send ( :remove_const , :ImportArticle ) if defined? ( ImportArticle )
118
+ class ::ImportArticle < ActiveRecord ::Base
119
+ include Elasticsearch ::Model
120
+
121
+ default_scope { where ( 'views >= 8' ) }
122
+
123
+ mapping do
124
+ indexes :title , type : 'text'
125
+ indexes :views , type : 'integer'
126
+ indexes :numeric , type : 'integer'
127
+ indexes :created_at , type : 'date'
128
+ end
129
+ end
130
+
131
+ ActiveRecord ::Schema . define ( :version => 1 ) do
132
+ create_table :import_articles do |t |
133
+ t . string :title
134
+ t . integer :views
135
+ t . string :numeric # For the sake of invalid data sent to Elasticsearch
136
+ t . datetime :created_at , :default => 'NOW()'
137
+ end
138
+ end
139
+
140
+ ImportArticle . delete_all
141
+ ImportArticle . __elasticsearch__ . delete_index! force : true
142
+ ImportArticle . __elasticsearch__ . create_index! force : true
143
+ ImportArticle . __elasticsearch__ . client . cluster . health wait_for_status : 'yellow'
144
+
145
+ 10 . times { |i | ImportArticle . create! title : "Test #{ i } " , views : i }
146
+ end
147
+
148
+ should "import only documents from the default scope" do
149
+ assert_equal 2 , ImportArticle . count
150
+
151
+ assert_equal 0 , ImportArticle . import
152
+
153
+ ImportArticle . __elasticsearch__ . refresh_index!
154
+ assert_equal 2 , ImportArticle . search ( '*' ) . results . total
155
+ end
156
+
157
+ should "import only documents from a specific query combined with the default scope" do
158
+ assert_equal 2 , ImportArticle . count
159
+
160
+ assert_equal 0 , ImportArticle . import ( query : -> { where ( "title = 'Test 9'" ) } )
161
+
162
+ ImportArticle . __elasticsearch__ . refresh_index!
163
+ assert_equal 1 , ImportArticle . search ( '*' ) . results . total
164
+ end
165
+ end
113
166
end
114
167
end
115
168
end
0 commit comments