chewy 0.10.1 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +25 -25
  3. data/.travis.yml +21 -29
  4. data/Appraisals +27 -9
  5. data/CHANGELOG.md +36 -0
  6. data/Gemfile +3 -1
  7. data/README.md +73 -23
  8. data/chewy.gemspec +6 -8
  9. data/gemfiles/rails.4.0.activerecord.gemfile +1 -0
  10. data/gemfiles/rails.4.1.activerecord.gemfile +1 -0
  11. data/gemfiles/rails.4.2.activerecord.gemfile +1 -0
  12. data/gemfiles/{rails.4.2.mongoid.5.1.gemfile → rails.4.2.mongoid.5.2.gemfile} +2 -1
  13. data/gemfiles/rails.5.0.activerecord.gemfile +2 -1
  14. data/gemfiles/{rails.5.0.mongoid.6.0.gemfile → rails.5.0.mongoid.6.1.gemfile} +3 -2
  15. data/gemfiles/rails.5.1.activerecord.gemfile +2 -1
  16. data/gemfiles/{rails.5.1.mongoid.6.1.gemfile → rails.5.1.mongoid.6.3.gemfile} +3 -2
  17. data/gemfiles/rails.5.2.activerecord.gemfile +16 -0
  18. data/gemfiles/sequel.4.45.gemfile +2 -2
  19. data/lib/chewy.rb +1 -0
  20. data/lib/chewy/config.rb +8 -19
  21. data/lib/chewy/fields/base.rb +15 -3
  22. data/lib/chewy/fields/root.rb +13 -9
  23. data/lib/chewy/index.rb +1 -1
  24. data/lib/chewy/index/actions.rb +14 -12
  25. data/lib/chewy/index/settings.rb +2 -0
  26. data/lib/chewy/index/specification.rb +12 -10
  27. data/lib/chewy/minitest/helpers.rb +6 -6
  28. data/lib/chewy/minitest/search_index_receiver.rb +17 -17
  29. data/lib/chewy/query.rb +135 -96
  30. data/lib/chewy/query/filters.rb +20 -3
  31. data/lib/chewy/query/loading.rb +0 -1
  32. data/lib/chewy/railtie.rb +2 -4
  33. data/lib/chewy/rake_helper.rb +5 -5
  34. data/lib/chewy/rspec/update_index.rb +3 -5
  35. data/lib/chewy/search.rb +2 -2
  36. data/lib/chewy/search/parameters/concerns/query_storage.rb +4 -3
  37. data/lib/chewy/stash.rb +30 -21
  38. data/lib/chewy/strategy/atomic.rb +1 -1
  39. data/lib/chewy/type.rb +2 -2
  40. data/lib/chewy/type/adapter/base.rb +9 -9
  41. data/lib/chewy/type/adapter/mongoid.rb +1 -3
  42. data/lib/chewy/type/adapter/sequel.rb +4 -6
  43. data/lib/chewy/type/crutch.rb +1 -1
  44. data/lib/chewy/type/import.rb +3 -2
  45. data/lib/chewy/type/import/bulk_builder.rb +1 -1
  46. data/lib/chewy/type/import/journal_builder.rb +3 -3
  47. data/lib/chewy/type/import/routine.rb +2 -2
  48. data/lib/chewy/type/mapping.rb +40 -34
  49. data/lib/chewy/type/observe.rb +13 -9
  50. data/lib/chewy/type/syncer.rb +2 -2
  51. data/lib/chewy/type/witchcraft.rb +2 -2
  52. data/lib/chewy/type/wrapper.rb +2 -2
  53. data/lib/chewy/version.rb +1 -1
  54. data/lib/sequel/plugins/chewy_observe.rb +4 -19
  55. data/spec/chewy/config_spec.rb +16 -0
  56. data/spec/chewy/fields/base_spec.rb +61 -65
  57. data/spec/chewy/fields/root_spec.rb +13 -13
  58. data/spec/chewy/index/actions_spec.rb +37 -5
  59. data/spec/chewy/index/specification_spec.rb +25 -16
  60. data/spec/chewy/index_spec.rb +61 -8
  61. data/spec/chewy/journal_spec.rb +11 -11
  62. data/spec/chewy/query/filters_spec.rb +1 -1
  63. data/spec/chewy/query/nodes/not_spec.rb +1 -0
  64. data/spec/chewy/query_spec.rb +3 -2
  65. data/spec/chewy/rake_helper_spec.rb +46 -33
  66. data/spec/chewy/search_spec.rb +20 -10
  67. data/spec/chewy/stash_spec.rb +1 -1
  68. data/spec/chewy/strategy/shoryuken_spec.rb +2 -0
  69. data/spec/chewy/type/import/journal_builder_spec.rb +8 -8
  70. data/spec/chewy/type/import_spec.rb +6 -0
  71. data/spec/chewy/type/mapping_spec.rb +48 -17
  72. data/spec/spec_helper.rb +8 -0
  73. metadata +26 -25
