elastic-enterprise-search 0.2.1 → 7.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. checksums.yaml +4 -4
  2. data/.ci/.gitignore +1 -0
  3. data/.ci/Dockerfile +12 -0
  4. data/.ci/certs/README.md +50 -0
  5. data/.ci/certs/ca.crt +20 -0
  6. data/.ci/certs/ca.key +27 -0
  7. data/.ci/certs/testnode.crt +21 -0
  8. data/.ci/certs/testnode.key +27 -0
  9. data/.ci/certs/testnode_no_san.crt +19 -0
  10. data/.ci/certs/testnode_no_san.key +27 -0
  11. data/.ci/functions/cleanup.sh +67 -0
  12. data/.ci/functions/imports.sh +59 -0
  13. data/.ci/functions/wait-for-container.sh +36 -0
  14. data/.ci/jobs/defaults.yml +69 -0
  15. data/.ci/jobs/elastic+enterprise-search-ruby+7.11.yml +12 -0
  16. data/.ci/jobs/elastic+enterprise-search-ruby+master.yml +12 -0
  17. data/.ci/jobs/elastic+enterprise-search-ruby+pull-request.yml +19 -0
  18. data/.ci/run-elasticsearch.sh +127 -0
  19. data/.ci/run-enterprise-search.sh +71 -0
  20. data/.ci/run-local.sh +14 -0
  21. data/.ci/run-repository.sh +47 -0
  22. data/.ci/run-tests +27 -0
  23. data/.ci/test-matrix.yml +14 -0
  24. data/.github/workflows/rubocop.yml +15 -0
  25. data/.github/workflows/testing.yml +40 -0
  26. data/.gitignore +4 -0
  27. data/.rubocop.yml +52 -0
  28. data/CONTRIBUTING.md +43 -0
  29. data/Gemfile +23 -1
  30. data/{LICENSE.txt → LICENSE} +33 -32
  31. data/README.md +29 -93
  32. data/Rakefile +48 -1
  33. data/docs/guide/app-search-api.asciidoc +186 -0
  34. data/docs/guide/connecting.asciidoc +125 -0
  35. data/docs/guide/development.asciidoc +42 -0
  36. data/docs/guide/enterprise-search-api.asciidoc +46 -0
  37. data/docs/guide/index.asciidoc +19 -0
  38. data/docs/guide/installation.asciidoc +18 -0
  39. data/docs/guide/overview.asciidoc +59 -0
  40. data/docs/guide/release_notes/710.asciidoc +4 -0
  41. data/docs/guide/release_notes/711.asciidoc +27 -0
  42. data/docs/guide/release_notes/712.asciidoc +26 -0
  43. data/docs/guide/release_notes/index.asciidoc +14 -0
  44. data/docs/guide/workplace-search-api.asciidoc +121 -0
  45. data/elastic-enterprise-search.gemspec +49 -12
  46. data/lib/elastic-enterprise-search.rb +20 -1
  47. data/lib/elastic/.rubocop.yml +6 -0
  48. data/lib/elastic/app-search/api/add_meta_engine_source.rb +51 -0
  49. data/lib/elastic/app-search/api/api_logs.rb +62 -0
  50. data/lib/elastic/app-search/api/count_analytics.rb +52 -0
  51. data/lib/elastic/app-search/api/create_curation.rb +54 -0
  52. data/lib/elastic/app-search/api/create_engine.rb +53 -0
  53. data/lib/elastic/app-search/api/create_synonym_set.rb +51 -0
  54. data/lib/elastic/app-search/api/curation.rb +53 -0
  55. data/lib/elastic/app-search/api/delete_curation.rb +53 -0
  56. data/lib/elastic/app-search/api/delete_documents.rb +51 -0
  57. data/lib/elastic/app-search/api/delete_engine.rb +50 -0
  58. data/lib/elastic/app-search/api/delete_meta_engine_source.rb +51 -0
  59. data/lib/elastic/app-search/api/delete_synonym_set.rb +53 -0
  60. data/lib/elastic/app-search/api/documents.rb +51 -0
  61. data/lib/elastic/app-search/api/engine.rb +50 -0
  62. data/lib/elastic/app-search/api/index_documents.rb +51 -0
  63. data/lib/elastic/app-search/api/list_curations.rb +52 -0
  64. data/lib/elastic/app-search/api/list_documents.rb +52 -0
  65. data/lib/elastic/app-search/api/list_engines.rb +49 -0
  66. data/lib/elastic/app-search/api/list_synonym_sets.rb +52 -0
  67. data/lib/elastic/app-search/api/log_clickthrough.rb +57 -0
  68. data/lib/elastic/app-search/api/multi_search.rb +51 -0
  69. data/lib/elastic/app-search/api/put_curation.rb +57 -0
  70. data/lib/elastic/app-search/api/put_documents.rb +51 -0
  71. data/lib/elastic/app-search/api/put_schema.rb +51 -0
  72. data/lib/elastic/app-search/api/put_search_settings.rb +51 -0
  73. data/lib/elastic/app-search/api/put_synonym_set.rb +54 -0
  74. data/lib/elastic/app-search/api/query_suggestion.rb +54 -0
  75. data/lib/elastic/app-search/api/reset_search_settings.rb +50 -0
  76. data/lib/elastic/app-search/api/schema.rb +50 -0
  77. data/lib/elastic/app-search/api/search.rb +50 -0
  78. data/lib/elastic/app-search/api/search_settings.rb +50 -0
  79. data/lib/elastic/app-search/api/synonym_set.rb +53 -0
  80. data/lib/elastic/app-search/api/top_clicks_analytics.rb +54 -0
  81. data/lib/elastic/app-search/api/top_queries_analytics.rb +53 -0
  82. data/lib/elastic/app-search/app_search.rb +82 -0
  83. data/lib/elastic/enterprise-search/api/health.rb +43 -0
  84. data/lib/elastic/enterprise-search/api/put_read_only.rb +44 -0
  85. data/lib/elastic/enterprise-search/api/read_only.rb +43 -0
  86. data/lib/elastic/enterprise-search/api/stats.rb +45 -0
  87. data/lib/elastic/enterprise-search/api/version.rb +43 -0
  88. data/lib/elastic/enterprise-search/client.rb +90 -52
  89. data/lib/elastic/enterprise-search/configuration.rb +32 -16
  90. data/lib/elastic/enterprise-search/exceptions.rb +19 -0
  91. data/lib/elastic/enterprise-search/request.rb +59 -81
  92. data/lib/elastic/enterprise-search/utils.rb +28 -1
  93. data/lib/elastic/enterprise-search/version.rb +20 -1
  94. data/lib/elastic/enterprise_search.rb +38 -0
  95. data/lib/elastic/workplace-search/api/add_user_permissions.rb +54 -0
  96. data/lib/elastic/workplace-search/api/create_analytics_event.rb +59 -0
  97. data/lib/elastic/workplace-search/api/create_external_identity.rb +51 -0
  98. data/lib/elastic/workplace-search/api/delete_documents.rb +51 -0
  99. data/lib/elastic/workplace-search/api/delete_external_identity.rb +53 -0
  100. data/lib/elastic/workplace-search/api/external_identity.rb +53 -0
  101. data/lib/elastic/workplace-search/api/index_documents.rb +52 -0
  102. data/lib/elastic/workplace-search/api/list_external_identities.rb +51 -0
  103. data/lib/elastic/workplace-search/api/list_permissions.rb +51 -0
  104. data/lib/elastic/workplace-search/api/put_external_identity.rb +54 -0
  105. data/lib/elastic/workplace-search/api/put_user_permissions.rb +54 -0
  106. data/lib/elastic/workplace-search/api/remove_user_permissions.rb +54 -0
  107. data/lib/elastic/workplace-search/api/search.rb +60 -0
  108. data/lib/elastic/workplace-search/api/user_permissions.rb +53 -0
  109. data/lib/elastic/workplace-search/workplace_search.rb +84 -0
  110. data/spec/app-search/api_count_analytics_spec.rb +34 -0
  111. data/spec/app-search/api_curations_spec.rb +97 -0
  112. data/spec/app-search/api_documents_spec.rb +102 -0
  113. data/spec/app-search/api_engines_spec.rb +67 -0
  114. data/spec/app-search/api_log_clickthrough_spec.rb +34 -0
  115. data/spec/app-search/api_logs_spec.rb +36 -0
  116. data/spec/app-search/api_meta_engines_spec.rb +72 -0
  117. data/spec/app-search/api_query_suggestion_spec.rb +39 -0
  118. data/spec/app-search/api_schema_spec.rb +48 -0
  119. data/spec/app-search/api_search_and_multi_search_spec.rb +48 -0
  120. data/spec/app-search/api_search_settings_spec.rb +76 -0
  121. data/spec/app-search/api_spec_helper.rb +14 -0
  122. data/spec/app-search/api_synonyms_spec.rb +79 -0
  123. data/spec/app-search/api_top_clicks_analytics_spec.rb +44 -0
  124. data/spec/app-search/api_top_queries_analytics_spec.rb +34 -0
  125. data/spec/app-search/client_spec.rb +88 -0
  126. data/spec/app-search/date_spec.rb +69 -0
  127. data/spec/enterprise-search/client_spec.rb +107 -0
  128. data/spec/enterprise-search/request_spec.rb +136 -0
  129. data/spec/enterprise-search/utils_spec.rb +46 -0
  130. data/spec/fixtures/vcr/app_search/add_meta_engine_source.yml +109 -0
  131. data/spec/fixtures/vcr/app_search/api_documents.yml +56 -0
  132. data/spec/fixtures/vcr/app_search/api_index_documents.yml +57 -0
  133. data/spec/fixtures/vcr/app_search/api_log_clickthrough.yml +54 -0
  134. data/spec/fixtures/vcr/app_search/api_logs.yml +70 -0
  135. data/spec/fixtures/vcr/app_search/api_put_schema.yml +109 -0
  136. data/spec/fixtures/vcr/app_search/api_put_search_settings.yml +56 -0
  137. data/spec/fixtures/vcr/app_search/api_query_suggestion.yml +59 -0
  138. data/spec/fixtures/vcr/app_search/api_reset_search_settings.yml +56 -0
  139. data/spec/fixtures/vcr/app_search/api_schema.yml +56 -0
  140. data/spec/fixtures/vcr/app_search/api_search_settings.yml +56 -0
  141. data/spec/fixtures/vcr/app_search/api_top_clicks_analytics.yml +55 -0
  142. data/spec/fixtures/vcr/app_search/api_top_clicks_analytics_query.yml +55 -0
  143. data/spec/fixtures/vcr/app_search/api_top_queries_analytics.yml +55 -0
  144. data/spec/fixtures/vcr/app_search/count_analytics.yml +55 -0
  145. data/spec/fixtures/vcr/app_search/create_and_update_document.yml +107 -0
  146. data/spec/fixtures/vcr/app_search/create_curation.yml +113 -0
  147. data/spec/fixtures/vcr/app_search/create_engine.yml +55 -0
  148. data/spec/fixtures/vcr/app_search/create_meta_engine.yml +56 -0
  149. data/spec/fixtures/vcr/app_search/create_synonym_set.yml +56 -0
  150. data/spec/fixtures/vcr/app_search/delete_curation.yml +56 -0
  151. data/spec/fixtures/vcr/app_search/delete_engine.yml +55 -0
  152. data/spec/fixtures/vcr/app_search/delete_meta_engine_source.yml +56 -0
  153. data/spec/fixtures/vcr/app_search/delete_synonym_set.yml +56 -0
  154. data/spec/fixtures/vcr/app_search/get_curation.yml +56 -0
  155. data/spec/fixtures/vcr/app_search/get_engine.yml +55 -0
  156. data/spec/fixtures/vcr/app_search/index_and_delete_document.yml +107 -0
  157. data/spec/fixtures/vcr/app_search/list_curations.yml +56 -0
  158. data/spec/fixtures/vcr/app_search/list_documents.yml +57 -0
  159. data/spec/fixtures/vcr/app_search/list_engines.yml +55 -0
  160. data/spec/fixtures/vcr/app_search/list_synonym_sets.yml +56 -0
  161. data/spec/fixtures/vcr/app_search/multi_query_search.yml +63 -0
  162. data/spec/fixtures/vcr/app_search/put_curation.yml +113 -0
  163. data/spec/fixtures/vcr/app_search/put_synonym_set.yml +56 -0
  164. data/spec/fixtures/vcr/app_search/search.yml +57 -0
  165. data/spec/fixtures/vcr/app_search/single_query_search.yml +60 -0
  166. data/spec/fixtures/vcr/app_search/synonym_set.yml +56 -0
  167. data/spec/fixtures/vcr/workplace_search/add_user_permissions.yml +53 -0
  168. data/spec/fixtures/vcr/workplace_search/clear_user_permissions.yml +53 -0
  169. data/spec/fixtures/vcr/workplace_search/create_analytics_event.yml +55 -0
  170. data/spec/fixtures/vcr/workplace_search/create_external_identity.yml +53 -0
  171. data/spec/fixtures/vcr/workplace_search/delete_documents.yml +53 -0
  172. data/spec/fixtures/vcr/workplace_search/delete_external_identity.yml +53 -0
  173. data/spec/fixtures/vcr/workplace_search/index_documents.yml +55 -0
  174. data/spec/fixtures/vcr/workplace_search/list_external_identities.yml +53 -0
  175. data/spec/fixtures/vcr/workplace_search/list_permissions.yml +53 -0
  176. data/spec/fixtures/vcr/workplace_search/oauth_request_token.yml +57 -0
  177. data/spec/fixtures/vcr/workplace_search/put_external_identity.yml +53 -0
  178. data/spec/fixtures/vcr/workplace_search/put_user_permissions.yml +103 -0
  179. data/spec/fixtures/vcr/workplace_search/remove_user_permissions.yml +53 -0
  180. data/spec/fixtures/vcr/workplace_search/retrieve_external_identity.yml +53 -0
  181. data/spec/fixtures/vcr/workplace_search/search_request.yml +60 -0
  182. data/spec/fixtures/vcr/workplace_search/user_permissions_empty.yml +53 -0
  183. data/spec/integration/enterprise_search_api_spec.rb +96 -0
  184. data/spec/spec_helper.rb +27 -14
  185. data/spec/webmock_requires.rb +4 -0
  186. data/spec/workplace-search/client_spec.rb +77 -0
  187. data/spec/workplace-search/create_analytics_event_spec.rb +59 -0
  188. data/spec/workplace-search/documents_spec.rb +80 -0
  189. data/spec/workplace-search/external_identities_spec.rb +84 -0
  190. data/spec/workplace-search/permissions_spec.rb +136 -0
  191. data/spec/workplace-search/search_spec.rb +53 -0
  192. metadata +272 -28
  193. data/.circleci/config.yml +0 -68
  194. data/.travis.yml +0 -15
  195. data/NOTICE.txt +0 -3
  196. data/lib/elastic/enterprise-search.rb +0 -7
  197. data/logo-enterprise-search.png +0 -0
  198. data/spec/client_spec.rb +0 -57
  199. data/spec/configuration_spec.rb +0 -19
  200. data/spec/fixtures/vcr/async_create_or_update_document_success.yml +0 -51
  201. data/spec/fixtures/vcr/destroy_documents_success.yml +0 -51
