elastic-enterprise-search 0.3.1 → 7.12.1

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 (210) 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 +49 -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 +27 -147
  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 +38 -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 -13
  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 +93 -15
  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 +279 -47
  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/lib/elastic/enterprise-search/client/content_source_documents.rb +0 -46
  198. data/lib/elastic/enterprise-search/client/permissions.rb +0 -30
  199. data/logo-enterprise-search.png +0 -0
  200. data/spec/client/content_source_documents_spec.rb +0 -55
  201. data/spec/client/permissions_spec.rb +0 -75
  202. data/spec/configuration_spec.rb +0 -19
  203. data/spec/fixtures/vcr/add_user_permissions.yml +0 -55
  204. data/spec/fixtures/vcr/async_create_or_update_document_success.yml +0 -51
  205. data/spec/fixtures/vcr/destroy_documents_success.yml +0 -51
  206. data/spec/fixtures/vcr/get_user_permissions.yml +0 -55
  207. data/spec/fixtures/vcr/list_all_permissions.yml +0 -55
  208. data/spec/fixtures/vcr/list_all_permissions_with_paging.yml +0 -55
  209. data/spec/fixtures/vcr/remove_user_permissions.yml +0 -55
  210. data/spec/fixtures/vcr/update_user_permissions.yml +0 -55
@@ -0,0 +1,39 @@
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 'api_query_suggestion' do
24
+ let(:engine_name) { 'films' }
25
+
26
+ it 'provides query suggestions' do
27
+ VCR.use_cassette('app_search/api_query_suggestion') do
28
+ response = @client.query_suggestion(engine_name, query: 'moo')
29
+
30
+ expect(response.status).to eq 200
31
+
32
+ expect(response.body['results']['documents']).to include(
33
+ { 'suggestion' => 'moon' },
34
+ { 'suggestion' => 'moon men' }
35
+ )
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,48 @@
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 'schema' do
25
+ let(:engine_name) { 'films' }
26
+
27
+ it 'returns an engine schema' do
28
+ VCR.use_cassette('app_search/api_schema') do
29
+ response = @client.schema(engine_name)
30
+
31
+ expect(response.status).to eq 200
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' })
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,48 @@
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
+ let(:engine_name) { 'books' }
24
+
25
+ context 'single search' do
26
+ it 'performs a single query search' do
27
+ VCR.use_cassette('app_search/single_query_search') do
28
+ response = @client.search(engine_name, query: 'Herman')
29
+ expect(response.status).to eq 200
30
+ expect(response.body).not_to be nil
31
+ expect(response.body['results'].count).to be > 1
32
+ end
33
+ end
34
+ end
35
+
36
+ context 'multi query search' do
37
+ it 'performs a multi query search' do
38
+ VCR.use_cassette('app_search/multi_query_search') do
39
+ response = @client.multi_search('books', body: [{ query: 'Herman' }, { query: 'Edgar' }])
40
+ expect(response.status).to eq 200
41
+ expect(response.body.class).to be Array
42
+ expect(response.body.count).to be 2
43
+ expect(response.body[0]['results']).to_not be nil
44
+ expect(response.body[1]['results']).to_not be nil
45
+ end
46
+ end
47
+ end
48
+ 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,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.configure do |config|
6
+ config.before(:example) do
7
+ @host = ENV['ELASTIC_ENTERPRISE_HOST'] || 'http://localhost:3002'
8
+ @api_key = ENV['ELASTIC_APPSEARCH_API_KEY'] || 'api_key'
9
+ @client = Elastic::EnterpriseSearch::AppSearch::Client.new(
10
+ host: @host,
11
+ http_auth: @api_key
12
+ )
13
+ end
14
+ 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
@@ -0,0 +1,44 @@
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 'api_top_clicks_analytics' do
24
+ it 'returns api_top_clicks_analytics with no query' do
25
+ VCR.use_cassette('app_search/api_top_clicks_analytics') do
26
+ response = @client.top_clicks_analytics('books')
27
+ expect(response.status).to eq 200
28
+
29
+ expect(response.body['results'])
30
+ expect(response.body['meta'])
31
+ end
32
+ end
33
+
34
+ it 'returns api_top_clicks_analytics with query' do
35
+ VCR.use_cassette('app_search/api_top_clicks_analytics_query') do
36
+ response = @client.top_clicks_analytics('books', query: 'test')
37
+ expect(response.status).to eq 200
38
+
39
+ expect(response.body['results'])
40
+ expect(response.body['meta'])
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,34 @@
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 'api_top_queries_analytics' do
24
+ it 'returns api_top_queries_analytics with no query' do
25
+ VCR.use_cassette('app_search/api_top_queries_analytics') do
26
+ response = @client.top_queries_analytics('books')
27
+ expect(response.status).to eq 200
28
+
29
+ expect(response.body['results'])
30
+ expect(response.body['meta'])
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,88 @@
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
+
26
+ context 'dependant on EnterpriseSearch' do
27
+ let(:ent_client) { Elastic::EnterpriseSearch::Client.new(host: host) }
28
+ let(:app_client) { ent_client.app_search }
29
+
30
+ it 'initializes an app search client' do
31
+ expect(app_client).not_to be nil
32
+ expect(app_client).to be_a(Elastic::EnterpriseSearch::AppSearch::Client)
33
+ expect(app_client.host).to eq(host)
34
+ end
35
+
36
+ it 'sets up authentication during initialization' do
37
+ ent_client = Elastic::EnterpriseSearch::Client.new(host: host)
38
+ app_client = ent_client.app_search(http_auth: api_key)
39
+ expect(app_client.http_auth).to eq api_key
40
+ end
41
+
42
+ it 'sets up authentication as a parameter' do
43
+ app_client.http_auth = api_key
44
+ expect(app_client.http_auth).to eq api_key
45
+ end
46
+ end
47
+
48
+ context 'independent from EnterpriseSearch client' do
49
+ let(:app_client) { Elastic::EnterpriseSearch::AppSearch::Client.new(host: host) }
50
+
51
+ it 'initializes a workplace search client' do
52
+ expect(app_client).not_to be nil
53
+ expect(app_client).to be_a(Elastic::EnterpriseSearch::AppSearch::Client)
54
+ expect(app_client.host).to eq(host)
55
+ end
56
+
57
+ it 'sets up authentication during initialization' do
58
+ ent_client = Elastic::EnterpriseSearch::Client.new(host: host)
59
+ app_client = ent_client.app_search(http_auth: api_key)
60
+ expect(app_client.http_auth).to eq api_key
61
+ end
62
+
63
+ it 'sets up authentication as a parameter' do
64
+ app_client.http_auth = api_key
65
+ expect(app_client.http_auth).to eq api_key
66
+ end
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
88
+ end