@@ -63,7 +63,7 @@ describe Chewy::Fields::Base do
63
63
  end
64
64
 
65
65
  context 'implicit values' do
66
- let(:field) { described_class.new(:name, type: 'string') }
66
+ let(:field) { described_class.new(:name, type: 'integer') }
67
67
  before do
68
68
  field.children.push(described_class.new(:name))
69
69
  field.children.push(described_class.new(:untouched))
@@ -87,8 +87,8 @@ describe Chewy::Fields::Base do
87
87
 
88
88
  describe '#mappings_hash' do
89
89
  let(:field) { described_class.new(:name, type: :object) }
90
- let(:fields1) { Array.new(2) { |i| described_class.new("name#{i + 1}", type: "string#{i + 1}") } }
91
- let(:fields2) { Array.new(2) { |i| described_class.new("name#{i + 3}", type: "string#{i + 3}") } }
90
+ let(:fields1) { Array.new(2) { |i| described_class.new("name#{i + 1}", type: "integer#{i + 1}") } }
91
+ let(:fields2) { Array.new(2) { |i| described_class.new("name#{i + 3}", type: "integer#{i + 3}") } }
92
92
  before do
93
93
  fields1.each { |m| field.children.push(m) }
94
94
  fields2.each { |m| fields1[0].children.push(m) }
@@ -96,28 +96,30 @@ describe Chewy::Fields::Base do
96
96
 
97
97
  specify do
98
98
  expect(field.mappings_hash).to eq(name: {type: :object, properties: {
99
- name1: {type: 'string1', fields: {
100
- name3: {type: 'string3'}, name4: {type: 'string4'}
101
- }}, name2: {type: 'string2'}
99
+ name1: {type: 'integer1', fields: {
100
+ name3: {type: 'integer3'}, name4: {type: 'integer4'}
101
+ }}, name2: {type: 'integer2'}
102
102
  }})
103
103
  end
104
104
 
105
105
  context do
106
- let(:field) { described_class.new(:name, type: :string) }
107
- let(:fields1) { Array.new(2) { |i| described_class.new("name#{i + 1}") } }
106
+ let(:field) { described_class.new(:name, type: :integer) }
107
+ let(:fields1) do
108
+ [described_class.new(:name1), described_class.new(:name2, type: 'integer')]
109
+ end
108
110
 
109
111
  specify do
