elastic-enterprise-search 7.10.0.beta.1 → 7.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ci/jobs/elastic+enterprise-search-ruby+7.10.0.beta.1.yml +12 -0
- data/.ci/test-matrix.yml +2 -1
- data/.github/workflows/testing.yml +1 -1
- data/.gitignore +1 -0
- data/CONTRIBUTING.md +43 -0
- data/Gemfile +1 -0
- data/README.md +7 -225
- data/Rakefile +1 -24
- data/docs/guide/app-search-api.asciidoc +172 -0
- data/docs/guide/connecting.asciidoc +125 -0
- data/docs/guide/development.asciidoc +42 -0
- data/docs/guide/enterprise-search-api.asciidoc +46 -0
- data/docs/guide/index.asciidoc +17 -0
- data/docs/guide/installation.asciidoc +18 -0
- data/docs/guide/overview.asciidoc +59 -0
- data/docs/guide/workplace-search-api.asciidoc +121 -0
- data/elastic-enterprise-search.gemspec +5 -4
- data/lib/elastic/app-search/api/add_meta_engine_source.rb +7 -4
- data/lib/elastic/app-search/api/api_logs.rb +15 -16
- data/lib/elastic/app-search/api/count_analytics.rb +7 -5
- data/lib/elastic/app-search/api/create_curation.rb +8 -6
- data/lib/elastic/app-search/api/create_engine.rb +9 -7
- data/lib/elastic/app-search/api/create_synonym_set.rb +6 -5
- data/lib/elastic/app-search/api/curation.rb +6 -5
- data/lib/elastic/app-search/api/delete_curation.rb +6 -5
- data/lib/elastic/app-search/api/delete_documents.rb +7 -4
- data/lib/elastic/app-search/api/delete_engine.rb +5 -3
- data/lib/elastic/app-search/api/delete_meta_engine_source.rb +7 -4
- data/lib/elastic/app-search/api/delete_synonym_set.rb +6 -5
- data/lib/elastic/app-search/api/documents.rb +7 -4
- data/lib/elastic/app-search/api/engine.rb +5 -3
- data/lib/elastic/app-search/api/index_documents.rb +7 -4
- data/lib/elastic/app-search/api/list_curations.rb +7 -5
- data/lib/elastic/app-search/api/list_documents.rb +7 -5
- data/lib/elastic/app-search/api/list_engines.rb +7 -5
- data/lib/elastic/app-search/api/list_synonym_sets.rb +7 -5
- data/lib/elastic/app-search/api/log_clickthrough.rb +10 -7
- data/lib/elastic/app-search/api/multi_search.rb +8 -7
- data/lib/elastic/app-search/api/put_curation.rb +9 -8
- data/lib/elastic/app-search/api/put_documents.rb +7 -4
- data/lib/elastic/app-search/api/put_schema.rb +7 -4
- data/lib/elastic/app-search/api/put_search_settings.rb +6 -3
- data/lib/elastic/app-search/api/put_synonym_set.rb +7 -7
- data/lib/elastic/app-search/api/query_suggestion.rb +8 -6
- data/lib/elastic/app-search/api/reset_search_settings.rb +5 -3
- data/lib/elastic/app-search/api/schema.rb +6 -4
- data/lib/elastic/app-search/api/search.rb +5 -3
- data/lib/elastic/app-search/api/search_settings.rb +6 -4
- data/lib/elastic/app-search/api/synonym_set.rb +6 -5
- data/lib/elastic/app-search/api/top_clicks_analytics.rb +9 -7
- data/lib/elastic/app-search/api/top_queries_analytics.rb +8 -6
- data/lib/elastic/app-search/app_search.rb +19 -2
- data/lib/elastic/enterprise-search/api/health.rb +6 -1
- data/lib/elastic/enterprise-search/api/put_read_only.rb +5 -1
- data/lib/elastic/enterprise-search/api/read_only.rb +6 -1
- data/lib/elastic/enterprise-search/api/stats.rb +6 -2
- data/lib/elastic/enterprise-search/api/version.rb +6 -1
- data/lib/elastic/enterprise-search/client.rb +15 -2
- data/lib/elastic/enterprise-search/request.rb +25 -13
- data/lib/elastic/enterprise-search/utils.rb +5 -6
- data/lib/elastic/enterprise-search/version.rb +1 -1
- data/lib/elastic/enterprise_search.rb +1 -1
- data/lib/elastic/workplace-search/api/add_user_permissions.rb +10 -9
- data/lib/elastic/workplace-search/api/create_analytics_event.rb +59 -0
- data/lib/elastic/workplace-search/api/create_external_identity.rb +9 -7
- data/lib/elastic/workplace-search/api/delete_documents.rb +9 -7
- data/lib/elastic/workplace-search/api/delete_external_identity.rb +10 -6
- data/lib/elastic/workplace-search/api/external_identity.rb +10 -6
- data/lib/elastic/workplace-search/api/index_documents.rb +11 -8
- data/lib/elastic/workplace-search/api/list_external_identities.rb +11 -7
- data/lib/elastic/workplace-search/api/list_permissions.rb +11 -7
- data/lib/elastic/workplace-search/api/put_external_identity.rb +10 -9
- data/lib/elastic/workplace-search/api/put_user_permissions.rb +10 -9
- data/lib/elastic/workplace-search/api/remove_user_permissions.rb +10 -9
- data/lib/elastic/workplace-search/api/search.rb +19 -1
- data/lib/elastic/workplace-search/api/user_permissions.rb +10 -6
- data/lib/elastic/workplace-search/workplace_search.rb +26 -1
- data/spec/app-search/api_curations_spec.rb +97 -0
- data/spec/app-search/api_documents_spec.rb +20 -6
- data/spec/app-search/api_engines_spec.rb +4 -4
- data/{lib/generator/templates/_license.erb → spec/app-search/api_log_clickthrough_spec.rb} +18 -0
- data/spec/app-search/api_meta_engines_spec.rb +72 -0
- data/spec/app-search/api_query_suggestion_spec.rb +39 -0
- data/spec/app-search/api_schema_spec.rb +17 -3
- data/spec/app-search/api_search_settings_spec.rb +76 -0
- data/spec/app-search/api_synonyms_spec.rb +79 -0
- data/spec/app-search/client_spec.rb +20 -0
- data/spec/enterprise-search/client_spec.rb +11 -0
- data/spec/enterprise-search/request_spec.rb +22 -0
- data/spec/enterprise-search/utils_spec.rb +46 -0
- data/spec/fixtures/vcr/app_search/add_meta_engine_source.yml +109 -0
- data/spec/fixtures/vcr/app_search/api_documents.yml +56 -0
- data/spec/fixtures/vcr/app_search/{index_documents.yml → api_index_documents.yml} +11 -10
- data/spec/fixtures/vcr/app_search/api_log_clickthrough.yml +54 -0
- data/spec/fixtures/vcr/app_search/api_put_schema.yml +109 -0
- data/spec/fixtures/vcr/app_search/api_put_search_settings.yml +56 -0
- data/spec/fixtures/vcr/app_search/api_query_suggestion.yml +59 -0
- data/spec/fixtures/vcr/app_search/api_reset_search_settings.yml +56 -0
- data/spec/fixtures/vcr/app_search/{schema.yml → api_schema.yml} +12 -11
- data/spec/fixtures/vcr/app_search/api_search_settings.yml +56 -0
- data/spec/fixtures/vcr/app_search/create_curation.yml +113 -0
- data/spec/fixtures/vcr/{create_engine.yml → app_search/create_engine.yml} +0 -0
- data/spec/fixtures/vcr/app_search/create_meta_engine.yml +56 -0
- data/spec/fixtures/vcr/app_search/create_synonym_set.yml +56 -0
- data/spec/fixtures/vcr/app_search/delete_curation.yml +56 -0
- data/spec/fixtures/vcr/{delete_engine.yml → app_search/delete_engine.yml} +0 -0
- data/spec/fixtures/vcr/app_search/delete_meta_engine_source.yml +56 -0
- data/spec/fixtures/vcr/app_search/delete_synonym_set.yml +56 -0
- data/spec/fixtures/vcr/app_search/get_curation.yml +56 -0
- data/spec/fixtures/vcr/{get_engine.yml → app_search/get_engine.yml} +0 -0
- data/spec/fixtures/vcr/app_search/list_curations.yml +56 -0
- data/spec/fixtures/vcr/{list_engines.yml → app_search/list_engines.yml} +0 -0
- data/spec/fixtures/vcr/app_search/list_synonym_sets.yml +56 -0
- data/spec/fixtures/vcr/app_search/multi_query_search.yml +2 -2
- data/spec/fixtures/vcr/app_search/put_curation.yml +113 -0
- data/spec/fixtures/vcr/app_search/put_synonym_set.yml +56 -0
- data/spec/fixtures/vcr/app_search/synonym_set.yml +56 -0
- data/spec/fixtures/vcr/{add_user_permissions.yml → workplace_search/add_user_permissions.yml} +11 -9
- data/spec/fixtures/vcr/{clear_user_permissions.yml → workplace_search/clear_user_permissions.yml} +11 -9
- data/spec/fixtures/vcr/workplace_search/create_analytics_event.yml +55 -0
- data/spec/fixtures/vcr/workplace_search/create_external_identity.yml +53 -0
- data/spec/fixtures/vcr/{delete_documents.yml → workplace_search/delete_documents.yml} +11 -9
- data/spec/fixtures/vcr/workplace_search/delete_external_identity.yml +53 -0
- data/spec/fixtures/vcr/{index_documents.yml → workplace_search/index_documents.yml} +11 -9
- data/spec/fixtures/vcr/workplace_search/list_external_identities.yml +53 -0
- data/spec/fixtures/vcr/{list_permissions.yml → workplace_search/list_permissions.yml} +11 -9
- data/spec/fixtures/vcr/workplace_search/oauth_request_token.yml +57 -0
- data/spec/fixtures/vcr/workplace_search/put_external_identity.yml +53 -0
- data/spec/fixtures/vcr/{put_user_permissions.yml → workplace_search/put_user_permissions.yml} +22 -18
- data/spec/fixtures/vcr/{remove_user_permissions.yml → workplace_search/remove_user_permissions.yml} +11 -9
- data/spec/fixtures/vcr/workplace_search/retrieve_external_identity.yml +53 -0
- data/spec/fixtures/vcr/workplace_search/search_request.yml +60 -0
- data/spec/fixtures/vcr/{user_permissions_empty.yml → workplace_search/user_permissions_empty.yml} +11 -9
- data/spec/integration/enterprise_search_api_spec.rb +2 -2
- data/spec/spec_helper.rb +2 -0
- data/spec/workplace-search/client_spec.rb +10 -2
- data/spec/workplace-search/create_analytics_event_spec.rb +59 -0
- data/spec/workplace-search/documents_spec.rb +80 -0
- data/spec/workplace-search/external_identities_spec.rb +84 -0
- data/spec/workplace-search/{api_spec.rb → permissions_spec.rb} +14 -66
- data/spec/workplace-search/search_spec.rb +53 -0
- metadata +96 -36
- data/lib/generator/documentation_helper.rb +0 -94
- data/lib/generator/endpoint_generator.rb +0 -119
- data/lib/generator/parameters_exceptions.rb +0 -40
- data/lib/generator/parameters_helper.rb +0 -144
- data/lib/generator/templates/endpoint_template.erb +0 -29
- data/lib/generator/templates/spec_template.erb +0 -1
- data/lib/generator/utils.rb +0 -70
- data/spec/fixtures/vcr/create_document.yml +0 -54
@@ -22,12 +22,26 @@ require_relative './api_spec_helper'
|
|
22
22
|
|
23
23
|
describe Elastic::EnterpriseSearch::AppSearch::Client do
|
24
24
|
context 'schema' do
|
25
|
+
let(:engine_name) { 'films' }
|
26
|
+
|
25
27
|
it 'returns an engine schema' do
|
26
|
-
VCR.use_cassette('app_search/
|
27
|
-
response = @client.schema(
|
28
|
+
VCR.use_cassette('app_search/api_schema') do
|
29
|
+
response = @client.schema(engine_name)
|
28
30
|
|
29
31
|
expect(response.status).to eq 200
|
30
|
-
expect(response.body).to eq({ '
|
32
|
+
expect(response.body).to eq({ 'title' => 'text', 'year' => 'number', 'director' => 'text' })
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'updates a schema for an engine' do
|
37
|
+
VCR.use_cassette('app_search/api_put_schema') do
|
38
|
+
response = @client.put_schema(engine_name, schema: { year: 'text' })
|
39
|
+
|
40
|
+
expect(response.status).to eq 200
|
41
|
+
expect(response.body).to eq({ 'title' => 'text', 'year' => 'text', 'director' => 'text' })
|
42
|
+
|
43
|
+
response = @client.schema(engine_name)
|
44
|
+
expect(response.body).to eq({ 'title' => 'text', 'year' => 'text', 'director' => 'text' })
|
31
45
|
end
|
32
46
|
end
|
33
47
|
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
3
|
+
# this work for additional information regarding copyright
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
6
|
+
# not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
|
18
|
+
# frozen_string_literal: true
|
19
|
+
|
20
|
+
require_relative './api_spec_helper'
|
21
|
+
|
22
|
+
describe Elastic::EnterpriseSearch::AppSearch::Client do
|
23
|
+
context 'search settings' do
|
24
|
+
let(:engine_name) { 'films' }
|
25
|
+
|
26
|
+
it 'returns engine search settings' do
|
27
|
+
VCR.use_cassette('app_search/api_search_settings') do
|
28
|
+
response = @client.search_settings(engine_name)
|
29
|
+
|
30
|
+
expect(response.status).to eq 200
|
31
|
+
expect(response.body['search_fields'])
|
32
|
+
expect(response.body['result_fields'])
|
33
|
+
expect(response.body['boosts'])
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'updates search settings' do
|
38
|
+
VCR.use_cassette('app_search/api_put_search_settings') do
|
39
|
+
body = {
|
40
|
+
boosts: {
|
41
|
+
year: [
|
42
|
+
{
|
43
|
+
type: 'proximity',
|
44
|
+
function: 'linear',
|
45
|
+
center: 1950,
|
46
|
+
factor: 9
|
47
|
+
}
|
48
|
+
]
|
49
|
+
}
|
50
|
+
}
|
51
|
+
response = @client.put_search_settings(engine_name, body: body)
|
52
|
+
|
53
|
+
expect(response.status).to eq 200
|
54
|
+
expect(response.body['boosts']).to eq(
|
55
|
+
{
|
56
|
+
'year' => [
|
57
|
+
{ 'type' => 'proximity',
|
58
|
+
'function' => 'linear',
|
59
|
+
'center' => 1950,
|
60
|
+
'factor' => 9 }
|
61
|
+
]
|
62
|
+
}
|
63
|
+
)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'resets search settings' do
|
68
|
+
VCR.use_cassette('app_search/api_reset_search_settings') do
|
69
|
+
response = @client.reset_search_settings(engine_name)
|
70
|
+
|
71
|
+
expect(response.body['boosts']).to eq({})
|
72
|
+
expect(response.status).to eq 200
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
3
|
+
# this work for additional information regarding copyright
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
6
|
+
# not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
|
18
|
+
# frozen_string_literal: true
|
19
|
+
|
20
|
+
require 'spec_helper'
|
21
|
+
require_relative './api_spec_helper'
|
22
|
+
|
23
|
+
describe Elastic::EnterpriseSearch::AppSearch::Client do
|
24
|
+
context 'synonyms' do
|
25
|
+
let(:engine_name) { 'videogames' }
|
26
|
+
let(:id) { 'id' }
|
27
|
+
|
28
|
+
it 'creates a synonym set' do
|
29
|
+
VCR.use_cassette('app_search/create_synonym_set') do
|
30
|
+
response = @client.create_synonym_set(engine_name, body: { synonyms: ['joypad', 'gamepad'] })
|
31
|
+
|
32
|
+
expect(response.status).to eq 200
|
33
|
+
expect(response.body['synonyms'].sort).to eq ['gamepad', 'joypad']
|
34
|
+
expect(response.body['id'])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'lists synonym sets' do
|
39
|
+
VCR.use_cassette('app_search/list_synonym_sets') do
|
40
|
+
response = @client.list_synonym_sets(engine_name)
|
41
|
+
|
42
|
+
expect(response.status).to eq 200
|
43
|
+
expect(response.body['results'].count).to be > 0
|
44
|
+
expect(response.body['results'].first['synonyms'].sort).to eq ['gamepad', 'joypad']
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'retrieves a synonym set by ID' do
|
49
|
+
VCR.use_cassette('app_search/synonym_set') do
|
50
|
+
response = @client.synonym_set(engine_name, synonym_set_id: id)
|
51
|
+
|
52
|
+
expect(response.status).to eq 200
|
53
|
+
expect(response.body).to eq({ 'id' => id, 'synonyms' => ['joypad', 'gamepad'] })
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'updates a synonym set' do
|
58
|
+
VCR.use_cassette('app_search/put_synonym_set') do
|
59
|
+
response = @client.put_synonym_set(
|
60
|
+
engine_name,
|
61
|
+
synonym_set_id: id,
|
62
|
+
body: { synonyms: ['gamepad', 'controller'] }
|
63
|
+
)
|
64
|
+
|
65
|
+
expect(response.status).to eq 200
|
66
|
+
expect(response.body).to eq({ 'id' => id, 'synonyms' => ['gamepad', 'controller'] })
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'deletes a synonym set' do
|
71
|
+
VCR.use_cassette('app_search/delete_synonym_set') do
|
72
|
+
response = @client.delete_synonym_set(engine_name, synonym_set_id: id)
|
73
|
+
|
74
|
+
expect(response.status).to eq 200
|
75
|
+
expect(response.body).to eq({ 'deleted' => true })
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -65,4 +65,24 @@ describe Elastic::EnterpriseSearch::AppSearch::Client do
|
|
65
65
|
expect(app_client.http_auth).to eq api_key
|
66
66
|
end
|
67
67
|
end
|
68
|
+
|
69
|
+
describe '#create_signed_search_key' do
|
70
|
+
let(:key) { 'private-key-value' }
|
71
|
+
let(:api_key_name) { 'private-key' }
|
72
|
+
let(:enforced_options) { { query: 'cat' } }
|
73
|
+
|
74
|
+
subject do
|
75
|
+
Elastic::EnterpriseSearch::AppSearch::Client.create_signed_search_key(
|
76
|
+
key,
|
77
|
+
api_key_name,
|
78
|
+
enforced_options
|
79
|
+
)
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'should build a valid jwt' do
|
83
|
+
decoded_token = JWT.decode(subject, key, true, algorithm: 'HS256')
|
84
|
+
expect(decoded_token[0]['api_key_name']).to(eq(api_key_name))
|
85
|
+
expect(decoded_token[0]['query']).to(eq('cat'))
|
86
|
+
end
|
87
|
+
end
|
68
88
|
end
|
@@ -93,4 +93,15 @@ describe Elastic::EnterpriseSearch::Client do
|
|
93
93
|
expect(client.workplace_search.host).to eq host
|
94
94
|
end
|
95
95
|
end
|
96
|
+
|
97
|
+
context 'meta-header' do
|
98
|
+
let(:transport) { Elastic::EnterpriseSearch::Client.new.instance_variable_get('@transport') }
|
99
|
+
let(:subject) { transport.transport.connections.first.connection.headers }
|
100
|
+
let(:regexp) { /^[a-z]{1,}=[a-z0-9.\-]{1,}(?:,[a-z]{1,}=[a-z0-9._-]+)*$/ }
|
101
|
+
|
102
|
+
it 'sends the correct meta header to transport' do
|
103
|
+
expect(subject['x-elastic-client-meta']).to match(regexp)
|
104
|
+
expect(subject['x-elastic-client-meta']).to match(/^ent=[0-9]+\.[0-9]+\.[0-9]+(p)?,/)
|
105
|
+
end
|
106
|
+
end
|
96
107
|
end
|
@@ -90,6 +90,28 @@ describe Elastic::EnterpriseSearch::Client do
|
|
90
90
|
expect(client.put('test', {}, { 'params' => 'test' }).status).to eq(200)
|
91
91
|
end
|
92
92
|
end
|
93
|
+
|
94
|
+
context 'with custom headers' do
|
95
|
+
let(:custom_header) { { 'x-custom-header' => 'Custom Header Value' } }
|
96
|
+
|
97
|
+
it 'builds the right request' do
|
98
|
+
stub_request(:get, "#{host}/test")
|
99
|
+
.with(body: { 'params' => 'test' })
|
100
|
+
.with(headers: headers.merge(custom_header))
|
101
|
+
.to_return(stub_response)
|
102
|
+
|
103
|
+
expect(client.request(:get, 'test', {}, { 'params' => 'test' }, custom_header).status).to eq(200)
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'builds the right request for put' do
|
107
|
+
stub_request(:put, "#{host}/test")
|
108
|
+
.with(body: { 'params' => 'test' })
|
109
|
+
.with(headers: headers.merge(custom_header))
|
110
|
+
.to_return(stub_response)
|
111
|
+
|
112
|
+
expect(client.put('test', {}, { 'params' => 'test' }, custom_header).status).to eq(200)
|
113
|
+
end
|
114
|
+
end
|
93
115
|
end
|
94
116
|
|
95
117
|
context 'with ssl' do
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# Licensed to Elasticsearch B.V. under one or more contributor
|
2
|
+
# license agreements. See the NOTICE file distributed with
|
3
|
+
# this work for additional information regarding copyright
|
4
|
+
# ownership. Elasticsearch B.V. licenses this file to you under
|
5
|
+
# the Apache License, Version 2.0 (the "License"); you may
|
6
|
+
# not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing,
|
12
|
+
# software distributed under the License is distributed on an
|
13
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
14
|
+
# KIND, either express or implied. See the License for the
|
15
|
+
# specific language governing permissions and limitations
|
16
|
+
# under the License.
|
17
|
+
|
18
|
+
# frozen_string_literal: true
|
19
|
+
|
20
|
+
require 'spec_helper'
|
21
|
+
require_relative './../webmock_requires'
|
22
|
+
|
23
|
+
describe Elastic::EnterpriseSearch::Utils do
|
24
|
+
let(:subject) { Class.new { extend Elastic::EnterpriseSearch::Utils } }
|
25
|
+
let(:symbolized_hash) do
|
26
|
+
{ title: 'This is the title',
|
27
|
+
|
28
|
+
year: 1985,
|
29
|
+
description: 'A generic description' }
|
30
|
+
end
|
31
|
+
let(:stringified_hash) do
|
32
|
+
{
|
33
|
+
'title' => 'This is the title',
|
34
|
+
'year' => 1985,
|
35
|
+
'description' => 'A generic description'
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'stringifies keys in a hash' do
|
40
|
+
expect(subject.stringify_keys(symbolized_hash)).to eq stringified_hash
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'symbolizes keys in a hash' do
|
44
|
+
expect(described_class.symbolize_keys(stringified_hash)).to eq symbolized_hash
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: http://localhost:3002/api/as/v1/engines/?name=comicbooks
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: "{}"
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- 'elastic-enteprise-search-ruby/7.11.0.pre (RUBY_VERSION: 2.7.2; linux x86_64;
|
12
|
+
elasticsearch-transport: 7.10.1)'
|
13
|
+
Content-Type:
|
14
|
+
- application/json
|
15
|
+
Authorization:
|
16
|
+
- Bearer api_key
|
17
|
+
Accept-Encoding:
|
18
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
19
|
+
Accept:
|
20
|
+
- "*/*"
|
21
|
+
response:
|
22
|
+
status:
|
23
|
+
code: 200
|
24
|
+
message: OK
|
25
|
+
headers:
|
26
|
+
X-Frame-Options:
|
27
|
+
- SAMEORIGIN
|
28
|
+
X-Xss-Protection:
|
29
|
+
- 1; mode=block
|
30
|
+
X-Content-Type-Options:
|
31
|
+
- nosniff
|
32
|
+
X-App-Search-Version:
|
33
|
+
- 7.12.0
|
34
|
+
Content-Type:
|
35
|
+
- application/json;charset=utf-8
|
36
|
+
Vary:
|
37
|
+
- Accept-Encoding, User-Agent
|
38
|
+
- Origin
|
39
|
+
Etag:
|
40
|
+
- W/"aac451759143f353e9b928edc402526a--gzip"
|
41
|
+
Cache-Control:
|
42
|
+
- max-age=0, private, must-revalidate
|
43
|
+
X-Request-Id:
|
44
|
+
- 57603887-9e92-4392-abfc-a72c86079c36
|
45
|
+
X-Runtime:
|
46
|
+
- '0.627512'
|
47
|
+
Transfer-Encoding:
|
48
|
+
- chunked
|
49
|
+
Server:
|
50
|
+
- Jetty(9.4.33.v20201020)
|
51
|
+
body:
|
52
|
+
encoding: ASCII-8BIT
|
53
|
+
string: '{"name":"comicbooks","type":"default","language":null,"document_count":0}'
|
54
|
+
http_version:
|
55
|
+
recorded_at: Fri, 15 Jan 2021 16:30:41 GMT
|
56
|
+
- request:
|
57
|
+
method: post
|
58
|
+
uri: http://localhost:3002/api/as/v1/engines/new-meta-engine/source_engines/
|
59
|
+
body:
|
60
|
+
encoding: UTF-8
|
61
|
+
string: '["comicbooks"]'
|
62
|
+
headers:
|
63
|
+
User-Agent:
|
64
|
+
- 'elastic-enteprise-search-ruby/7.11.0.pre (RUBY_VERSION: 2.7.2; linux x86_64;
|
65
|
+
elasticsearch-transport: 7.10.1)'
|
66
|
+
Content-Type:
|
67
|
+
- application/json
|
68
|
+
Authorization:
|
69
|
+
- Bearer api_key
|
70
|
+
Accept-Encoding:
|
71
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
72
|
+
Accept:
|
73
|
+
- "*/*"
|
74
|
+
response:
|
75
|
+
status:
|
76
|
+
code: 200
|
77
|
+
message: OK
|
78
|
+
headers:
|
79
|
+
X-Frame-Options:
|
80
|
+
- SAMEORIGIN
|
81
|
+
X-Xss-Protection:
|
82
|
+
- 1; mode=block
|
83
|
+
X-Content-Type-Options:
|
84
|
+
- nosniff
|
85
|
+
X-App-Search-Version:
|
86
|
+
- 7.12.0
|
87
|
+
Content-Type:
|
88
|
+
- application/json;charset=utf-8
|
89
|
+
Vary:
|
90
|
+
- Accept-Encoding, User-Agent
|
91
|
+
- Origin
|
92
|
+
Etag:
|
93
|
+
- W/"50161cac2a450348c6cba677e3abbdfe--gzip"
|
94
|
+
Cache-Control:
|
95
|
+
- max-age=0, private, must-revalidate
|
96
|
+
X-Request-Id:
|
97
|
+
- e56d499d-a1e9-4b7b-a707-e7432c7fc48a
|
98
|
+
X-Runtime:
|
99
|
+
- '0.079150'
|
100
|
+
Transfer-Encoding:
|
101
|
+
- chunked
|
102
|
+
Server:
|
103
|
+
- Jetty(9.4.33.v20201020)
|
104
|
+
body:
|
105
|
+
encoding: ASCII-8BIT
|
106
|
+
string: '{"name":"new-meta-engine","type":"meta","source_engines":["videogames","books","comicbooks"],"document_count":15}'
|
107
|
+
http_version:
|
108
|
+
recorded_at: Fri, 15 Jan 2021 16:30:41 GMT
|
109
|
+
recorded_with: VCR 3.0.3
|
@@ -0,0 +1,56 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://localhost:3002/api/as/v1/engines/videogames/documents/
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: "['doc-6005c044ad7f0c8b464b8cc4', 'doc-6005c044ad7f0c8b464b8cc3']"
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- 'elastic-enteprise-search-ruby/7.11.0.pre (RUBY_VERSION: 2.7.2; linux x86_64;
|
12
|
+
elasticsearch-transport: 7.10.1)'
|
13
|
+
Content-Type:
|
14
|
+
- application/json
|
15
|
+
Authorization:
|
16
|
+
- Bearer api_key
|
17
|
+
Accept-Encoding:
|
18
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
19
|
+
Accept:
|
20
|
+
- "*/*"
|
21
|
+
response:
|
22
|
+
status:
|
23
|
+
code: 200
|
24
|
+
message: OK
|
25
|
+
headers:
|
26
|
+
X-Frame-Options:
|
27
|
+
- SAMEORIGIN
|
28
|
+
X-Xss-Protection:
|
29
|
+
- 1; mode=block
|
30
|
+
X-Content-Type-Options:
|
31
|
+
- nosniff
|
32
|
+
X-App-Search-Version:
|
33
|
+
- 7.12.0
|
34
|
+
Content-Type:
|
35
|
+
- application/json;charset=utf-8
|
36
|
+
Vary:
|
37
|
+
- Accept-Encoding, User-Agent
|
38
|
+
- Origin
|
39
|
+
Etag:
|
40
|
+
- W/"bec634096368170891453a3d92df309a--gzip"
|
41
|
+
Cache-Control:
|
42
|
+
- max-age=0, private, must-revalidate
|
43
|
+
X-Request-Id:
|
44
|
+
- bb90179c-bf2e-4b54-b9dc-0aacfc0715ac
|
45
|
+
X-Runtime:
|
46
|
+
- '0.080462'
|
47
|
+
Transfer-Encoding:
|
48
|
+
- chunked
|
49
|
+
Server:
|
50
|
+
- Jetty(9.4.33.v20201020)
|
51
|
+
body:
|
52
|
+
encoding: ASCII-8BIT
|
53
|
+
string: '[{"name":"Galaxxian","year":"1979","id":"doc-6005c044ad7f0c8b464b8cc4"},{"name":"Pack-Man","year":"1980","id":"doc-6005c044ad7f0c8b464b8cc3"}]'
|
54
|
+
http_version:
|
55
|
+
recorded_at: Mon, 18 Jan 2021 17:10:03 GMT
|
56
|
+
recorded_with: VCR 3.0.3
|