@@ -0,0 +1,69 @@
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
+
22
+ describe Elastic::EnterpriseSearch::AppSearch::Client do
23
+ let(:host) { 'https://localhost:8080' }
24
+ let(:api_key) { 'api_key' }
25
+ let(:client) { Elastic::EnterpriseSearch::AppSearch::Client.new(host: host) }
26
+ let(:subject) { client.date_to_rfc3339(date) }
27
+
28
+ context 'Date (year=2020, month=1, day=2)' do
29
+ let(:date) { Date.new(2020, 1, 2) }
30
+ it 'serializes' do
31
+ expect(subject).to eq('2020-01-02T00:00:00+00:00')
32
+ end
33
+ end
34
+
35
+ context 'Date (year=1995, month=12, day=29)' do
36
+ let(:date) { Date.new(1995, 12, 29) }
37
+ it 'serializes' do
38
+ expect(subject).to eq('1995-12-29T00:00:00+00:00')
39
+ end
40
+ end
41
+
42
+ context 'Date (year=2020, month=1, day=2, hour=3, minute=4, second=5)' do
43
+ let(:date) { DateTime.new(2020, 1, 2, 3, 4, 5, '+00:00') }
44
+ it 'serializes' do
45
+ expect(subject).to eq('2020-01-02T03:04:05+00:00')
46
+ end
47
+ end
48
+
49
+ context 'Date (year=1995, month=12, day=29, hour=23, minute=44, second=55)' do
50
+ let(:date) { DateTime.new(1995, 12, 29, 23, 44, 55, '-05:00') }
51
+ it 'serializes' do
52
+ expect(subject).to eq('1995-12-29T23:44:55-05:00')
53
+ end
54
+ end
55
+
56
+ context 'Date (year=1995, month=12, day=29, hour=23, minute=44, second=55) with Asia/Kolkata (UTC+5:30) Timezone' do
57
+ let(:date) { DateTime.new(1995, 12, 29, 23, 44, 55, '+5:30') }
58
+ it 'serializes' do
59
+ expect(subject).to eq('1995-12-29T23:44:55+05:30')
60
+ end
61
+ end
62
+
63
+ context 'Date (year=1995, month=12, day=29, hour=23, minute=44, second=55) with HST (UTC-10:00) Timezone' do
64
+ let(:date) { DateTime.new(2020, 1, 2, 3, 4, 5, '-10:00') }
65
+ it 'serializes' do
66
+ expect(subject).to eq('2020-01-02T03:04:05-10:00')
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,107 @@
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::Client do
24
+ let(:host) { 'https://localhost:8080' }
25
+ let(:http_auth) { { user: 'elasticenterprise', password: 'password' } }
26
+
27
+ context 'initialization' do
28
+ it 'sets up options' do
29
+ client = Elastic::EnterpriseSearch::Client.new(
30
+ host: host
31
+ )
32
+ expect(client.host).to eq host
33
+ end
34
+
35
+ it 'uses the default host' do
36
+ client = Elastic::EnterpriseSearch::Client.new
37
+
38
+ expect(client.host).to eq 'http://localhost:3002'
39
+ end
40
+
41
+ it 'raises an exception for invalid host' do
42
+ expect do
43
+ Elastic::EnterpriseSearch::Client.new(host: 'localhost')
44
+ end.to raise_exception(URI::InvalidURIError)
45
+ end
46
+ end
47
+
48
+ context 'logging' do
49
+ require 'logger'
50
+ # rubocop:disable all
51
+ class FakeLogger < Logger
52
+ def initialize; @strio = StringIO.new; super(@strio); end
53
+ def messages; @strio.string; end
54
+ end
55
+ # rubocop:enable all
56
+
57
+ let(:logger) { FakeLogger.new }
58
+
59
+ it 'sets log' do
60
+ client = Elastic::EnterpriseSearch::Client.new(log: true)
61
+
62
+ expect(client.log)
63
+ end
64
+
65
+ it 'sets a logger' do
66
+ client = Elastic::EnterpriseSearch::Client.new(logger: logger)
67
+ stub_request(:get, 'http://localhost:3002/api/ent/v1/internal/health/')
68
+ client.health
69
+ expect(logger.messages).to include('INFO -- : GET http://localhost:3002/api/ent/v1/internal/health/')
70
+ end
71
+ end
72
+
73
+ context 'basic authentication' do
74
+ it 'sets up authentication on initialization' do
75
+ client = Elastic::EnterpriseSearch::Client.new(
76
+ http_auth: http_auth
77
+ )
78
+ expect(client.http_auth).to eq http_auth
79
+ end
80
+
81
+ it 'sets authentication after initialization' do
82
+ http_auth = { user: 'test', password: 'testing' }
83
+ client = Elastic::EnterpriseSearch::Client.new
84
+ client.http_auth = http_auth
85
+ expect(client.http_auth).to eq http_auth
86
+ end
87
+ end
88
+
89
+ context 'workplace search instantiation from enterprise search' do
90
+ let(:client) { Elastic::EnterpriseSearch::Client.new(host: host) }
91
+
92
+ it 'instantiates workplace search with default endpoint' do
93
+ expect(client.workplace_search.host).to eq host
94
+ end
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
107
+ end
@@ -0,0 +1,136 @@
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 'ostruct'
22
+ require_relative './../webmock_requires'
23
+
24
+ describe Elastic::EnterpriseSearch::Client do
25
+ let(:client) { Elastic::EnterpriseSearch::Client.new(http_auth: http_auth) }
26
+ let(:stub_response) { OpenStruct.new(status: 200) }
27
+ let(:host) { 'http://localhost:3002' }
28
+ let(:http_auth) { { user: 'elastic', password: 'password' } }
29
+ let(:user_agent) do
30
+ [
31
+ "#{Elastic::EnterpriseSearch::CLIENT_NAME}/#{Elastic::EnterpriseSearch::VERSION} ",
32
+ "(RUBY_VERSION: #{RUBY_VERSION}; ",
33
+ "#{RbConfig::CONFIG['host_os'].split('_').first[/[a-z]+/i].downcase} ",
34
+ "#{RbConfig::CONFIG['target_cpu']}; ",
35
+ "elasticsearch-transport: #{Elasticsearch::Transport::VERSION})"
36
+ ].join
37
+ end
38
+
39
+ let(:headers) do
40
+ {
41
+ 'Authorization' => 'Basic ZWxhc3RpYzpwYXNzd29yZA==',
42
+ 'Content-Type' => 'application/json',
43
+ 'User-Agent' => user_agent
44
+ }
45
+ end
46
+
47
+ context 'builds request' do
48
+ context 'get' do
49
+ it 'builds the right request' do
50
+ stub_request(:get, "#{host}/test")
51
+ .with(
52
+ query: { 'params' => 'test' },
53
+ headers: headers
54
+ ).to_return(stub_response)
55
+
56
+ expect(client.get('test', params: 'test').status).to eq(200)
57
+ end
58
+ end
59
+
60
+ context 'delete' do
61
+ it 'builds the right request' do
62
+ stub_request(:delete, "#{host}/test")
63
+ .with(
64
+ query: { 'params' => 'test' },
65
+ headers: headers
66
+ ).to_return(stub_response)
67
+
68
+ expect(client.delete('test', params: 'test').status).to eq(200)
69
+ end
70
+ end
71
+
72
+ context 'post' do
73
+ it 'builds the right request' do
74
+ stub_request(:post, "#{host}/test")
75
+ .with(
76
+ body: { some: 'value' },
77
+ headers: headers
78
+ ).to_return(stub_response)
79
+
80
+ expect(client.post('test', {}, { some: 'value' }).status).to eq(200)
81
+ end
82
+ end
83
+
84
+ context 'put' do
85
+ it 'builds the right request' do
86
+ stub_request(:put, "#{host}/test")
87
+ .with(body: { 'params' => 'test' }, headers: headers)
88
+ .to_return(stub_response)
89
+
90
+ expect(client.put('test', {}, { 'params' => 'test' }).status).to eq(200)
91
+ end
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
115
+ end
116
+
117
+ context 'with ssl' do
118
+ let(:host) { 'https://localhost:3002/api/ws/v1' }
119
+ let(:client) do
120
+ Elastic::EnterpriseSearch::Client.new(
121
+ http_auth: http_auth,
122
+ host: host
123
+ )
124
+ end
125
+
126
+ it 'sends the request correctly' do
127
+ stub_request(:get, "#{host}/test")
128
+ .with(
129
+ query: { 'params' => 'test' },
130
+ headers: headers
131
+ ).to_return(stub_response)
132
+
133
+ expect(client.get('test', { 'params' => 'test' }).status).to eq(200)
134
+ end
135
+ end
136
+ end
@@ -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