110
- expect(field.mappings_hash).to eq(name: {type: :string, fields: {
112
+ expect(field.mappings_hash).to eq(name: {type: :integer, fields: {
111
113
  name1: {type: 'object', properties: {
112
- name3: {type: 'string3'}, name4: {type: 'string4'}
113
- }}, name2: {type: 'string'}
114
+ name3: {type: 'integer3'}, name4: {type: 'integer4'}
115
+ }}, name2: {type: 'integer'}
114
116
  }})
115
117
  end
116
118
  end
117
119
  end
118
120
 
119
121
  context 'integration' do
120
- context 'objects, hashes and arrays' do
122
+ context 'default field type' do
121
123
  before do
122
124
  stub_index(:events) do
123
125
  define_type :event do
@@ -126,26 +128,33 @@ describe Chewy::Fields::Base do
126
128
  field :id
127
129
  field :licenses do
128
130
  field :id
129
- field :name
131
+ field :created_at, type: 'time'
130
132
  end
131
133
  end
132
134
  end
133
135
  end
134
136
  end
135
137
 
138
+ around do |example|
139
+ previous_type = Chewy.default_field_type
140
+ Chewy.default_field_type = 'integer'
141
+ example.run
142
+ Chewy.default_field_type = previous_type
143
+ end
144
+
136
145
  specify do
137
146
  expect(EventsIndex::Event.mappings_hash).to eq(event: {
138
147
  properties: {
139
- id: {type: 'string'},
148
+ id: {type: 'integer'},
140
149
  category: {
141
150
  type: 'object',
142
151
  properties: {
143
- id: {type: 'string'},
152
+ id: {type: 'integer'},
144
153
  licenses: {
145
154
  type: 'object',
146
155
  properties: {
147
- id: {type: 'string'},
148
- name: {type: 'string'}
156
+ id: {type: 'integer'},
157
+ created_at: {type: 'time'}
149
158
  }
150
159
  }
151
160
  }
@@ -153,45 +162,32 @@ describe Chewy::Fields::Base do
153
162
  }
154
163
  })
155
164
  end
165
+ end
156
166
 
157
- context 'default field type' do
158
- around do |example|
159
- previous_type = Chewy.default_field_type
160
- Chewy.default_field_type = 'text'
161
- example.run
162
- Chewy.default_field_type = previous_type
163
- end
164
-
165
- specify do
166
- expect(EventsIndex::Event.mappings_hash).to eq(event: {
167
- properties: {
168
- id: {type: 'text'},
169
- category: {
170
- type: 'object',
171
- properties: {
172
- id: {type: 'text'},
173
- licenses: {
174
- type: 'object',
175
- properties: {
176
- id: {type: 'text'},
177
- name: {type: 'text'}
178
- }
179
- }
180
- }
181
- }
182
- }
183
- })
167
+ context 'objects, hashes and arrays' do
168
+ before do
169
+ stub_index(:events) do
170
+ define_type :event do
171
+ field :id
172
+ field :category do
173
+ field :id
174
+ field :licenses do
175
+ field :id
176
+ field :name
177
+ end
178
+ end
179
+ end
184
180
  end
185
181
  end
186
182
 
187
183
  specify do
188
- expect(EventsIndex::Event.root_object.compose(
184
+ expect(EventsIndex::Event.root.compose(
189
185
  id: 1, category: {id: 2, licenses: {id: 3, name: 'Name'}}
190
186
  )).to eq('id' => 1, 'category' => {'id' => 2, 'licenses' => {'id' => 3, 'name' => 'Name'}})
191
187
  end
192
188
 
193
189
  specify do
194
- expect(EventsIndex::Event.root_object.compose(id: 1, category: [
190
+ expect(EventsIndex::Event.root.compose(id: 1, category: [
195
191
  {id: 2, 'licenses' => {id: 3, name: 'Name1'}},
196
192
  {id: 4, licenses: nil}
197
193
  ])).to eq('id' => 1, 'category' => [
@@ -201,7 +197,7 @@ describe Chewy::Fields::Base do
201
197
  end
202
198
 
203
199
  specify do
204
- expect(EventsIndex::Event.root_object.compose('id' => 1, category: {id: 2, licenses: [
200
+ expect(EventsIndex::Event.root.compose('id' => 1, category: {id: 2, licenses: [
205
201
  {id: 3, name: 'Name1'}, {id: 4, name: 'Name2'}
206
202
  ]})).to eq('id' => 1, 'category' => {'id' => 2, 'licenses' => [
207
203
  {'id' => 3, 'name' => 'Name1'}, {'id' => 4, 'name' => 'Name2'}
@@ -209,7 +205,7 @@ describe Chewy::Fields::Base do
209
205
  end
210
206
 
211
207
  specify do
212
- expect(EventsIndex::Event.root_object.compose(id: 1, category: [
208
+ expect(EventsIndex::Event.root.compose(id: 1, category: [
213
209
  {id: 2, licenses: [
214
210
  {id: 3, 'name' => 'Name1'}, {id: 4, name: 'Name2'}
215
211
  ]},
@@ -223,13 +219,13 @@ describe Chewy::Fields::Base do
223
219
  end
224
220
 
225
221
  specify do
226
- expect(EventsIndex::Event.root_object.compose(
222
+ expect(EventsIndex::Event.root.compose(
227
223
  double(id: 1, category: double(id: 2, licenses: double(id: 3, name: 'Name')))
228
224
  )).to eq('id' => 1, 'category' => {'id' => 2, 'licenses' => {'id' => 3, 'name' => 'Name'}})
229
225
  end
230
226
 
231
227
  specify do
232
- expect(EventsIndex::Event.root_object.compose(double(id: 1, category: [
228
+ expect(EventsIndex::Event.root.compose(double(id: 1, category: [
233
229
  double(id: 2, licenses: double(id: 3, name: 'Name1')),
234
230
  double(id: 4, licenses: nil)
235
231
  ]))).to eq('id' => 1, 'category' => [
@@ -239,7 +235,7 @@ describe Chewy::Fields::Base do
239
235
  end
240
236
 
241
237
  specify do
242
- expect(EventsIndex::Event.root_object.compose(double(id: 1, category: double(id: 2, licenses: [
238
+ expect(EventsIndex::Event.root.compose(double(id: 1, category: double(id: 2, licenses: [
243
239
  double(id: 3, name: 'Name1'), double(id: 4, name: 'Name2')
244
240
  ])))).to eq('id' => 1, 'category' => {'id' => 2, 'licenses' => [
245
241
  {'id' => 3, 'name' => 'Name1'}, {'id' => 4, 'name' => 'Name2'}
@@ -247,7 +243,7 @@ describe Chewy::Fields::Base do
247
243
  end
248
244
 
249
245
  specify do
250
- expect(EventsIndex::Event.root_object.compose(double(id: 1, category: [
246
+ expect(EventsIndex::Event.root.compose(double(id: 1, category: [
251
247
  double(id: 2, licenses: [
252
248
  double(id: 3, name: 'Name1'), double(id: 4, name: 'Name2')
253
249
  ]),
@@ -265,11 +261,11 @@ describe Chewy::Fields::Base do
265
261
  before do
266
262
  stub_index(:events) do
267
263
  define_type :event do
268
- field :id
264
+ field :id, type: 'integer'
269
265
  field :category, value: -> { categories } do
270
- field :id
266
+ field :id, type: 'integer'
271
267
  field :licenses, value: -> { license } do
272
- field :id
268
+ field :id, type: 'integer'
273
269
  field :name
274
270
  end
275
271
  end
@@ -278,7 +274,7 @@ describe Chewy::Fields::Base do
278
274
  end
279
275
 
280
276
  specify do
281
- expect(EventsIndex::Event.root_object.compose(
277
+ expect(EventsIndex::Event.root.compose(
282
278
  double(id: 1, categories: double(id: 2, license: double(id: 3, name: 'Name')))
283
279
  )).to eq('id' => 1, 'category' => {'id' => 2, 'licenses' => {'id' => 3, 'name' => 'Name'}})
284
280
  end
@@ -288,8 +284,8 @@ describe Chewy::Fields::Base do
288
284
  before do
289
285
  stub_index(:events) do
290
286
  define_type :event do
291
- field :id
292
- field :name, type: 'string' do
287
+ field :id, type: 'integer'
288
+ field :name, type: 'integer' do
293
289
  field :raw, analyzer: 'my_own'
294
290
  end
295
291
  field :category, type: 'object'
@@ -300,11 +296,11 @@ describe Chewy::Fields::Base do
300
296
  specify do
301
297
  expect(EventsIndex::Event.mappings_hash).to eq(event: {
302
298
  properties: {
303
- id: {type: 'string'},
299
+ id: {type: 'integer'},
304
300
  name: {
305
- type: 'string',
301
+ type: 'integer',
306
302
  fields: {
307
- raw: {analyzer: 'my_own', type: 'string'}
303
+ raw: {analyzer: 'my_own', type: Chewy.default_field_type}
308
304
  }
309
305
  },
310
306
  category: {type: 'object'}
@@ -313,7 +309,7 @@ describe Chewy::Fields::Base do
313
309
  end
314
310
 
315
311
  specify do
316
- expect(EventsIndex::Event.root_object.compose(
312
+ expect(EventsIndex::Event.root.compose(
317
313
  double(id: 1, name: 'Jonny', category: double(id: 2, as_json: {'name' => 'Borogoves'}))
318
314
  )).to eq(
319
315
  'id' => 1,
@@ -323,7 +319,7 @@ describe Chewy::Fields::Base do
323
319
  end
324
320
 
325
321
  specify do
326
- expect(EventsIndex::Event.root_object.compose(
322
+ expect(EventsIndex::Event.root.compose(
327
323
  double(id: 1, name: 'Jonny', category: [
328
324
  double(id: 2, as_json: {'name' => 'Borogoves1'}),
329
325
  double(id: 3, as_json: {'name' => 'Borogoves2'})
@@ -388,7 +384,7 @@ describe Chewy::Fields::Base do
388
384
  end
389
385
 
390
386
  specify do
391
- expect(CountriesIndex::Country.root_object.compose(country_with_cities)).to eq('id' => 1, 'cities' => [
387
+ expect(CountriesIndex::Country.root.compose(country_with_cities)).to eq('id' => 1, 'cities' => [
392
388
  {'id' => 1, 'name' => 'City1'}, {'id' => 2, 'name' => 'City2'}
393
389
  ])
394
390
  end
@@ -407,7 +403,7 @@ describe Chewy::Fields::Base do
407
403
  end
408
404
 
409
405
  specify do
410
- expect(CitiesIndex::City.root_object.compose(
406
+ expect(CitiesIndex::City.root.compose(
411
407
  City.create!(id: 1, country: Country.create!(id: 1, name: 'Country'))
412
408
  )).to eq('id' => 1, 'country' => {'id' => 1, 'name' => 'Country'})
413
409
  end
@@ -5,7 +5,7 @@ describe Chewy::Fields::Root do
5
5
 
6
6
  describe '#dynamic_template' do
7
7
  specify do
8
- field.dynamic_template 'hello', type: 'string'
8
+ field.dynamic_template 'hello', type: 'keyword'
9
9
  field.dynamic_template 'hello*', :integer
10
10
  field.dynamic_template 'hello.*'
11
11
  field.dynamic_template(/hello/)
@@ -14,7 +14,7 @@ describe Chewy::Fields::Root do
14
14
  field.dynamic_template(/hello\..*/)
15
15
 
16
16
  expect(field.mappings_hash).to eq(product: {dynamic_templates: [
17
- {template_1: {mapping: {type: 'string'}, match: 'hello'}},
17
+ {template_1: {mapping: {type: 'keyword'}, match: 'hello'}},
18
18
  {template_2: {mapping: {}, match_mapping_type: 'integer', match: 'hello*'}},
19
19
  {template_3: {mapping: {}, path_match: 'hello.*'}},
20
20
  {template_4: {mapping: {}, match: 'hello', match_pattern: 'regexp'}},
@@ -32,10 +32,10 @@ describe Chewy::Fields::Root do
32
32
  end
33
33
 
34
34
  specify do
35
- field.dynamic_template 'hello', type: 'string'
35
+ field.dynamic_template 'hello', type: 'keyword'
36
36
  expect(field.mappings_hash).to eq(product: {dynamic_templates: [
37
37
  {template_42: {mapping: {}, match: ''}},
38
- {template_1: {mapping: {type: 'string'}, match: 'hello'}}
38
+ {template_1: {mapping: {type: 'keyword'}, match: 'hello'}}
39
39
  ]})
40
40
  end
41
41
  end
@@ -53,11 +53,11 @@ describe Chewy::Fields::Root do
53
53
  let(:city) { City.new(name: 'London', rating: 100) }
54
54
 
55
55
  specify do
56
- expect(PlacesIndex::City.send(:build_root).compose(city))
56
+ expect(PlacesIndex::City.root.compose(city))
57
57
  .to match(hash_including('name' => 'London', 'rating' => 100))
58
58
  end
59
59
  specify do
60
- expect(PlacesIndex::City.send(:build_root).compose(city, fields: %i[name borogoves]))
60
+ expect(PlacesIndex::City.root.compose(city, fields: %i[name borogoves]))
61
61
  .to eq('name' => 'London')
62
62
  end
63
63
  end
@@ -74,11 +74,11 @@ describe Chewy::Fields::Root do
74
74
  let(:city) { double(name: 'London', rating: 100) }
75
75
 
76
76
  specify do
77
- expect(PlacesIndex::City.send(:build_root).compose(city))
77
+ expect(PlacesIndex::City.root.compose(city))
78
78
  .to eq('name' => 'London', 'rating' => 100)
79
79
  end
80
80
  specify do
81
- expect(PlacesIndex::City.send(:build_root).compose(city, fields: %i[name borogoves]))
81
+ expect(PlacesIndex::City.root.compose(city, fields: %i[name borogoves]))
82
82
  .to eq('name' => 'London')
83
83
  end
84
84
  end
@@ -95,12 +95,12 @@ describe Chewy::Fields::Root do
95
95
  let(:city) { double(name: 'London', rating: 100) }
96
96
 
97
97
  specify do
98
- expect(PlacesIndex::City.send(:build_root).compose(city))
98
+ expect(PlacesIndex::City.root.compose(city))
99
99
  .to eq('name' => 'LondonModified', 'rating' => 101)
100
100
  end
101
101
 
102
102
  specify do
103
- expect(PlacesIndex::City.send(:build_root).compose(city, fields: %i[name borogoves]))
103
+ expect(PlacesIndex::City.root.compose(city, fields: %i[name borogoves]))
104
104
  .to eq('name' => 'LondonModified')
105
105
  end
106
106
  end
@@ -120,12 +120,12 @@ describe Chewy::Fields::Root do
120
120
  let(:city) { double(name: 'London', rating: 100) }
121
121
 
122
122
  specify do
123
- expect(PlacesIndex::City.send(:build_root).compose(city))
123
+ expect(PlacesIndex::City.root.compose(city))
124
124
  .to eq('name' => 'LondonModifiedModified', 'rating' => 101)
125
125
  end
126
126
 
127
127
  specify do
128
- expect(PlacesIndex::City.send(:build_root).compose(city, fields: %i[name borogoves]))
128
+ expect(PlacesIndex::City.root.compose(city, fields: %i[name borogoves]))
129
129
  .to eq('name' => 'LondonModifiedModified')
130
130
  end
131
131
  end
@@ -141,7 +141,7 @@ describe Chewy::Fields::Root do
141
141
  end
142
142
 
143
143
  specify do
144
- expect(PlacesIndex::City.send(:build_root).child_hash).to match(
144
+ expect(PlacesIndex::City.root.child_hash).to match(
145
145
  name: an_instance_of(Chewy::Fields::Base).and(have_attributes(name: :name)),
146
146
  rating: an_instance_of(Chewy::Fields::Base).and(have_attributes(name: :rating))
147
147
  )
@@ -429,6 +429,12 @@ describe Chewy::Index::Actions do
429
429
  expect(CitiesIndex).to receive(:import).with(suffix: suffix, journal: false, refresh: false).and_call_original
430
430
  expect(CitiesIndex.reset!(suffix)).to eq(true)
431
431
  end
432
+
433
+ specify 'uses empty index settings if not defined' do
434
+ allow(Chewy).to receive(:wait_for_status).and_return(nil)
435
+ allow(CitiesIndex).to receive(:settings_hash).and_return({})
436
+ expect(CitiesIndex.reset!(suffix)).to eq(true)
437
+ end
432
438
  end
433
439
  end
434
440
 
@@ -478,7 +484,7 @@ describe Chewy::Index::Actions do
478
484
  end
479
485
  end
480
486
 
481
- context 'applying journal' do
487
+ xcontext 'applying journal' do
482
488
  before do
483
489
  stub_index(:cities) do
484
490
  define_type City do
@@ -494,23 +500,49 @@ describe Chewy::Index::Actions do
494
500
 
495
501
  let(:parallel_update) do
496
502
  Thread.new do
503
+ p 'start parallel'
497
504
  sleep(1.5)
498
505
  cities.first.update(name: 'NewName1', rating: 0)
499
506
  cities.last.update(name: 'NewName3', rating: 0)
500
507
  CitiesIndex::City.import!([cities.first, cities.last], journal: true)
508
+ p 'end parallel'
501
509
  end
502
510
  end
503
511
 
504
512
  specify 'with journal application' do
505
- parallel_update
506
- CitiesIndex.reset!('suffix')
513
+ cities
514
+ p 'cities created1'
515
+ ::ActiveRecord::Base.connection.close if defined?(::ActiveRecord::Base)
516
+ [
517
+ parallel_update,
518
+ Thread.new do
519
+ p 'start reset1'
520
+ CitiesIndex.reset!('suffix')
521
+ p 'end reset1'
522
+ end
523
+ ].map(&:join)
524
+ ::ActiveRecord::Base.connection.reconnect! if defined?(::ActiveRecord::Base)
525
+ p 'expect1'
507
526
  expect(CitiesIndex::City.pluck(:_id, :name)).to contain_exactly(%w[1 NewName1], %w[2 Name2], %w[3 NewName3])
527
+ p 'end expect1'
508
528
  end
509
529
 
510
530
  specify 'without journal application' do
511
- parallel_update
512
- CitiesIndex.reset!('suffix', apply_journal: false)
531
+ cities
532
+ p 'cities created2'
533
+ ::ActiveRecord::Base.connection.close if defined?(::ActiveRecord::Base)
534
+ [
535
+ parallel_update,
536
+ Thread.new do
537
+ p 'start reset2'
538
+ CitiesIndex.reset!('suffix', apply_journal: false)
539
+ p 'end reset2'
540
+ end
541
+ ].map(&:join)
542
+ ::ActiveRecord::Base.connection.reconnect! if defined?(::ActiveRecord::Base)
543
+ p 'expect2'
513
544
  expect(CitiesIndex::City.pluck(:_id, :name)).to contain_exactly(%w[1 Name1], %w[2 Name2], %w[3 Name3])
545
+ p 'end expect2'
514
546
  end
515
547
  end
516
548