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
data/spec/spec_helper.rb CHANGED
@@ -1,28 +1,41 @@
1
- require 'bundler/setup'
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 'simplecov'
21
+ SimpleCov.start
22
+ require 'elastic/enterprise_search'
2
23
  require 'rspec'
3
- require 'webmock'
4
24
  require 'vcr'
5
- require 'awesome_print'
6
- require 'elastic/enterprise-search'
7
-
8
25
 
9
26
  RSpec.configure do |config|
10
27
  # Run specs in random order to surface order dependencies. If you find an
11
28
  # order dependency and want to debug it, you can fix the order by providing
12
29
  # the seed, which is printed after each run.
13
30
  # --seed 1234
14
- config.order = "random"
31
+ config.order = 'random'
32
+
33
+ config.add_formatter('documentation')
34
+ config.add_formatter('RspecJunitFormatter', 'enterprise-search-junit.xml')
15
35
 
16
36
  VCR.configure do |c|
17
37
  c.cassette_library_dir = 'spec/fixtures/vcr'
18
38
  c.hook_into :webmock
19
- end
20
-
21
- config.before :each do
22
- Elastic::EnterpriseSearch.endpoint = ENV["ENDPOINT"]
23
- end
24
-
25
- config.after :each do
26
- Elastic::EnterpriseSearch.reset
39
+ c.allow_http_connections_when_no_cassette = true
27
40
  end
28
41
  end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'webmock'
