From a15798303a638957aedae296f94b29aa13cabdf5 Mon Sep 17 00:00:00 2001 From: Jedr Blaszyk Date: Mon, 19 Feb 2024 15:12:46 +0100 Subject: [PATCH] [Search] Integrate updateConnectorNameAndDescription with Connectors API (#175037) --- .../lib/delete_connector_secret.ts | 4 +- ...ate_connector_name_and_description.test.ts | 82 +++++++++++++++++++ .../update_connector_name_and_description.ts | 37 +++------ .../lib/update_connector_scheduling.test.ts | 2 +- .../lib/update_connector_scheduling.ts | 4 +- .../lib/update_connector_secret.ts | 4 +- .../types/connectors_api.ts | 13 --- .../translations/translations/fr-FR.json | 1 - .../translations/translations/ja-JP.json | 1 - .../translations/translations/zh-CN.json | 1 - 10 files changed, 101 insertions(+), 48 deletions(-) create mode 100644 packages/kbn-search-connectors/lib/update_connector_name_and_description.test.ts diff --git a/packages/kbn-search-connectors/lib/delete_connector_secret.ts b/packages/kbn-search-connectors/lib/delete_connector_secret.ts index d3ecbe8da73f..c0888e1f8b0a 100644 --- a/packages/kbn-search-connectors/lib/delete_connector_secret.ts +++ b/packages/kbn-search-connectors/lib/delete_connector_secret.ts @@ -7,10 +7,10 @@ */ import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; -import { ConnectorsAPIUpdateResponse } from '../types/connectors_api'; +import { Result } from '@elastic/elasticsearch/lib/api/types'; export const deleteConnectorSecret = async (client: ElasticsearchClient, id: string) => { - return await client.transport.request({ + return await client.transport.request({ method: 'DELETE', path: `/_connector/_secret/${id}`, }); diff --git a/packages/kbn-search-connectors/lib/update_connector_name_and_description.test.ts b/packages/kbn-search-connectors/lib/update_connector_name_and_description.test.ts new file mode 100644 index 000000000000..77ba55027501 --- /dev/null +++ b/packages/kbn-search-connectors/lib/update_connector_name_and_description.test.ts @@ -0,0 +1,82 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0 and the Server Side Public License, v 1; you may not use this file except + * in compliance with, at your election, the Elastic License 2.0 or the Server + * Side Public License, v 1. + */ + +import { ElasticsearchClient } from '@kbn/core/server'; + +import { errors } from '@elastic/elasticsearch'; + +import { updateConnectorNameAndDescription } from './update_connector_name_and_description'; + +describe('updateConnectorNameAndDescription lib function', () => { + const mockClient = { + transport: { + request: jest.fn(), + }, + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should update connector name and description', async () => { + mockClient.transport.request.mockImplementation(() => ({ result: 'updated' })); + + await expect( + updateConnectorNameAndDescription( + mockClient as unknown as ElasticsearchClient, + 'connectorId', + { + name: 'connector-name', + description: 'connector-description', + } + ) + ).resolves.toEqual({ result: 'updated' }); + expect(mockClient.transport.request).toHaveBeenCalledWith({ + body: { + name: 'connector-name', + description: 'connector-description', + }, + method: 'PUT', + path: '/_connector/connectorId/_name', + }); + }); + + it('should not index document if there is no connector', async () => { + mockClient.transport.request.mockImplementationOnce(() => { + return Promise.reject( + new errors.ResponseError({ + statusCode: 404, + body: { + error: { + type: `document_missing_exception`, + }, + }, + } as any) + ); + }); + await expect( + updateConnectorNameAndDescription( + mockClient as unknown as ElasticsearchClient, + 'connectorId', + { + name: 'connector-name', + description: 'connector-description', + } + ) + ).rejects.toEqual( + new errors.ResponseError({ + statusCode: 404, + body: { + error: { + type: `document_missing_exception`, + }, + }, + } as any) + ); + }); +}); diff --git a/packages/kbn-search-connectors/lib/update_connector_name_and_description.ts b/packages/kbn-search-connectors/lib/update_connector_name_and_description.ts index 985ae8dd029a..1929018bed37 100644 --- a/packages/kbn-search-connectors/lib/update_connector_name_and_description.ts +++ b/packages/kbn-search-connectors/lib/update_connector_name_and_description.ts @@ -6,37 +6,24 @@ * Side Public License, v 1. */ -import { WriteResponseBase } from '@elastic/elasticsearch/lib/api/types'; +import { Result } from '@elastic/elasticsearch/lib/api/types'; import { ElasticsearchClient } from '@kbn/core/server'; -import { i18n } from '@kbn/i18n'; -import { CONNECTORS_INDEX } from '..'; - -import { Connector, ConnectorDocument } from '../types/connectors'; +import { Connector } from '../types/connectors'; export const updateConnectorNameAndDescription = async ( client: ElasticsearchClient, connectorId: string, connectorUpdates: Partial> -): Promise => { - const connectorResult = await client.get({ - id: connectorId, - index: CONNECTORS_INDEX, +): Promise => { + const { name, description } = connectorUpdates; + const result = await client.transport.request({ + method: 'PUT', + path: `/_connector/${connectorId}/_name`, + body: { + name, + description, + }, }); - const connector = connectorResult._source; - if (connector) { - const result = await client.index({ - document: { ...connector, ...connectorUpdates }, - id: connectorId, - index: CONNECTORS_INDEX, - }); - await client.indices.refresh({ index: CONNECTORS_INDEX }); - return result; - } else { - throw new Error( - i18n.translate('searchConnectors.server.connectors.serviceType.error', { - defaultMessage: 'Could not find document', - }) - ); - } + return result; }; diff --git a/packages/kbn-search-connectors/lib/update_connector_scheduling.test.ts b/packages/kbn-search-connectors/lib/update_connector_scheduling.test.ts index 56357a3fb166..b386338a8cf6 100644 --- a/packages/kbn-search-connectors/lib/update_connector_scheduling.test.ts +++ b/packages/kbn-search-connectors/lib/update_connector_scheduling.test.ts @@ -12,7 +12,7 @@ import { errors } from '@elastic/elasticsearch'; import { updateConnectorScheduling } from './update_connector_scheduling'; -describe('addConnector lib function', () => { +describe('updateConnectorScheduling lib function', () => { const mockClient = { transport: { request: jest.fn(), diff --git a/packages/kbn-search-connectors/lib/update_connector_scheduling.ts b/packages/kbn-search-connectors/lib/update_connector_scheduling.ts index 1adfce462631..04ec6e33515e 100644 --- a/packages/kbn-search-connectors/lib/update_connector_scheduling.ts +++ b/packages/kbn-search-connectors/lib/update_connector_scheduling.ts @@ -6,12 +6,12 @@ * Side Public License, v 1. */ +import { Result } from '@elastic/elasticsearch/lib/api/types'; import { ElasticsearchClient } from '@kbn/core/server'; import { i18n } from '@kbn/i18n'; import { isNotFoundException } from '../utils/identify_exceptions'; import { SchedulingConfiguraton } from '../types/connectors'; -import { ConnectorsAPIUpdateResponse } from '../types/connectors_api'; export const updateConnectorScheduling = async ( client: ElasticsearchClient, @@ -19,7 +19,7 @@ export const updateConnectorScheduling = async ( scheduling: SchedulingConfiguraton ) => { try { - const result = await client.transport.request({ + const result = await client.transport.request({ method: 'PUT', path: `/_connector/${connectorId}/_scheduling`, body: { diff --git a/packages/kbn-search-connectors/lib/update_connector_secret.ts b/packages/kbn-search-connectors/lib/update_connector_secret.ts index 516818b7e9b8..a59ad128d4f8 100644 --- a/packages/kbn-search-connectors/lib/update_connector_secret.ts +++ b/packages/kbn-search-connectors/lib/update_connector_secret.ts @@ -7,14 +7,14 @@ */ import { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; -import { ConnectorsAPIUpdateResponse } from '../types/connectors_api'; +import { Result } from '@elastic/elasticsearch/lib/api/types'; export const updateConnectorSecret = async ( client: ElasticsearchClient, value: string, secretId: string ) => { - return await client.transport.request({ + return await client.transport.request({ method: 'PUT', path: `/_connector/_secret/${secretId}`, body: { diff --git a/packages/kbn-search-connectors/types/connectors_api.ts b/packages/kbn-search-connectors/types/connectors_api.ts index 3b96eeb09b0d..265aee65cc68 100644 --- a/packages/kbn-search-connectors/types/connectors_api.ts +++ b/packages/kbn-search-connectors/types/connectors_api.ts @@ -10,23 +10,10 @@ import { ConnectorSyncJob, Connector } from './connectors'; -enum Result { - created = 'created', - updated = 'updated', - deleted = 'deleted', - not_found = 'not_found', - no_op = 'noop', -} - export interface ConnectorAPIListConnectorsResponse { count: number; results: Connector[]; } - -export interface ConnectorsAPIUpdateResponse { - result: Result; -} - export interface ConnectorsAPISyncJobResponse { count: number; results: ConnectorSyncJob[]; diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 05aff9e3894d..5159045b616b 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -42474,7 +42474,6 @@ "searchConnectors.nativeConnectors.usernameLabel": "Nom d'utilisateur", "searchConnectors.server.connectors.configuration.error": "Connecteur introuvable", "searchConnectors.server.connectors.scheduling.error": "Document introuvable", - "searchConnectors.server.connectors.serviceType.error": "Document introuvable", "searchConnectors.syncJobType.full": "Contenu entier", "searchConnectors.syncJobType.incremental": "Contenu progressif", "searchConnectors.syncStatus.canceled": "Annulation de la synchronisation", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index ae652805fe47..54b12d6e6e37 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -42466,7 +42466,6 @@ "searchConnectors.nativeConnectors.usernameLabel": "ユーザー名", "searchConnectors.server.connectors.configuration.error": "コネクターが見つかりませんでした", "searchConnectors.server.connectors.scheduling.error": "ドキュメントが見つかりませんでした", - "searchConnectors.server.connectors.serviceType.error": "ドキュメントが見つかりませんでした", "searchConnectors.syncJobType.full": "完全なコンテンツ", "searchConnectors.syncJobType.incremental": "増分コンテンツ", "searchConnectors.syncStatus.canceled": "同期のキャンセル中", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index f51c0039ff8c..489384056c71 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -42446,7 +42446,6 @@ "searchConnectors.nativeConnectors.usernameLabel": "用户名", "searchConnectors.server.connectors.configuration.error": "找不到连接器", "searchConnectors.server.connectors.scheduling.error": "无法找到文档", - "searchConnectors.server.connectors.serviceType.error": "无法找到文档", "searchConnectors.syncJobType.full": "完整内容", "searchConnectors.syncJobType.incremental": "增量同步", "searchConnectors.syncStatus.canceled": "正在取消同步",