4
+ require 'webmock/rspec'
@@ -0,0 +1,77 @@
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::WorkplaceSearch::Client do
23
+ let(:host) { 'https://localhost:8080' }
24
+ let(:access_token) { 'access_token' }
25
+
26
+ context 'dependant on EnterpriseSearch' do
27
+ let(:ent_client) { Elastic::EnterpriseSearch::Client.new(host: host) }
28
+ let(:workplace_client) { ent_client.workplace_search }
29
+
30
+ it 'initializes a workplace search client' do
31
+ expect(workplace_client).not_to be nil
32
+ expect(workplace_client).to be_a(Elastic::EnterpriseSearch::WorkplaceSearch::Client)
33
+ expect(workplace_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
+ workplace_client = ent_client.workplace_search(http_auth: access_token)
39
+ expect(workplace_client.http_auth).to eq access_token
40
+ end
41
+
42
+ it 'sets up authentication as a parameter' do
43
+ workplace_client.http_auth = access_token
44
+ expect(workplace_client.http_auth).to eq access_token
45
+ end
46
+ end
47
+
48
+ context 'independent from EnterpriseSearch client' do
49
+ let(:workplace_client) { Elastic::EnterpriseSearch::WorkplaceSearch::Client.new(host: host) }
50
+
51
+ it 'initializes a workplace search client' do
52
+ expect(workplace_client).not_to be nil
53
+ expect(workplace_client).to be_a(Elastic::EnterpriseSearch::WorkplaceSearch::Client)
54
+ expect(workplace_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
+ workplace_client = ent_client.workplace_search(http_auth: access_token)
60
+ expect(workplace_client.http_auth).to eq access_token
61
+ end
62
+
63
+ it 'sets up authentication as a parameter' do
64
+ workplace_client.http_auth = access_token
65
+ expect(workplace_client.http_auth).to eq access_token
66
+ end
67
+ end
68
+
69
+ context 'OAuth' do
70
+ let(:client) { Elastic::EnterpriseSearch::WorkplaceSearch::Client.new(host: host) }
71
+
72
+ it 'generates an authorization url' do
73
+ authorization_url = 'https://localhost:8080/ws/oauth/authorize?response_type=code&client_id=client_id&redirect_uri=https%3A%2F%2Flocalhost%3A3002'
74
+ expect(client.authorization_url('client_id', 'https://localhost:3002')).to eq authorization_url
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,59 @@
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::WorkplaceSearch::Client do
23
+ let(:host) { ENV['ELASTIC_ENTERPRISE_HOST'] || 'http://localhost:3002' }
24
+ let(:content_source_id) { ENV['ELASTIC_WORKPLACE_SOURCE_ID'] || 'content_source_id' }
25
+ let(:client) do
26
+ Elastic::EnterpriseSearch::WorkplaceSearch::Client.new(
27
+ host: host
28
+ )
29
+ end
30
+
31
+ context 'create analytics event' do
32
+ it 'creates an event' do
33
+ VCR.use_cassette('workplace_search/oauth_request_token') do
34
+ client_id = 'client_id'
35
+ client_secret = 'client_secret'
36
+ redirect_uri = 'http://localhost:9393'
37
+
38
+ # gets authorization code via client.authorization_url(client_id, redirect_uri)
39
+ authorization_code = 'authorization_code'
40
+ @oauth_access_token = client.request_access_token(client_id, client_secret, authorization_code, redirect_uri)
41
+ end
42
+
43
+ VCR.use_cassette('workplace_search/create_analytics_event') do
44
+ body = {
45
+ type: 'click',
46
+ query_id: 'search_query_id',
47
+ document_id: 'document_id',
48
+ page: 1,
49
+ content_source_id: 'content_source_id',
50
+ rank: 1,
51
+ event: 'api'
52
+ }
53
+
54
+ response = client.create_analytics_event(access_token: @oauth_access_token, body: body)
55
+ expect(response.status).to eq 200
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,80 @@
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::WorkplaceSearch::Client do
23
+ let(:host) { ENV['ELASTIC_ENTERPRISE_HOST'] || 'http://localhost:3002' }
24
+ let(:access_token) { ENV['ELASTIC_WORKPLACE_TOKEN'] || 'access_token' }
25
+ let(:content_source_id) { ENV['ELASTIC_WORKPLACE_SOURCE_ID'] || 'content_source_id' }
26
+ let(:client) do
27
+ Elastic::EnterpriseSearch::WorkplaceSearch::Client.new(
28
+ host: host,
29
+ http_auth: access_token
30
+ )
31
+ end
32
+
33
+ context 'documents' do
34
+ let(:documents) do
35
+ [
36
+ { 'id' => '4e696e74656e646f203634',
37
+ 'url' => 'https://www.elastic.co/blog/introducing-quick-start-guides-getting-started-with-elastic-enterprise-search-for-free',
38
+ 'title' => 'Getting started with Elastic Enterprise Search for free',
39
+ 'body' => 'this is a test' },
40
+ {
41
+ 'id' => '47616d6520426f7920436f6c6f72',
42
+ 'url' => 'https://www.elastic.co/workplace-search',
43
+ 'title' => 'One-stop answer shop for the virtual workplace',
44
+ 'body' => 'this is also a test'
45
+ }
46
+ ]
47
+ end
48
+
49
+ it 'indexes' do
50
+ VCR.use_cassette('workplace_search/index_documents') do
51
+ response = client.index_documents(content_source_id, documents: documents)
52
+
53
+ expect(response.status).to eq 200
54
+ expect(response.body)
55
+ .to eq(
56
+ { 'results' =>
57
+ [
58
+ { 'id' => '4e696e74656e646f203634', 'errors' => [] },
59
+ { 'id' => '47616d6520426f7920436f6c6f72', 'errors' => [] }
60
+ ] }
61
+ )
62
+ end
63
+ end
64
+
65
+ it 'deletes' do
66
+ VCR.use_cassette('workplace_search/delete_documents') do
67
+ response = client.delete_documents(content_source_id, document_ids: documents.map { |doc| doc['id'] })
68
+ expect(response.status).to eq 200
69
+ expect(response.body)
70
+ .to eq(
71
+ { 'results' =>
72
+ [
73
+ { 'id' => '4e696e74656e646f203634', 'success' => true },
74
+ { 'id' => '47616d6520426f7920436f6c6f72', 'success' => true }
75
+ ] }
76
+ )
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,84 @@
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::WorkplaceSearch::Client do
23
+ let(:host) { ENV['ELASTIC_ENTERPRISE_HOST'] || 'http://localhost:3002' }
24
+ let(:access_token) { ENV['ELASTIC_WORKPLACE_TOKEN'] || 'access_token' }
25
+ let(:content_source_id) { ENV['ELASTIC_WORKPLACE_SOURCE_ID'] || 'content_source_id' }
26
+ let(:client) do
27
+ Elastic::EnterpriseSearch::WorkplaceSearch::Client.new(
28
+ host: host,
29
+ http_auth: access_token
30
+ )
31
+ end
32
+
33
+ context 'external identities' do
34
+ let(:user) { 'elastic_user' }
35
+ let(:source_user_id) { 'example@elastic.co' }
36
+
37
+ it 'creates an external identity' do
38
+ VCR.use_cassette('workplace_search/create_external_identity') do
39
+ body = { user: user, source_user_id: source_user_id }
40
+ response = client.create_external_identity(content_source_id, body: body)
41
+
42
+ expect(response.status).to eq 200
43
+ expect(response.body).to eq({ 'source_user_id' => source_user_id, 'user' => user })
44
+ end
45
+ end
46
+
47
+ it 'retrieves an external identity' do
48
+ VCR.use_cassette('workplace_search/retrieve_external_identity') do
49
+ response = client.external_identity(content_source_id, user: user)
50
+
51
+ expect(response.status).to eq 200
52
+ expect(response.body).to eq({ 'source_user_id' => source_user_id, 'user' => user })
53
+ end
54
+ end
55
+
56
+ it 'lists external identities' do
57
+ VCR.use_cassette('workplace_search/list_external_identities') do
58
+ response = client.list_external_identities(content_source_id)
59
+
60
+ expect(response.status).to eq 200
61
+ expect(response.body['results']).to eq([{ 'source_user_id' => source_user_id, 'user' => user }])
62
+ end
63
+ end
64
+
65
+ it 'updates an external identity' do
66
+ VCR.use_cassette('workplace_search/put_external_identity') do
67
+ body = { source_user_id: 'example2@elastic.co' }
68
+ response = client.put_external_identity(content_source_id, user: user, body: body)
69
+
70
+ expect(response.status).to eq 200
71
+ expect(response.body).to eq({ 'source_user_id' => 'example2@elastic.co', 'user' => user })
72
+ end
73
+ end
74
+
75
+ it 'deletes an external identity' do
76
+ VCR.use_cassette('workplace_search/delete_external_identity') do
77
+ response = client.delete_external_identity(content_source_id, user: user)
78
+
79
+ expect(response.status).to eq 200
80
+ expect(response.body).to eq 'ok'
81
+ end
82
+ end
83
+ end
84
+ 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
+
22
+ describe Elastic::EnterpriseSearch::WorkplaceSearch::Client do
23
+ let(:host) { ENV['ELASTIC_ENTERPRISE_HOST'] || 'http://localhost:3002' }
24
+ let(:access_token) { ENV['ELASTIC_WORKPLACE_TOKEN'] || 'access_token' }
25
+ let(:content_source_id) { ENV['ELASTIC_WORKPLACE_SOURCE_ID'] || 'content_source_id' }
26
+ let(:client) do
27
+ Elastic::EnterpriseSearch::WorkplaceSearch::Client.new(
28
+ host: host,
29
+ http_auth: access_token
30
+ )
31
+ end
32
+
33
+ context 'permissions' do
34
+ let(:user) { 'enterprise_search' }
35
+
36
+ it 'lists permissions' do
37
+ VCR.use_cassette('workplace_search/list_permissions') do
38
+ response = client.list_permissions(content_source_id)
39
+
40
+ expect(response.status).to eq 200
41
+
42
+ expect(response.body)
43
+ .to eq(
44
+ { 'meta' =>
45
+ { 'page' => { 'current' => 1, 'total_pages' => 1, 'total_results' => 1, 'size' => 25 } }, 'results' => [
46
+ { 'user' => 'enterprise_search', 'permissions' => [] }
47
+ ] }
48
+ )
49
+ end
50
+ end
51
+
52
+ it 'gets user permissions' do
53
+ clear_user_permissions
54
+
55
+ VCR.use_cassette('workplace_search/user_permissions_empty') do
56
+ response = client.user_permissions(content_source_id, { user: user })
57
+
58
+ expect(response.status).to eq 200
59
+
60
+ expect(response.body)
61
+ .to eq(
62
+ { 'user' => 'enterprise_search', 'permissions' => [] }
63
+ )
64
+ end
65
+ end
66
+
67
+ def clear_user_permissions
68
+ VCR.use_cassette('workplace_search/clear_user_permissions') do
69
+ client.put_user_permissions(
70
+ content_source_id,
71
+ { permissions: [], user: user }
72
+ )
73
+ end
74
+ end
75
+
76
+ it 'updates user permissions' do
77
+ VCR.use_cassette('workplace_search/put_user_permissions') do
78
+ response = client.add_user_permissions(
79
+ content_source_id,
80
+ { permissions: ['testing', 'more', 'permissions'], user: user }
81
+ )
82
+
83
+ expect(response.status).to eq 200
84
+
85
+ expect(response.body)
86
+ .to eq(
87
+ { 'user' => 'enterprise_search', 'permissions' => ['testing', 'more', 'permissions'] }
88
+ )
89
+
90
+ response = client.put_user_permissions(
91
+ content_source_id,
92
+ { permissions: [], user: user }
93
+ )
94
+
95
+ expect(response.status).to eq 200
96
+
97
+ expect(response.body)
98
+ .to eq(
99
+ { 'user' => 'enterprise_search', 'permissions' => [] }
100
+ )
101
+ end
102
+ end
103
+
104
+ it 'adds and removes permissions from a user' do
105
+ VCR.use_cassette('workplace_search/add_user_permissions') do
106
+ permissions = ['permission1', 'permission2']
107
+ response = client.add_user_permissions(
108
+ content_source_id,
109
+ { permissions: permissions, user: user }
110
+ )
111
+
112
+ expect(response.status).to eq 200
113
+
114
+ expect(response.body)
115
+ .to eq(
116
+ { 'user' => 'enterprise_search', 'permissions' => ['permission1', 'permission2'] }
117
+ )
118
+ end
119
+
120
+ VCR.use_cassette('workplace_search/remove_user_permissions') do
121
+ permissions = ['permission1', 'permission2']
122
+ response = client.remove_user_permissions(
123
+ content_source_id,
124
+ { permissions: permissions, user: user }
125
+ )
126
+
127
+ expect(response.status).to eq 200
128
+
129
+ expect(response.body)
130
+ .to eq(
131
+ { 'user' => 'enterprise_search', 'permissions' => [] }
132
+ )
133
+ end
134
+ end
135
+ end
136
+ end