mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 17:59:23 -04:00
This commit is contained in:
parent
648c40646b
commit
0c1d56217d
340 changed files with 1256 additions and 1248 deletions
|
@ -21,28 +21,28 @@
|
|||
"children": [
|
||||
{
|
||||
"tags": [],
|
||||
"id": "def-server.CaseRequestContext.getCaseClient",
|
||||
"id": "def-server.CaseRequestContext.getCasesClient",
|
||||
"type": "Function",
|
||||
"label": "getCaseClient",
|
||||
"label": "getCasesClient",
|
||||
"description": [],
|
||||
"source": {
|
||||
"path": "x-pack/plugins/case/server/types.ts",
|
||||
"path": "x-pack/plugins/cases/server/types.ts",
|
||||
"lineNumber": 14
|
||||
},
|
||||
"signature": [
|
||||
"() => ",
|
||||
{
|
||||
"pluginId": "case",
|
||||
"pluginId": "cases",
|
||||
"scope": "server",
|
||||
"docId": "kibCasePluginApi",
|
||||
"section": "def-server.CaseClient",
|
||||
"text": "CaseClient"
|
||||
"section": "def-server.CasesClient",
|
||||
"text": "CasesClient"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": {
|
||||
"path": "x-pack/plugins/case/server/types.ts",
|
||||
"path": "x-pack/plugins/cases/server/types.ts",
|
||||
"lineNumber": 13
|
||||
},
|
||||
"initialIsOpen": false
|
||||
|
@ -60,4 +60,4 @@
|
|||
"misc": [],
|
||||
"objects": []
|
||||
}
|
||||
}
|
||||
}
|
|
@ -316,7 +316,7 @@ Failure to have auth enabled in Kibana will make for a broken UI. UI-based error
|
|||
|"Never look back. The past is done. The future is a blank canvas." ― Suzy Kassem, Rise Up and Salute the Sun
|
||||
|
||||
|
||||
|{kib-repo}blob/{branch}/x-pack/plugins/case/README.md[case]
|
||||
|{kib-repo}blob/{branch}/x-pack/plugins/cases/README.md[cases]
|
||||
|Experimental Feature
|
||||
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@ it('produces the right watch and ignore list', () => {
|
|||
<absolute path>/x-pack/plugins/apm/e2e,
|
||||
<absolute path>/x-pack/plugins/apm/scripts,
|
||||
<absolute path>/x-pack/plugins/canvas/canvas_plugin_src,
|
||||
<absolute path>/x-pack/plugins/case/server/scripts,
|
||||
<absolute path>/x-pack/plugins/cases/server/scripts,
|
||||
<absolute path>/x-pack/plugins/lists/scripts,
|
||||
<absolute path>/x-pack/plugins/lists/server/scripts,
|
||||
<absolute path>/x-pack/plugins/security_solution/scripts,
|
||||
|
|
|
@ -69,7 +69,7 @@ export function getServerWatchPaths({ pluginPaths, pluginScanDirs }: Options) {
|
|||
fromRoot('x-pack/plugins/apm/e2e'),
|
||||
fromRoot('x-pack/plugins/apm/scripts'),
|
||||
fromRoot('x-pack/plugins/canvas/canvas_plugin_src'), // prevents server from restarting twice for Canvas plugin changes,
|
||||
fromRoot('x-pack/plugins/case/server/scripts'),
|
||||
fromRoot('x-pack/plugins/cases/server/scripts'),
|
||||
fromRoot('x-pack/plugins/lists/scripts'),
|
||||
fromRoot('x-pack/plugins/lists/server/scripts'),
|
||||
fromRoot('x-pack/plugins/security_solution/scripts'),
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
"xpack.apm": "plugins/apm",
|
||||
"xpack.beatsManagement": "plugins/beats_management",
|
||||
"xpack.canvas": "plugins/canvas",
|
||||
"xpack.case": "plugins/case",
|
||||
"xpack.cases": "plugins/cases",
|
||||
"xpack.cloud": "plugins/cloud",
|
||||
"xpack.dashboard": "plugins/dashboard_enhanced",
|
||||
"xpack.discover": "plugins/discover_enhanced",
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import { i18n } from '@kbn/i18n';
|
||||
|
||||
export const NAME = i18n.translate('xpack.actions.builtin.case.jiraTitle', {
|
||||
export const NAME = i18n.translate('xpack.actions.builtin.cases.jiraTitle', {
|
||||
defaultMessage: 'Jira',
|
||||
});
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import { i18n } from '@kbn/i18n';
|
||||
|
||||
export const NAME = i18n.translate('xpack.actions.builtin.case.resilientTitle', {
|
||||
export const NAME = i18n.translate('xpack.actions.builtin.cases.resilientTitle', {
|
||||
defaultMessage: 'IBM Resilient',
|
||||
});
|
||||
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
/*
|
||||
* 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; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
|
||||
import { CaseClientFactoryArguments, CaseClient } from './types';
|
||||
import { CaseClientHandler } from './client';
|
||||
|
||||
export { CaseClientHandler } from './client';
|
||||
export { CaseClient } from './types';
|
||||
|
||||
/**
|
||||
* Create a CaseClientHandler to external services (other plugins).
|
||||
*/
|
||||
export const createExternalCaseClient = (clientArgs: CaseClientFactoryArguments): CaseClient => {
|
||||
const client = new CaseClientHandler(clientArgs);
|
||||
return client;
|
||||
};
|
|
@ -83,7 +83,7 @@ const CasePostRequestNoTypeRt = rt.type({
|
|||
/**
|
||||
* This type is used for validating a create case request. It requires that the type field be defined.
|
||||
*/
|
||||
export const CaseClientPostRequestRt = rt.type({
|
||||
export const CasesClientPostRequestRt = rt.type({
|
||||
...CasePostRequestNoTypeRt.props,
|
||||
[caseTypeField]: CaseTypeRt,
|
||||
});
|
||||
|
@ -92,7 +92,7 @@ export const CaseClientPostRequestRt = rt.type({
|
|||
* This type is not used for validation when decoding a request because intersection does not have props defined which
|
||||
* required for the excess function. Instead we use this as the type used by the UI. This allows the type field to be
|
||||
* optional and the server will handle setting it to a default value before validating that the request
|
||||
* has all the necessary fields. CaseClientPostRequestRt is used for validation.
|
||||
* has all the necessary fields. CasesClientPostRequestRt is used for validation.
|
||||
*/
|
||||
export const CasePostRequestRt = rt.intersection([
|
||||
rt.partial({ type: CaseTypeRt }),
|
||||
|
@ -178,7 +178,7 @@ export type CaseAttributes = rt.TypeOf<typeof CaseAttributesRt>;
|
|||
* that the type field be defined. The CasePostRequest should be used in most places (the UI etc). This type is really
|
||||
* only necessary for validation.
|
||||
*/
|
||||
export type CaseClientPostRequest = rt.TypeOf<typeof CaseClientPostRequestRt>;
|
||||
export type CasesClientPostRequest = rt.TypeOf<typeof CasesClientPostRequestRt>;
|
||||
export type CasePostRequest = rt.TypeOf<typeof CasePostRequestRt>;
|
||||
export type CaseResponse = rt.TypeOf<typeof CaseResponseRt>;
|
||||
export type CasesResponse = rt.TypeOf<typeof CasesResponseRt>;
|
|
@ -10,7 +10,7 @@ import * as rt from 'io-ts';
|
|||
import { UserRT } from '../user';
|
||||
|
||||
/* To the next developer, if you add/removed fields here
|
||||
* make sure to check this file (x-pack/plugins/case/server/services/user_actions/helpers.ts) too
|
||||
* make sure to check this file (x-pack/plugins/cases/server/services/user_actions/helpers.ts) too
|
||||
*/
|
||||
const UserActionFieldTypeRt = rt.union([
|
||||
rt.literal('comment'),
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import * as rt from 'io-ts';
|
||||
|
||||
// New fields should also be added at: x-pack/plugins/case/server/connectors/case/schema.ts
|
||||
// New fields should also be added at: x-pack/plugins/cases/server/connectors/case/schema.ts
|
||||
export const JiraFieldsRT = rt.type({
|
||||
issueType: rt.union([rt.string, rt.null]),
|
||||
priority: rt.union([rt.string, rt.null]),
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import * as rt from 'io-ts';
|
||||
|
||||
// New fields should also be added at: x-pack/plugins/case/server/connectors/case/schema.ts
|
||||
// New fields should also be added at: x-pack/plugins/cases/server/connectors/case/schema.ts
|
||||
export const ResilientFieldsRT = rt.type({
|
||||
incidentTypes: rt.union([rt.array(rt.string), rt.null]),
|
||||
severityCode: rt.union([rt.string, rt.null]),
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import * as rt from 'io-ts';
|
||||
|
||||
// New fields should also be added at: x-pack/plugins/case/server/connectors/case/schema.ts
|
||||
// New fields should also be added at: x-pack/plugins/cases/server/connectors/case/schema.ts
|
||||
export const ServiceNowITSMFieldsRT = rt.type({
|
||||
impact: rt.union([rt.string, rt.null]),
|
||||
severity: rt.union([rt.string, rt.null]),
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import * as rt from 'io-ts';
|
||||
|
||||
// New fields should also be added at: x-pack/plugins/case/server/connectors/case/schema.ts
|
||||
// New fields should also be added at: x-pack/plugins/cases/server/connectors/case/schema.ts
|
||||
export const ServiceNowSIRFieldsRT = rt.type({
|
||||
category: rt.union([rt.string, rt.null]),
|
||||
destIp: rt.union([rt.boolean, rt.null]),
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
import { DEFAULT_MAX_SIGNALS } from '../../security_solution/common/constants';
|
||||
|
||||
export const APP_ID = 'case';
|
||||
export const APP_ID = 'cases';
|
||||
|
||||
/**
|
||||
* Case routes
|
|
@ -8,5 +8,5 @@
|
|||
module.exports = {
|
||||
preset: '@kbn/test',
|
||||
rootDir: '../../..',
|
||||
roots: ['<rootDir>/x-pack/plugins/case'],
|
||||
roots: ['<rootDir>/x-pack/plugins/cases'],
|
||||
};
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"configPath": ["xpack", "case"],
|
||||
"id": "case",
|
||||
"configPath": ["xpack", "cases"],
|
||||
"id": "cases",
|
||||
"kibanaVersion": "kibana",
|
||||
"requiredPlugins": ["actions", "securitySolution"],
|
||||
"optionalPlugins": [
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"author": "Elastic",
|
||||
"name": "case",
|
||||
"name": "cases",
|
||||
"version": "8.0.0",
|
||||
"private": true,
|
||||
"license": "Elastic-License",
|
|
@ -8,7 +8,7 @@
|
|||
import { ElasticsearchClient, Logger } from 'kibana/server';
|
||||
import { AlertInfo } from '../../common';
|
||||
import { AlertServiceContract } from '../../services';
|
||||
import { CaseClientGetAlertsResponse } from './types';
|
||||
import { CasesClientGetAlertsResponse } from './types';
|
||||
|
||||
interface GetParams {
|
||||
alertsService: AlertServiceContract;
|
||||
|
@ -22,7 +22,7 @@ export const get = async ({
|
|||
alertsInfo,
|
||||
scopedClusterClient,
|
||||
logger,
|
||||
}: GetParams): Promise<CaseClientGetAlertsResponse> => {
|
||||
}: GetParams): Promise<CasesClientGetAlertsResponse> => {
|
||||
if (alertsInfo.length === 0) {
|
||||
return [];
|
||||
}
|
|
@ -16,4 +16,4 @@ interface Alert {
|
|||
};
|
||||
}
|
||||
|
||||
export type CaseClientGetAlertsResponse = Alert[];
|
||||
export type CasesClientGetAlertsResponse = Alert[];
|
|
@ -7,18 +7,18 @@
|
|||
|
||||
import { CaseStatuses } from '../../../common/api';
|
||||
import { createMockSavedObjectsRepository } from '../../routes/api/__fixtures__';
|
||||
import { createCaseClientWithMockSavedObjectsClient } from '../mocks';
|
||||
import { createCasesClientWithMockSavedObjectsClient } from '../mocks';
|
||||
|
||||
describe('updateAlertsStatus', () => {
|
||||
it('updates the status of the alert correctly', async () => {
|
||||
const savedObjectsClient = createMockSavedObjectsRepository();
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
await caseClient.client.updateAlertsStatus({
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
await casesClient.client.updateAlertsStatus({
|
||||
alerts: [{ id: 'alert-id-1', index: '.siem-signals', status: CaseStatuses.closed }],
|
||||
});
|
||||
|
||||
expect(caseClient.services.alertsService.updateAlertsStatus).toHaveBeenCalledWith({
|
||||
expect(casesClient.services.alertsService.updateAlertsStatus).toHaveBeenCalledWith({
|
||||
logger: expect.anything(),
|
||||
scopedClusterClient: expect.anything(),
|
||||
alerts: [{ id: 'alert-id-1', index: '.siem-signals', status: CaseStatuses.closed }],
|
|
@ -5,7 +5,12 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { ConnectorTypes, CaseStatuses, CaseType, CaseClientPostRequest } from '../../../common/api';
|
||||
import {
|
||||
ConnectorTypes,
|
||||
CaseStatuses,
|
||||
CaseType,
|
||||
CasesClientPostRequest,
|
||||
} from '../../../common/api';
|
||||
import { isCaseError } from '../../common/error';
|
||||
|
||||
import {
|
||||
|
@ -13,7 +18,7 @@ import {
|
|||
mockCaseConfigure,
|
||||
mockCases,
|
||||
} from '../../routes/api/__fixtures__';
|
||||
import { createCaseClientWithMockSavedObjectsClient } from '../mocks';
|
||||
import { createCasesClientWithMockSavedObjectsClient } from '../mocks';
|
||||
|
||||
describe('create', () => {
|
||||
beforeEach(async () => {
|
||||
|
@ -26,7 +31,7 @@ describe('create', () => {
|
|||
|
||||
describe('happy path', () => {
|
||||
test('it creates the case correctly', async () => {
|
||||
const postCase: CaseClientPostRequest = {
|
||||
const postCase: CasesClientPostRequest = {
|
||||
description: 'This is a brand new case of a bad meanie defacing data',
|
||||
title: 'Super Bad Security Issue',
|
||||
tags: ['defacement'],
|
||||
|
@ -46,8 +51,8 @@ describe('create', () => {
|
|||
caseSavedObject: mockCases,
|
||||
caseConfigureSavedObject: mockCaseConfigure,
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await caseClient.client.create(postCase);
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await casesClient.client.create(postCase);
|
||||
|
||||
expect(res).toMatchInlineSnapshot(`
|
||||
Object {
|
||||
|
@ -93,7 +98,7 @@ describe('create', () => {
|
|||
`);
|
||||
|
||||
expect(
|
||||
caseClient.services.userActionService.postUserActions.mock.calls[0][0].actions
|
||||
casesClient.services.userActionService.postUserActions.mock.calls[0][0].actions
|
||||
// using a snapshot here so we don't have to update the text field manually each time it changes
|
||||
).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
|
@ -130,7 +135,7 @@ describe('create', () => {
|
|||
});
|
||||
|
||||
test('it creates the case without connector in the configuration', async () => {
|
||||
const postCase: CaseClientPostRequest = {
|
||||
const postCase: CasesClientPostRequest = {
|
||||
description: 'This is a brand new case of a bad meanie defacing data',
|
||||
title: 'Super Bad Security Issue',
|
||||
tags: ['defacement'],
|
||||
|
@ -149,8 +154,8 @@ describe('create', () => {
|
|||
const savedObjectsClient = createMockSavedObjectsRepository({
|
||||
caseSavedObject: mockCases,
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await caseClient.client.create(postCase);
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await casesClient.client.create(postCase);
|
||||
|
||||
expect(res).toMatchInlineSnapshot(`
|
||||
Object {
|
||||
|
@ -193,7 +198,7 @@ describe('create', () => {
|
|||
});
|
||||
|
||||
test('Allow user to create case without authentication', async () => {
|
||||
const postCase: CaseClientPostRequest = {
|
||||
const postCase: CasesClientPostRequest = {
|
||||
description: 'This is a brand new case of a bad meanie defacing data',
|
||||
title: 'Super Bad Security Issue',
|
||||
tags: ['defacement'],
|
||||
|
@ -212,11 +217,11 @@ describe('create', () => {
|
|||
const savedObjectsClient = createMockSavedObjectsRepository({
|
||||
caseSavedObject: mockCases,
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({
|
||||
savedObjectsClient,
|
||||
badAuth: true,
|
||||
});
|
||||
const res = await caseClient.client.create(postCase);
|
||||
const res = await casesClient.client.create(postCase);
|
||||
|
||||
expect(res).toMatchInlineSnapshot(`
|
||||
Object {
|
||||
|
@ -276,9 +281,9 @@ describe('create', () => {
|
|||
const savedObjectsClient = createMockSavedObjectsRepository({
|
||||
caseSavedObject: mockCases,
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return (
|
||||
caseClient.client
|
||||
casesClient.client
|
||||
// @ts-expect-error
|
||||
.create({ theCase: postCase })
|
||||
.catch((e) => {
|
||||
|
@ -305,9 +310,9 @@ describe('create', () => {
|
|||
const savedObjectsClient = createMockSavedObjectsRepository({
|
||||
caseSavedObject: mockCases,
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return (
|
||||
caseClient.client
|
||||
casesClient.client
|
||||
// @ts-expect-error
|
||||
.create({ theCase: postCase })
|
||||
.catch((e) => {
|
||||
|
@ -334,9 +339,9 @@ describe('create', () => {
|
|||
const savedObjectsClient = createMockSavedObjectsRepository({
|
||||
caseSavedObject: mockCases,
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return (
|
||||
caseClient.client
|
||||
casesClient.client
|
||||
// @ts-expect-error
|
||||
.create({ theCase: postCase })
|
||||
.catch((e) => {
|
||||
|
@ -358,9 +363,9 @@ describe('create', () => {
|
|||
const savedObjectsClient = createMockSavedObjectsRepository({
|
||||
caseSavedObject: mockCases,
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return (
|
||||
caseClient.client
|
||||
casesClient.client
|
||||
// @ts-expect-error
|
||||
.create({ theCase: postCase })
|
||||
.catch((e) => {
|
||||
|
@ -388,9 +393,9 @@ describe('create', () => {
|
|||
const savedObjectsClient = createMockSavedObjectsRepository({
|
||||
caseSavedObject: mockCases,
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return (
|
||||
caseClient.client
|
||||
casesClient.client
|
||||
// @ts-expect-error
|
||||
.create({ theCase: postCase })
|
||||
.catch((e) => {
|
||||
|
@ -423,8 +428,8 @@ describe('create', () => {
|
|||
const savedObjectsClient = createMockSavedObjectsRepository({
|
||||
caseSavedObject: mockCases,
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return caseClient.client.create(postCase).catch((e) => {
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return casesClient.client.create(postCase).catch((e) => {
|
||||
expect(e).not.toBeNull();
|
||||
expect(e.isBoom).toBe(true);
|
||||
expect(e.output.statusCode).toBe(400);
|
||||
|
@ -432,7 +437,7 @@ describe('create', () => {
|
|||
});
|
||||
|
||||
it(`Returns an error if postNewCase throws`, async () => {
|
||||
const postCase: CaseClientPostRequest = {
|
||||
const postCase: CasesClientPostRequest = {
|
||||
description: 'Throw an error',
|
||||
title: 'Super Bad Security Issue',
|
||||
tags: ['error'],
|
||||
|
@ -450,9 +455,9 @@ describe('create', () => {
|
|||
const savedObjectsClient = createMockSavedObjectsRepository({
|
||||
caseSavedObject: mockCases,
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
|
||||
return caseClient.client.create(postCase).catch((e) => {
|
||||
return casesClient.client.create(postCase).catch((e) => {
|
||||
expect(e).not.toBeNull();
|
||||
expect(isCaseError(e)).toBeTruthy();
|
||||
const boomErr = e.boomify();
|
|
@ -18,7 +18,7 @@ import {
|
|||
excess,
|
||||
CaseResponseRt,
|
||||
CaseResponse,
|
||||
CaseClientPostRequestRt,
|
||||
CasesClientPostRequestRt,
|
||||
CasePostRequest,
|
||||
CaseType,
|
||||
User,
|
||||
|
@ -62,7 +62,7 @@ export const create = async ({
|
|||
const { type = CaseType.individual, ...nonTypeCaseFields } = theCase;
|
||||
const query = pipe(
|
||||
// decode with the defaulted type field
|
||||
excess(CaseClientPostRequestRt).decode({ type, ...nonTypeCaseFields }),
|
||||
excess(CasesClientPostRequestRt).decode({ type, ...nonTypeCaseFields }),
|
||||
fold(throwErrors(Boom.badRequest), identity)
|
||||
);
|
||||
|
|
@ -38,7 +38,7 @@ import {
|
|||
CaseServiceSetup,
|
||||
CaseUserActionServiceSetup,
|
||||
} from '../../services';
|
||||
import { CaseClientHandler } from '../client';
|
||||
import { CasesClientHandler } from '../client';
|
||||
import { createCaseError } from '../../common/error';
|
||||
|
||||
/**
|
||||
|
@ -65,7 +65,7 @@ interface PushParams {
|
|||
user: User;
|
||||
caseId: string;
|
||||
connectorId: string;
|
||||
caseClient: CaseClientHandler;
|
||||
casesClient: CasesClientHandler;
|
||||
actionsClient: ActionsClient;
|
||||
logger: Logger;
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ export const push = async ({
|
|||
caseService,
|
||||
caseConfigureService,
|
||||
userActionService,
|
||||
caseClient,
|
||||
casesClient,
|
||||
actionsClient,
|
||||
connectorId,
|
||||
caseId,
|
||||
|
@ -92,9 +92,9 @@ export const push = async ({
|
|||
|
||||
try {
|
||||
[theCase, connector, userActions] = await Promise.all([
|
||||
caseClient.get({ id: caseId, includeComments: true, includeSubCaseComments: true }),
|
||||
casesClient.get({ id: caseId, includeComments: true, includeSubCaseComments: true }),
|
||||
actionsClient.get({ id: connectorId }),
|
||||
caseClient.getUserActions({ caseId }),
|
||||
casesClient.getUserActions({ caseId }),
|
||||
]);
|
||||
} catch (e) {
|
||||
const message = `Error getting case and/or connector and/or user actions: ${e.message}`;
|
||||
|
@ -111,7 +111,7 @@ export const push = async ({
|
|||
const alertsInfo = getAlertInfoFromComments(theCase?.comments);
|
||||
|
||||
try {
|
||||
alerts = await caseClient.getAlerts({
|
||||
alerts = await casesClient.getAlerts({
|
||||
alertsInfo,
|
||||
});
|
||||
} catch (e) {
|
||||
|
@ -123,7 +123,7 @@ export const push = async ({
|
|||
}
|
||||
|
||||
try {
|
||||
connectorMappings = await caseClient.getMappings({
|
||||
connectorMappings = await casesClient.getMappings({
|
||||
actionsClient,
|
||||
connectorId: connector.id,
|
||||
connectorType: connector.actionTypeId,
|
|
@ -13,7 +13,7 @@ import {
|
|||
mockCases,
|
||||
mockCaseComments,
|
||||
} from '../../routes/api/__fixtures__';
|
||||
import { createCaseClientWithMockSavedObjectsClient } from '../mocks';
|
||||
import { createCasesClientWithMockSavedObjectsClient } from '../mocks';
|
||||
|
||||
describe('update', () => {
|
||||
beforeEach(async () => {
|
||||
|
@ -40,8 +40,8 @@ describe('update', () => {
|
|||
caseSavedObject: mockCases,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await caseClient.client.update(patchCases);
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await casesClient.client.update(patchCases);
|
||||
|
||||
expect(res).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
|
@ -93,7 +93,7 @@ describe('update', () => {
|
|||
`);
|
||||
|
||||
expect(
|
||||
caseClient.services.userActionService.postUserActions.mock.calls[0][0].actions
|
||||
casesClient.services.userActionService.postUserActions.mock.calls[0][0].actions
|
||||
).toEqual([
|
||||
{
|
||||
attributes: {
|
||||
|
@ -140,8 +140,8 @@ describe('update', () => {
|
|||
],
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await caseClient.client.update(patchCases);
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await casesClient.client.update(patchCases);
|
||||
|
||||
expect(res).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
|
@ -204,8 +204,8 @@ describe('update', () => {
|
|||
caseSavedObject: mockCases,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await caseClient.client.update(patchCases);
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await casesClient.client.update(patchCases);
|
||||
|
||||
expect(res).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
|
@ -272,8 +272,8 @@ describe('update', () => {
|
|||
caseSavedObject: [mockCaseNoConnectorId],
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await caseClient.client.update(patchCases);
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await casesClient.client.update(patchCases);
|
||||
|
||||
expect(res).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
|
@ -344,8 +344,8 @@ describe('update', () => {
|
|||
caseSavedObject: mockCases,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await caseClient.client.update(patchCases);
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await casesClient.client.update(patchCases);
|
||||
|
||||
expect(res).toMatchInlineSnapshot(`
|
||||
Array [
|
||||
|
@ -424,12 +424,12 @@ describe('update', () => {
|
|||
],
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
caseClient.client.updateAlertsStatus = jest.fn();
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
casesClient.client.updateAlertsStatus = jest.fn();
|
||||
|
||||
await caseClient.client.update(patchCases);
|
||||
await casesClient.client.update(patchCases);
|
||||
|
||||
expect(caseClient.client.updateAlertsStatus).toHaveBeenCalledWith({
|
||||
expect(casesClient.client.updateAlertsStatus).toHaveBeenCalledWith({
|
||||
alerts: [
|
||||
{
|
||||
id: 'test-id',
|
||||
|
@ -461,11 +461,11 @@ describe('update', () => {
|
|||
caseCommentSavedObject: [{ ...mockCaseComments[3] }],
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
|
||||
await caseClient.client.update(patchCases);
|
||||
await casesClient.client.update(patchCases);
|
||||
|
||||
expect(caseClient.esClient.bulk).not.toHaveBeenCalled();
|
||||
expect(casesClient.esClient.bulk).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test('it updates alert status when syncAlerts is turned on', async () => {
|
||||
|
@ -489,12 +489,12 @@ describe('update', () => {
|
|||
caseCommentSavedObject: [{ ...mockCaseComments[3] }],
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
caseClient.client.updateAlertsStatus = jest.fn();
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
casesClient.client.updateAlertsStatus = jest.fn();
|
||||
|
||||
await caseClient.client.update(patchCases);
|
||||
await casesClient.client.update(patchCases);
|
||||
|
||||
expect(caseClient.client.updateAlertsStatus).toHaveBeenCalledWith({
|
||||
expect(casesClient.client.updateAlertsStatus).toHaveBeenCalledWith({
|
||||
alerts: [{ id: 'test-id', index: 'test-index', status: 'open' }],
|
||||
});
|
||||
});
|
||||
|
@ -515,11 +515,11 @@ describe('update', () => {
|
|||
caseCommentSavedObject: [{ ...mockCaseComments[3] }],
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
|
||||
await caseClient.client.update(patchCases);
|
||||
await casesClient.client.update(patchCases);
|
||||
|
||||
expect(caseClient.esClient.bulk).not.toHaveBeenCalled();
|
||||
expect(casesClient.esClient.bulk).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test('it updates alert status for multiple cases', async () => {
|
||||
|
@ -572,12 +572,12 @@ describe('update', () => {
|
|||
],
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
caseClient.client.updateAlertsStatus = jest.fn();
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
casesClient.client.updateAlertsStatus = jest.fn();
|
||||
|
||||
await caseClient.client.update(patchCases);
|
||||
await casesClient.client.update(patchCases);
|
||||
|
||||
expect(caseClient.client.updateAlertsStatus).toHaveBeenCalledWith({
|
||||
expect(casesClient.client.updateAlertsStatus).toHaveBeenCalledWith({
|
||||
alerts: [
|
||||
{ id: 'test-id', index: 'test-index', status: 'open' },
|
||||
{ id: 'test-id-2', index: 'test-index-2', status: 'closed' },
|
||||
|
@ -600,11 +600,11 @@ describe('update', () => {
|
|||
caseSavedObject: mockCases,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
|
||||
await caseClient.client.update(patchCases);
|
||||
await casesClient.client.update(patchCases);
|
||||
|
||||
expect(caseClient.esClient.bulk).not.toHaveBeenCalled();
|
||||
expect(casesClient.esClient.bulk).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -629,9 +629,9 @@ describe('update', () => {
|
|||
caseSavedObject: mockCases,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return (
|
||||
caseClient.client
|
||||
casesClient.client
|
||||
// @ts-expect-error
|
||||
.update({ cases: patchCases })
|
||||
.catch((e) => {
|
||||
|
@ -662,9 +662,9 @@ describe('update', () => {
|
|||
caseSavedObject: mockCases,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return (
|
||||
caseClient.client
|
||||
casesClient.client
|
||||
// @ts-expect-error
|
||||
.update({ cases: patchCases })
|
||||
.catch((e) => {
|
||||
|
@ -691,8 +691,8 @@ describe('update', () => {
|
|||
caseSavedObject: mockCases,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return caseClient.client.update(patchCases).catch((e) => {
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return casesClient.client.update(patchCases).catch((e) => {
|
||||
expect(e).not.toBeNull();
|
||||
expect(isCaseError(e)).toBeTruthy();
|
||||
const boomErr = e.boomify();
|
||||
|
@ -723,8 +723,8 @@ describe('update', () => {
|
|||
caseSavedObject: mockCases,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return caseClient.client.update(patchCases).catch((e) => {
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return casesClient.client.update(patchCases).catch((e) => {
|
||||
expect(e).not.toBeNull();
|
||||
expect(isCaseError(e)).toBeTruthy();
|
||||
const boomErr = e.boomify();
|
||||
|
@ -752,8 +752,8 @@ describe('update', () => {
|
|||
caseSavedObject: mockCases,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return caseClient.client.update(patchCases).catch((e) => {
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return casesClient.client.update(patchCases).catch((e) => {
|
||||
expect(e).not.toBeNull();
|
||||
expect(isCaseError(e)).toBeTruthy();
|
||||
const boomErr = e.boomify();
|
|
@ -51,7 +51,7 @@ import {
|
|||
CASE_SAVED_OBJECT,
|
||||
SUB_CASE_SAVED_OBJECT,
|
||||
} from '../../saved_object_types';
|
||||
import { CaseClientHandler } from '..';
|
||||
import { CasesClientHandler } from '..';
|
||||
import { createAlertUpdateRequest } from '../../common';
|
||||
import { UpdateAlertRequest } from '../types';
|
||||
import { createCaseError } from '../../common/error';
|
||||
|
@ -254,14 +254,14 @@ async function updateAlerts({
|
|||
casesMap,
|
||||
caseService,
|
||||
client,
|
||||
caseClient,
|
||||
casesClient,
|
||||
}: {
|
||||
casesWithSyncSettingChangedToOn: ESCasePatchRequest[];
|
||||
casesWithStatusChangedAndSynced: ESCasePatchRequest[];
|
||||
casesMap: Map<string, SavedObject<ESCaseAttributes>>;
|
||||
caseService: CaseServiceSetup;
|
||||
client: SavedObjectsClientContract;
|
||||
caseClient: CaseClientHandler;
|
||||
casesClient: CasesClientHandler;
|
||||
}) {
|
||||
/**
|
||||
* It's possible that a case ID can appear multiple times in each array. I'm intentionally placing the status changes
|
||||
|
@ -309,7 +309,7 @@ async function updateAlerts({
|
|||
[]
|
||||
);
|
||||
|
||||
await caseClient.updateAlertsStatus({ alerts: alertsToUpdate });
|
||||
await casesClient.updateAlertsStatus({ alerts: alertsToUpdate });
|
||||
}
|
||||
|
||||
interface UpdateArgs {
|
||||
|
@ -317,7 +317,7 @@ interface UpdateArgs {
|
|||
caseService: CaseServiceSetup;
|
||||
userActionService: CaseUserActionServiceSetup;
|
||||
user: User;
|
||||
caseClient: CaseClientHandler;
|
||||
casesClient: CasesClientHandler;
|
||||
cases: CasesPatchRequest;
|
||||
logger: Logger;
|
||||
}
|
||||
|
@ -327,7 +327,7 @@ export const update = async ({
|
|||
caseService,
|
||||
userActionService,
|
||||
user,
|
||||
caseClient,
|
||||
casesClient,
|
||||
cases,
|
||||
logger,
|
||||
}: UpdateArgs): Promise<CasesResponse> => {
|
||||
|
@ -470,7 +470,7 @@ export const update = async ({
|
|||
casesWithSyncSettingChangedToOn,
|
||||
caseService,
|
||||
client: savedObjectsClient,
|
||||
caseClient,
|
||||
casesClient,
|
||||
casesMap,
|
||||
});
|
||||
|
|
@ -23,7 +23,7 @@ import {
|
|||
} from '../../../common/api';
|
||||
import { ActionsClient } from '../../../../actions/server';
|
||||
import { externalServiceFormatters, FormatterConnectorTypes } from '../../connectors';
|
||||
import { CaseClientGetAlertsResponse } from '../../client/alerts/types';
|
||||
import { CasesClientGetAlertsResponse } from '../../client/alerts/types';
|
||||
import {
|
||||
BasicParams,
|
||||
EntityInformation,
|
||||
|
@ -46,7 +46,7 @@ interface CreateIncidentArgs {
|
|||
userActions: CaseUserActionsResponse;
|
||||
connector: ActionConnector;
|
||||
mappings: ConnectorMappingsAttributes[];
|
||||
alerts: CaseClientGetAlertsResponse;
|
||||
alerts: CasesClientGetAlertsResponse;
|
||||
}
|
||||
|
||||
export const getLatestPushInfo = (
|
||||
|
@ -210,22 +210,22 @@ export const FIELD_INFORMATION = (
|
|||
) => {
|
||||
switch (mode) {
|
||||
case 'create':
|
||||
return i18n.translate('xpack.case.connectors.case.externalIncidentCreated', {
|
||||
return i18n.translate('xpack.cases.connectors.cases.externalIncidentCreated', {
|
||||
values: { date, user },
|
||||
defaultMessage: '(created at {date} by {user})',
|
||||
});
|
||||
case 'update':
|
||||
return i18n.translate('xpack.case.connectors.case.externalIncidentUpdated', {
|
||||
return i18n.translate('xpack.cases.connectors.cases.externalIncidentUpdated', {
|
||||
values: { date, user },
|
||||
defaultMessage: '(updated at {date} by {user})',
|
||||
});
|
||||
case 'add':
|
||||
return i18n.translate('xpack.case.connectors.case.externalIncidentAdded', {
|
||||
return i18n.translate('xpack.cases.connectors.cases.externalIncidentAdded', {
|
||||
values: { date, user },
|
||||
defaultMessage: '(added at {date} by {user})',
|
||||
});
|
||||
default:
|
||||
return i18n.translate('xpack.case.connectors.case.externalIncidentDefault', {
|
||||
return i18n.translate('xpack.cases.connectors.cases.externalIncidentDefault', {
|
||||
values: { date, user },
|
||||
defaultMessage: '(created at {date} by {user})',
|
||||
});
|
|
@ -7,16 +7,16 @@
|
|||
|
||||
import { ElasticsearchClient, SavedObjectsClientContract, Logger } from 'src/core/server';
|
||||
import {
|
||||
CaseClientFactoryArguments,
|
||||
CaseClient,
|
||||
CasesClientFactoryArguments,
|
||||
CasesClient,
|
||||
ConfigureFields,
|
||||
MappingsClient,
|
||||
CaseClientUpdateAlertsStatus,
|
||||
CaseClientAddComment,
|
||||
CaseClientGet,
|
||||
CaseClientGetUserActions,
|
||||
CaseClientGetAlerts,
|
||||
CaseClientPush,
|
||||
CasesClientUpdateAlertsStatus,
|
||||
CasesClientAddComment,
|
||||
CasesClientGet,
|
||||
CasesClientGetUserActions,
|
||||
CasesClientGetAlerts,
|
||||
CasesClientPush,
|
||||
} from './types';
|
||||
import { create } from './cases/create';
|
||||
import { update } from './cases/update';
|
||||
|
@ -41,7 +41,7 @@ import { createCaseError } from '../common/error';
|
|||
/**
|
||||
* This class is a pass through for common case functionality (like creating, get a case).
|
||||
*/
|
||||
export class CaseClientHandler implements CaseClient {
|
||||
export class CasesClientHandler implements CasesClient {
|
||||
private readonly _scopedClusterClient: ElasticsearchClient;
|
||||
private readonly _caseConfigureService: CaseConfigureServiceSetup;
|
||||
private readonly _caseService: CaseServiceSetup;
|
||||
|
@ -52,7 +52,7 @@ export class CaseClientHandler implements CaseClient {
|
|||
private readonly _alertsService: AlertServiceContract;
|
||||
private readonly logger: Logger;
|
||||
|
||||
constructor(clientArgs: CaseClientFactoryArguments) {
|
||||
constructor(clientArgs: CasesClientFactoryArguments) {
|
||||
this._scopedClusterClient = clientArgs.scopedClusterClient;
|
||||
this._caseConfigureService = clientArgs.caseConfigureService;
|
||||
this._caseService = clientArgs.caseService;
|
||||
|
@ -92,7 +92,7 @@ export class CaseClientHandler implements CaseClient {
|
|||
userActionService: this._userActionService,
|
||||
user: this.user,
|
||||
cases,
|
||||
caseClient: this,
|
||||
casesClient: this,
|
||||
logger: this.logger,
|
||||
});
|
||||
} catch (error) {
|
||||
|
@ -108,13 +108,13 @@ export class CaseClientHandler implements CaseClient {
|
|||
}
|
||||
}
|
||||
|
||||
public async addComment({ caseId, comment }: CaseClientAddComment) {
|
||||
public async addComment({ caseId, comment }: CasesClientAddComment) {
|
||||
try {
|
||||
return addComment({
|
||||
savedObjectsClient: this._savedObjectsClient,
|
||||
caseService: this._caseService,
|
||||
userActionService: this._userActionService,
|
||||
caseClient: this,
|
||||
casesClient: this,
|
||||
caseId,
|
||||
comment,
|
||||
user: this.user,
|
||||
|
@ -147,7 +147,7 @@ export class CaseClientHandler implements CaseClient {
|
|||
...args,
|
||||
savedObjectsClient: this._savedObjectsClient,
|
||||
connectorMappingsService: this._connectorMappingsService,
|
||||
caseClient: this,
|
||||
casesClient: this,
|
||||
logger: this.logger,
|
||||
});
|
||||
} catch (error) {
|
||||
|
@ -159,7 +159,7 @@ export class CaseClientHandler implements CaseClient {
|
|||
}
|
||||
}
|
||||
|
||||
public async updateAlertsStatus(args: CaseClientUpdateAlertsStatus) {
|
||||
public async updateAlertsStatus(args: CasesClientUpdateAlertsStatus) {
|
||||
try {
|
||||
return updateAlertsStatus({
|
||||
...args,
|
||||
|
@ -178,7 +178,7 @@ export class CaseClientHandler implements CaseClient {
|
|||
}
|
||||
}
|
||||
|
||||
public async get(args: CaseClientGet) {
|
||||
public async get(args: CasesClientGet) {
|
||||
try {
|
||||
return get({
|
||||
...args,
|
||||
|
@ -192,7 +192,7 @@ export class CaseClientHandler implements CaseClient {
|
|||
}
|
||||
}
|
||||
|
||||
public async getUserActions(args: CaseClientGetUserActions) {
|
||||
public async getUserActions(args: CasesClientGetUserActions) {
|
||||
try {
|
||||
return getUserActions({
|
||||
...args,
|
||||
|
@ -208,7 +208,7 @@ export class CaseClientHandler implements CaseClient {
|
|||
}
|
||||
}
|
||||
|
||||
public async getAlerts(args: CaseClientGetAlerts) {
|
||||
public async getAlerts(args: CasesClientGetAlerts) {
|
||||
try {
|
||||
return getAlerts({
|
||||
...args,
|
||||
|
@ -227,7 +227,7 @@ export class CaseClientHandler implements CaseClient {
|
|||
}
|
||||
}
|
||||
|
||||
public async push(args: CaseClientPush) {
|
||||
public async push(args: CasesClientPush) {
|
||||
try {
|
||||
return push({
|
||||
...args,
|
||||
|
@ -235,7 +235,7 @@ export class CaseClientHandler implements CaseClient {
|
|||
caseService: this._caseService,
|
||||
userActionService: this._userActionService,
|
||||
user: this.user,
|
||||
caseClient: this,
|
||||
casesClient: this,
|
||||
caseConfigureService: this._caseConfigureService,
|
||||
logger: this.logger,
|
||||
});
|
|
@ -13,7 +13,7 @@ import {
|
|||
mockCaseComments,
|
||||
mockCases,
|
||||
} from '../../routes/api/__fixtures__';
|
||||
import { createCaseClientWithMockSavedObjectsClient } from '../mocks';
|
||||
import { createCasesClientWithMockSavedObjectsClient } from '../mocks';
|
||||
|
||||
type AlertComment = CommentType.alert | CommentType.generatedAlert;
|
||||
|
||||
|
@ -33,8 +33,8 @@ describe('addComment', () => {
|
|||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await caseClient.client.addComment({
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await casesClient.client.addComment({
|
||||
caseId: 'mock-id-1',
|
||||
comment: {
|
||||
comment: 'Wow, good luck catching that bad meanie!',
|
||||
|
@ -71,8 +71,8 @@ describe('addComment', () => {
|
|||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await caseClient.client.addComment({
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await casesClient.client.addComment({
|
||||
caseId: 'mock-id-1',
|
||||
comment: {
|
||||
type: CommentType.alert,
|
||||
|
@ -119,8 +119,8 @@ describe('addComment', () => {
|
|||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await caseClient.client.addComment({
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await casesClient.client.addComment({
|
||||
caseId: 'mock-id-1',
|
||||
comment: {
|
||||
comment: 'Wow, good luck catching that bad meanie!',
|
||||
|
@ -142,8 +142,8 @@ describe('addComment', () => {
|
|||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
await caseClient.client.addComment({
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
await casesClient.client.addComment({
|
||||
caseId: 'mock-id-1',
|
||||
comment: {
|
||||
comment: 'Wow, good luck catching that bad meanie!',
|
||||
|
@ -152,7 +152,7 @@ describe('addComment', () => {
|
|||
});
|
||||
|
||||
expect(
|
||||
caseClient.services.userActionService.postUserActions.mock.calls[0][0].actions
|
||||
casesClient.services.userActionService.postUserActions.mock.calls[0][0].actions
|
||||
).toEqual([
|
||||
{
|
||||
attributes: {
|
||||
|
@ -189,11 +189,11 @@ describe('addComment', () => {
|
|||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({
|
||||
savedObjectsClient,
|
||||
badAuth: true,
|
||||
});
|
||||
const res = await caseClient.client.addComment({
|
||||
const res = await casesClient.client.addComment({
|
||||
caseId: 'mock-id-1',
|
||||
comment: {
|
||||
comment: 'Wow, good luck catching that bad meanie!',
|
||||
|
@ -229,14 +229,14 @@ describe('addComment', () => {
|
|||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({
|
||||
savedObjectsClient,
|
||||
badAuth: true,
|
||||
});
|
||||
|
||||
caseClient.client.updateAlertsStatus = jest.fn();
|
||||
casesClient.client.updateAlertsStatus = jest.fn();
|
||||
|
||||
await caseClient.client.addComment({
|
||||
await casesClient.client.addComment({
|
||||
caseId: 'mock-id-1',
|
||||
comment: {
|
||||
type: CommentType.alert,
|
||||
|
@ -249,7 +249,7 @@ describe('addComment', () => {
|
|||
},
|
||||
});
|
||||
|
||||
expect(caseClient.client.updateAlertsStatus).toHaveBeenCalledWith({
|
||||
expect(casesClient.client.updateAlertsStatus).toHaveBeenCalledWith({
|
||||
alerts: [{ id: 'test-alert', index: 'test-index', status: 'open' }],
|
||||
});
|
||||
});
|
||||
|
@ -265,14 +265,14 @@ describe('addComment', () => {
|
|||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({
|
||||
savedObjectsClient,
|
||||
badAuth: true,
|
||||
});
|
||||
|
||||
caseClient.client.updateAlertsStatus = jest.fn();
|
||||
casesClient.client.updateAlertsStatus = jest.fn();
|
||||
|
||||
await caseClient.client.addComment({
|
||||
await casesClient.client.addComment({
|
||||
caseId: 'mock-id-1',
|
||||
comment: {
|
||||
type: CommentType.alert,
|
||||
|
@ -285,7 +285,7 @@ describe('addComment', () => {
|
|||
},
|
||||
});
|
||||
|
||||
expect(caseClient.client.updateAlertsStatus).not.toHaveBeenCalled();
|
||||
expect(casesClient.client.updateAlertsStatus).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -297,8 +297,8 @@ describe('addComment', () => {
|
|||
caseSavedObject: mockCases,
|
||||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return caseClient.client
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return casesClient.client
|
||||
.addComment({
|
||||
caseId: 'mock-id-1',
|
||||
// @ts-expect-error
|
||||
|
@ -319,7 +319,7 @@ describe('addComment', () => {
|
|||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const allRequestAttributes = {
|
||||
type: CommentType.user,
|
||||
comment: 'a comment',
|
||||
|
@ -327,7 +327,7 @@ describe('addComment', () => {
|
|||
|
||||
['comment'].forEach((attribute) => {
|
||||
const requestAttributes = omit(attribute, allRequestAttributes);
|
||||
return caseClient.client
|
||||
return casesClient.client
|
||||
.addComment({
|
||||
caseId: 'mock-id-1',
|
||||
// @ts-expect-error
|
||||
|
@ -351,10 +351,10 @@ describe('addComment', () => {
|
|||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
|
||||
['alertId', 'index'].forEach((attribute) => {
|
||||
return caseClient.client
|
||||
return casesClient.client
|
||||
.addComment({
|
||||
caseId: 'mock-id-1',
|
||||
comment: {
|
||||
|
@ -379,7 +379,7 @@ describe('addComment', () => {
|
|||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const allRequestAttributes = {
|
||||
type: CommentType.alert,
|
||||
index: 'test-index',
|
||||
|
@ -388,7 +388,7 @@ describe('addComment', () => {
|
|||
|
||||
['alertId', 'index'].forEach((attribute) => {
|
||||
const requestAttributes = omit(attribute, allRequestAttributes);
|
||||
return caseClient.client
|
||||
return casesClient.client
|
||||
.addComment({
|
||||
caseId: 'mock-id-1',
|
||||
// @ts-expect-error
|
||||
|
@ -412,10 +412,10 @@ describe('addComment', () => {
|
|||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
|
||||
['comment'].forEach((attribute) => {
|
||||
return caseClient.client
|
||||
return casesClient.client
|
||||
.addComment({
|
||||
caseId: 'mock-id-1',
|
||||
comment: {
|
||||
|
@ -444,8 +444,8 @@ describe('addComment', () => {
|
|||
caseSavedObject: mockCases,
|
||||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return caseClient.client
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return casesClient.client
|
||||
.addComment({
|
||||
caseId: 'not-exists',
|
||||
comment: {
|
||||
|
@ -469,8 +469,8 @@ describe('addComment', () => {
|
|||
caseSavedObject: mockCases,
|
||||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return caseClient.client
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return casesClient.client
|
||||
.addComment({
|
||||
caseId: 'mock-id-1',
|
||||
comment: {
|
||||
|
@ -495,8 +495,8 @@ describe('addComment', () => {
|
|||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return caseClient.client
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
return casesClient.client
|
||||
.addComment({
|
||||
caseId: 'mock-id-4',
|
||||
comment: {
|
||||
|
@ -534,11 +534,11 @@ describe('addComment', () => {
|
|||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({
|
||||
savedObjectsClient,
|
||||
});
|
||||
await expect(
|
||||
caseClient.client.addComment({
|
||||
casesClient.client.addComment({
|
||||
caseId: 'mock-id-4',
|
||||
comment: {
|
||||
// casting because type must be either alert or generatedAlert but type is CommentType
|
||||
|
@ -568,11 +568,11 @@ describe('addComment', () => {
|
|||
caseCommentSavedObject: mockCaseComments,
|
||||
});
|
||||
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({
|
||||
savedObjectsClient,
|
||||
});
|
||||
await expect(
|
||||
caseClient.client.addComment({
|
||||
casesClient.client.addComment({
|
||||
caseId: 'mock-id-1',
|
||||
comment: {
|
||||
// casting because type must be either alert or generatedAlert but type is CommentType
|
|
@ -33,7 +33,7 @@ import {
|
|||
|
||||
import { CaseServiceSetup, CaseUserActionServiceSetup } from '../../services';
|
||||
import { CommentableCase, createAlertUpdateRequest } from '../../common';
|
||||
import { CaseClientHandler } from '..';
|
||||
import { CasesClientHandler } from '..';
|
||||
import { createCaseError } from '../../common/error';
|
||||
import { CASE_COMMENT_SAVED_OBJECT } from '../../saved_object_types';
|
||||
import { MAX_GENERATED_ALERTS_PER_SUB_CASE } from '../../../common/constants';
|
||||
|
@ -95,7 +95,7 @@ async function getSubCase({
|
|||
}
|
||||
|
||||
interface AddCommentFromRuleArgs {
|
||||
caseClient: CaseClientHandler;
|
||||
casesClient: CasesClientHandler;
|
||||
caseId: string;
|
||||
comment: CommentRequestAlertType;
|
||||
savedObjectsClient: SavedObjectsClientContract;
|
||||
|
@ -108,7 +108,7 @@ const addGeneratedAlerts = async ({
|
|||
savedObjectsClient,
|
||||
caseService,
|
||||
userActionService,
|
||||
caseClient,
|
||||
casesClient,
|
||||
caseId,
|
||||
comment,
|
||||
logger,
|
||||
|
@ -177,7 +177,7 @@ const addGeneratedAlerts = async ({
|
|||
comment: query,
|
||||
status: subCase.attributes.status,
|
||||
});
|
||||
await caseClient.updateAlertsStatus({
|
||||
await casesClient.updateAlertsStatus({
|
||||
alerts: alertsToUpdate,
|
||||
});
|
||||
}
|
||||
|
@ -261,7 +261,7 @@ async function getCombinedCase({
|
|||
}
|
||||
|
||||
interface AddCommentArgs {
|
||||
caseClient: CaseClientHandler;
|
||||
casesClient: CasesClientHandler;
|
||||
caseId: string;
|
||||
comment: CommentRequest;
|
||||
savedObjectsClient: SavedObjectsClientContract;
|
||||
|
@ -275,7 +275,7 @@ export const addComment = async ({
|
|||
savedObjectsClient,
|
||||
caseService,
|
||||
userActionService,
|
||||
caseClient,
|
||||
casesClient,
|
||||
caseId,
|
||||
comment,
|
||||
user,
|
||||
|
@ -290,7 +290,7 @@ export const addComment = async ({
|
|||
return addGeneratedAlerts({
|
||||
caseId,
|
||||
comment,
|
||||
caseClient,
|
||||
casesClient,
|
||||
savedObjectsClient,
|
||||
userActionService,
|
||||
caseService,
|
||||
|
@ -329,7 +329,7 @@ export const addComment = async ({
|
|||
status: updatedCase.status,
|
||||
});
|
||||
|
||||
await caseClient.updateAlertsStatus({
|
||||
await casesClient.updateAlertsStatus({
|
||||
alerts: alertsToUpdate,
|
||||
});
|
||||
}
|
|
@ -8,7 +8,7 @@
|
|||
import { ConnectorTypes } from '../../../common/api';
|
||||
|
||||
import { createMockSavedObjectsRepository, mockCaseMappings } from '../../routes/api/__fixtures__';
|
||||
import { createCaseClientWithMockSavedObjectsClient } from '../mocks';
|
||||
import { createCasesClientWithMockSavedObjectsClient } from '../mocks';
|
||||
import { actionsClientMock } from '../../../../actions/server/actions_client.mock';
|
||||
import { actionsErrResponse, mappings, mockGetFieldsResponse } from './mock';
|
||||
describe('get_fields', () => {
|
||||
|
@ -23,8 +23,8 @@ describe('get_fields', () => {
|
|||
const savedObjectsClient = createMockSavedObjectsRepository({
|
||||
caseMappingsSavedObject: mockCaseMappings,
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await caseClient.client.getFields({
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await casesClient.client.getFields({
|
||||
actionsClient: actionsMock,
|
||||
connectorType: ConnectorTypes.jira,
|
||||
connectorId: '123',
|
||||
|
@ -44,8 +44,8 @@ describe('get_fields', () => {
|
|||
const savedObjectsClient = createMockSavedObjectsRepository({
|
||||
caseMappingsSavedObject: mockCaseMappings,
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
await caseClient.client
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
await casesClient.client
|
||||
.getFields({
|
||||
actionsClient: { ...actionsMock, execute: jest.fn().mockReturnValue(actionsErrResponse) },
|
||||
connectorType: ConnectorTypes.jira,
|
|
@ -8,7 +8,7 @@
|
|||
import { ConnectorTypes } from '../../../common/api';
|
||||
|
||||
import { createMockSavedObjectsRepository, mockCaseMappings } from '../../routes/api/__fixtures__';
|
||||
import { createCaseClientWithMockSavedObjectsClient } from '../mocks';
|
||||
import { createCasesClientWithMockSavedObjectsClient } from '../mocks';
|
||||
import { actionsClientMock } from '../../../../actions/server/actions_client.mock';
|
||||
import { mappings, mockGetFieldsResponse } from './mock';
|
||||
|
||||
|
@ -28,8 +28,8 @@ describe('get_mappings', () => {
|
|||
const savedObjectsClient = createMockSavedObjectsRepository({
|
||||
caseMappingsSavedObject: mockCaseMappings,
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await caseClient.client.getMappings({
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await casesClient.client.getMappings({
|
||||
actionsClient: actionsMock,
|
||||
connectorType: ConnectorTypes.jira,
|
||||
connectorId: '123',
|
||||
|
@ -41,8 +41,8 @@ describe('get_mappings', () => {
|
|||
const savedObjectsClient = createMockSavedObjectsRepository({
|
||||
caseMappingsSavedObject: [],
|
||||
});
|
||||
const caseClient = await createCaseClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await caseClient.client.getMappings({
|
||||
const casesClient = await createCasesClientWithMockSavedObjectsClient({ savedObjectsClient });
|
||||
const res = await casesClient.client.getMappings({
|
||||
actionsClient: actionsMock,
|
||||
connectorType: ConnectorTypes.jira,
|
||||
connectorId: '123',
|
|
@ -11,14 +11,14 @@ import { ConnectorMappingsAttributes, ConnectorTypes } from '../../../common/api
|
|||
// eslint-disable-next-line @kbn/eslint/no-restricted-paths
|
||||
import { ACTION_SAVED_OBJECT_TYPE } from '../../../../actions/server/saved_objects';
|
||||
import { ConnectorMappingsServiceSetup } from '../../services';
|
||||
import { CaseClientHandler } from '..';
|
||||
import { CasesClientHandler } from '..';
|
||||
import { createCaseError } from '../../common/error';
|
||||
|
||||
interface GetMappingsArgs {
|
||||
savedObjectsClient: SavedObjectsClientContract;
|
||||
connectorMappingsService: ConnectorMappingsServiceSetup;
|
||||
actionsClient: ActionsClient;
|
||||
caseClient: CaseClientHandler;
|
||||
casesClient: CasesClientHandler;
|
||||
connectorType: string;
|
||||
connectorId: string;
|
||||
logger: Logger;
|
||||
|
@ -28,7 +28,7 @@ export const getMappings = async ({
|
|||
savedObjectsClient,
|
||||
connectorMappingsService,
|
||||
actionsClient,
|
||||
caseClient,
|
||||
casesClient,
|
||||
connectorType,
|
||||
connectorId,
|
||||
logger,
|
||||
|
@ -49,7 +49,7 @@ export const getMappings = async ({
|
|||
let theMapping;
|
||||
// Create connector mappings if there are none
|
||||
if (myConnectorMappings.total === 0) {
|
||||
const res = await caseClient.getFields({
|
||||
const res = await casesClient.getFields({
|
||||
actionsClient,
|
||||
connectorId,
|
||||
connectorType,
|
|
@ -20,8 +20,8 @@ import {
|
|||
} from '../services/mocks';
|
||||
|
||||
jest.mock('./client');
|
||||
import { CaseClientHandler } from './client';
|
||||
import { createExternalCaseClient } from './index';
|
||||
import { CasesClientHandler } from './client';
|
||||
import { createExternalCasesClient } from './index';
|
||||
|
||||
const logger = loggingSystemMock.create().get('case');
|
||||
const esClient = elasticsearchServiceMock.createElasticsearchClient();
|
||||
|
@ -32,9 +32,9 @@ const connectorMappingsService = connectorMappingsServiceMock();
|
|||
const savedObjectsClient = savedObjectsClientMock.create();
|
||||
const userActionService = createUserActionServiceMock();
|
||||
|
||||
describe('createExternalCaseClient()', () => {
|
||||
describe('createExternalCasesClient()', () => {
|
||||
test('it creates the client correctly', async () => {
|
||||
createExternalCaseClient({
|
||||
createExternalCasesClient({
|
||||
scopedClusterClient: esClient,
|
||||
alertsService,
|
||||
caseConfigureService,
|
||||
|
@ -45,6 +45,6 @@ describe('createExternalCaseClient()', () => {
|
|||
userActionService,
|
||||
logger,
|
||||
});
|
||||
expect(CaseClientHandler).toHaveBeenCalledTimes(1);
|
||||
expect(CasesClientHandler).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
});
|
20
x-pack/plugins/cases/server/client/index.ts
Normal file
20
x-pack/plugins/cases/server/client/index.ts
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* 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; you may not use this file except in compliance with the Elastic License
|
||||
* 2.0.
|
||||
*/
|
||||
|
||||
import { CasesClientFactoryArguments, CasesClient } from './types';
|
||||
import { CasesClientHandler } from './client';
|
||||
|
||||
export { CasesClientHandler } from './client';
|
||||
export { CasesClient } from './types';
|
||||
|
||||
/**
|
||||
* Create a CasesClientHandler to external services (other plugins).
|
||||
*/
|
||||
export const createExternalCasesClient = (clientArgs: CasesClientFactoryArguments): CasesClient => {
|
||||
const client = new CasesClientHandler(clientArgs);
|
||||
return client;
|
||||
};
|
|
@ -15,12 +15,12 @@ import {
|
|||
CaseUserActionServiceSetup,
|
||||
ConnectorMappingsService,
|
||||
} from '../services';
|
||||
import { CaseClient } from './types';
|
||||
import { CasesClient } from './types';
|
||||
import { authenticationMock } from '../routes/api/__fixtures__';
|
||||
import { createExternalCaseClient } from '.';
|
||||
import { createExternalCasesClient } from '.';
|
||||
|
||||
export type CaseClientPluginContractMock = jest.Mocked<CaseClient>;
|
||||
export const createExternalCaseClientMock = (): CaseClientPluginContractMock => ({
|
||||
export type CasesClientPluginContractMock = jest.Mocked<CasesClient>;
|
||||
export const createExternalCasesClientMock = (): CasesClientPluginContractMock => ({
|
||||
addComment: jest.fn(),
|
||||
create: jest.fn(),
|
||||
get: jest.fn(),
|
||||
|
@ -33,7 +33,7 @@ export const createExternalCaseClientMock = (): CaseClientPluginContractMock =>
|
|||
updateAlertsStatus: jest.fn(),
|
||||
});
|
||||
|
||||
export const createCaseClientWithMockSavedObjectsClient = async ({
|
||||
export const createCasesClientWithMockSavedObjectsClient = async ({
|
||||
savedObjectsClient,
|
||||
badAuth = false,
|
||||
omitFromContext = [],
|
||||
|
@ -42,7 +42,7 @@ export const createCaseClientWithMockSavedObjectsClient = async ({
|
|||
badAuth?: boolean;
|
||||
omitFromContext?: string[];
|
||||
}): Promise<{
|
||||
client: CaseClient;
|
||||
client: CasesClient;
|
||||
services: {
|
||||
userActionService: jest.Mocked<CaseUserActionServiceSetup>;
|
||||
alertsService: jest.Mocked<AlertServiceContract>;
|
||||
|
@ -71,7 +71,7 @@ export const createCaseClientWithMockSavedObjectsClient = async ({
|
|||
getAlerts: jest.fn(),
|
||||
};
|
||||
|
||||
const caseClient = createExternalCaseClient({
|
||||
const casesClient = createExternalCasesClient({
|
||||
savedObjectsClient,
|
||||
user: auth.getCurrentUser(),
|
||||
caseService,
|
||||
|
@ -83,7 +83,7 @@ export const createCaseClientWithMockSavedObjectsClient = async ({
|
|||
logger: log,
|
||||
});
|
||||
return {
|
||||
client: caseClient,
|
||||
client: casesClient,
|
||||
services: { userActionService, alertsService },
|
||||
esClient,
|
||||
};
|
|
@ -27,34 +27,34 @@ import {
|
|||
AlertServiceContract,
|
||||
} from '../services';
|
||||
import { ConnectorMappingsServiceSetup } from '../services/connector_mappings';
|
||||
import { CaseClientGetAlertsResponse } from './alerts/types';
|
||||
import { CasesClientGetAlertsResponse } from './alerts/types';
|
||||
|
||||
export interface CaseClientGet {
|
||||
export interface CasesClientGet {
|
||||
id: string;
|
||||
includeComments?: boolean;
|
||||
includeSubCaseComments?: boolean;
|
||||
}
|
||||
|
||||
export interface CaseClientPush {
|
||||
export interface CasesClientPush {
|
||||
actionsClient: ActionsClient;
|
||||
caseId: string;
|
||||
connectorId: string;
|
||||
}
|
||||
|
||||
export interface CaseClientAddComment {
|
||||
export interface CasesClientAddComment {
|
||||
caseId: string;
|
||||
comment: CommentRequest;
|
||||
}
|
||||
|
||||
export interface CaseClientUpdateAlertsStatus {
|
||||
export interface CasesClientUpdateAlertsStatus {
|
||||
alerts: UpdateAlertRequest[];
|
||||
}
|
||||
|
||||
export interface CaseClientGetAlerts {
|
||||
export interface CasesClientGetAlerts {
|
||||
alertsInfo: AlertInfo[];
|
||||
}
|
||||
|
||||
export interface CaseClientGetUserActions {
|
||||
export interface CasesClientGetUserActions {
|
||||
caseId: string;
|
||||
subCaseId?: string;
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ export interface MappingsClient {
|
|||
connectorType: string;
|
||||
}
|
||||
|
||||
export interface CaseClientFactoryArguments {
|
||||
export interface CasesClientFactoryArguments {
|
||||
scopedClusterClient: ElasticsearchClient;
|
||||
caseConfigureService: CaseConfigureServiceSetup;
|
||||
caseService: CaseServiceSetup;
|
||||
|
@ -95,17 +95,17 @@ export interface UpdateAlertRequest {
|
|||
/**
|
||||
* This represents the interface that other plugins can access.
|
||||
*/
|
||||
export interface CaseClient {
|
||||
addComment(args: CaseClientAddComment): Promise<CaseResponse>;
|
||||
export interface CasesClient {
|
||||
addComment(args: CasesClientAddComment): Promise<CaseResponse>;
|
||||
create(theCase: CasePostRequest): Promise<CaseResponse>;
|
||||
get(args: CaseClientGet): Promise<CaseResponse>;
|
||||
getAlerts(args: CaseClientGetAlerts): Promise<CaseClientGetAlertsResponse>;
|
||||
get(args: CasesClientGet): Promise<CaseResponse>;
|
||||
getAlerts(args: CasesClientGetAlerts): Promise<CasesClientGetAlertsResponse>;
|
||||
getFields(args: ConfigureFields): Promise<GetFieldsResponse>;
|
||||
getMappings(args: MappingsClient): Promise<ConnectorMappingsAttributes[]>;
|
||||
getUserActions(args: CaseClientGetUserActions): Promise<CaseUserActionsResponse>;
|
||||
push(args: CaseClientPush): Promise<CaseResponse>;
|
||||
getUserActions(args: CasesClientGetUserActions): Promise<CaseUserActionsResponse>;
|
||||
push(args: CasesClientPush): Promise<CaseResponse>;
|
||||
update(args: CasesPatchRequest): Promise<CasesResponse>;
|
||||
updateAlertsStatus(args: CaseClientUpdateAlertsStatus): Promise<void>;
|
||||
updateAlertsStatus(args: CasesClientUpdateAlertsStatus): Promise<void>;
|
||||
}
|
||||
|
||||
export interface MappingsClient {
|
|
@ -28,12 +28,12 @@ import {
|
|||
} from '../../services/mocks';
|
||||
import { CaseActionType, CaseActionTypeExecutorOptions, CaseExecutorParams } from './types';
|
||||
import { getActionType } from '.';
|
||||
import { createExternalCaseClientMock } from '../../client/mocks';
|
||||
import { createExternalCasesClientMock } from '../../client/mocks';
|
||||
|
||||
const mockCaseClient = createExternalCaseClientMock();
|
||||
const mockCasesClient = createExternalCasesClientMock();
|
||||
|
||||
jest.mock('../../client', () => ({
|
||||
createExternalCaseClient: () => mockCaseClient,
|
||||
createExternalCasesClient: () => mockCasesClient,
|
||||
}));
|
||||
|
||||
const services = actionsMock.createServices();
|
||||
|
@ -877,7 +877,7 @@ describe('case connector', () => {
|
|||
},
|
||||
};
|
||||
|
||||
mockCaseClient.create.mockReturnValue(Promise.resolve(createReturn));
|
||||
mockCasesClient.create.mockReturnValue(Promise.resolve(createReturn));
|
||||
|
||||
const actionId = 'some-id';
|
||||
const params: CaseExecutorParams = {
|
||||
|
@ -913,7 +913,7 @@ describe('case connector', () => {
|
|||
const result = await caseActionType.executor(executorOptions);
|
||||
|
||||
expect(result).toEqual({ actionId, status: 'ok', data: createReturn });
|
||||
expect(mockCaseClient.create).toHaveBeenCalledWith({
|
||||
expect(mockCasesClient.create).toHaveBeenCalledWith({
|
||||
...params.subActionParams,
|
||||
connector: {
|
||||
id: 'jira',
|
||||
|
@ -974,7 +974,7 @@ describe('case connector', () => {
|
|||
},
|
||||
];
|
||||
|
||||
mockCaseClient.update.mockReturnValue(Promise.resolve(updateReturn));
|
||||
mockCasesClient.update.mockReturnValue(Promise.resolve(updateReturn));
|
||||
|
||||
const actionId = 'some-id';
|
||||
const params: CaseExecutorParams = {
|
||||
|
@ -1002,7 +1002,7 @@ describe('case connector', () => {
|
|||
const result = await caseActionType.executor(executorOptions);
|
||||
|
||||
expect(result).toEqual({ actionId, status: 'ok', data: updateReturn });
|
||||
expect(mockCaseClient.update).toHaveBeenCalledWith({
|
||||
expect(mockCasesClient.update).toHaveBeenCalledWith({
|
||||
// Null values have been striped out.
|
||||
cases: [
|
||||
{
|
||||
|
@ -1064,7 +1064,7 @@ describe('case connector', () => {
|
|||
},
|
||||
};
|
||||
|
||||
mockCaseClient.addComment.mockReturnValue(Promise.resolve(commentReturn));
|
||||
mockCasesClient.addComment.mockReturnValue(Promise.resolve(commentReturn));
|
||||
|
||||
const actionId = 'some-id';
|
||||
const params: CaseExecutorParams = {
|
||||
|
@ -1089,7 +1089,7 @@ describe('case connector', () => {
|
|||
const result = await caseActionType.executor(executorOptions);
|
||||
|
||||
expect(result).toEqual({ actionId, status: 'ok', data: commentReturn });
|
||||
expect(mockCaseClient.addComment).toHaveBeenCalledWith({
|
||||
expect(mockCasesClient.addComment).toHaveBeenCalledWith({
|
||||
caseId: 'case-id',
|
||||
comment: {
|
||||
comment: 'a comment',
|
|
@ -14,7 +14,7 @@ import {
|
|||
CommentRequest,
|
||||
CommentType,
|
||||
} from '../../../common/api';
|
||||
import { createExternalCaseClient } from '../../client';
|
||||
import { createExternalCasesClient } from '../../client';
|
||||
import { CaseExecutorParamsSchema, CaseConfigurationSchema, CommentSchemaType } from './schema';
|
||||
import {
|
||||
CaseExecutorResponse,
|
||||
|
@ -75,7 +75,7 @@ async function executor(
|
|||
let data: CaseExecutorResponse | null = null;
|
||||
|
||||
const { savedObjectsClient, scopedClusterClient } = services;
|
||||
const caseClient = createExternalCaseClient({
|
||||
const casesClient = createExternalCasesClient({
|
||||
savedObjectsClient,
|
||||
scopedClusterClient,
|
||||
// we might want the user information to be passed as part of the action request
|
||||
|
@ -96,7 +96,7 @@ async function executor(
|
|||
|
||||
if (subAction === 'create') {
|
||||
try {
|
||||
data = await caseClient.create({
|
||||
data = await casesClient.create({
|
||||
...(subActionParams as CasePostRequest),
|
||||
});
|
||||
} catch (error) {
|
||||
|
@ -118,7 +118,7 @@ async function executor(
|
|||
);
|
||||
|
||||
try {
|
||||
data = await caseClient.update({ cases: [updateParamsWithoutNullValues] });
|
||||
data = await casesClient.update({ cases: [updateParamsWithoutNullValues] });
|
||||
} catch (error) {
|
||||
throw createCaseError({
|
||||
message: `Failed to update case using connector id: ${updateParamsWithoutNullValues?.id} version: ${updateParamsWithoutNullValues?.version}: ${error}`,
|
||||
|
@ -132,7 +132,7 @@ async function executor(
|
|||
const { caseId, comment } = subActionParams as ExecutorSubActionAddCommentParams;
|
||||
try {
|
||||
const formattedComment = transformConnectorComment(comment, logger);
|
||||
data = await caseClient.addComment({ caseId, comment: formattedComment });
|
||||
data = await casesClient.addComment({ caseId, comment: formattedComment });
|
||||
} catch (error) {
|
||||
throw createCaseError({
|
||||
message: `Failed to create comment using connector case id: ${caseId}: ${error}`,
|
|
@ -7,6 +7,6 @@
|
|||
|
||||
import { i18n } from '@kbn/i18n';
|
||||
|
||||
export const NAME = i18n.translate('xpack.case.connectors.case.title', {
|
||||
export const NAME = i18n.translate('xpack.cases.connectors.cases.title', {
|
||||
defaultMessage: 'Case',
|
||||
});
|
|
@ -14,7 +14,7 @@ import {
|
|||
// eslint-disable-next-line @kbn/eslint/no-restricted-paths
|
||||
} from '../../../actions/server/types';
|
||||
import { CaseResponse, ConnectorTypes } from '../../common/api';
|
||||
import { CaseClientGetAlertsResponse } from '../client/alerts/types';
|
||||
import { CasesClientGetAlertsResponse } from '../client/alerts/types';
|
||||
import {
|
||||
CaseServiceSetup,
|
||||
CaseConfigureServiceSetup,
|
||||
|
@ -52,7 +52,7 @@ export interface RegisterConnectorsArgs extends GetActionTypeParams {
|
|||
export type FormatterConnectorTypes = Exclude<ConnectorTypes, ConnectorTypes.none>;
|
||||
|
||||
export interface ExternalServiceFormatter<TExternalServiceParams = {}> {
|
||||
format: (theCase: CaseResponse, alerts: CaseClientGetAlertsResponse) => TExternalServiceParams;
|
||||
format: (theCase: CaseResponse, alerts: CasesClientGetAlertsResponse) => TExternalServiceParams;
|
||||
}
|
||||
|
||||
export type ExternalServiceFormatterMapper = {
|
|
@ -34,7 +34,7 @@ import {
|
|||
AlertService,
|
||||
AlertServiceContract,
|
||||
} from './services';
|
||||
import { CaseClientHandler, createExternalCaseClient } from './client';
|
||||
import { CasesClientHandler, createExternalCasesClient } from './client';
|
||||
import { registerConnectors } from './connectors';
|
||||
import type { CasesRequestHandlerContext } from './types';
|
||||
|
||||
|
@ -88,7 +88,7 @@ export class CasePlugin {
|
|||
this.userActionService = await new CaseUserActionService(this.log).setup();
|
||||
this.alertsService = new AlertService();
|
||||
|
||||
core.http.registerRouteHandlerContext<CasesRequestHandlerContext, 'case'>(
|
||||
core.http.registerRouteHandlerContext<CasesRequestHandlerContext, 'cases'>(
|
||||
APP_ID,
|
||||
this.createRouteHandlerContext({
|
||||
core,
|
||||
|
@ -125,12 +125,12 @@ export class CasePlugin {
|
|||
public start(core: CoreStart) {
|
||||
this.log.debug(`Starting Case Workflow`);
|
||||
|
||||
const getCaseClientWithRequestAndContext = async (
|
||||
const getCasesClientWithRequestAndContext = async (
|
||||
context: CasesRequestHandlerContext,
|
||||
request: KibanaRequest
|
||||
) => {
|
||||
const user = await this.caseService!.getUser({ request });
|
||||
return createExternalCaseClient({
|
||||
return createExternalCasesClient({
|
||||
scopedClusterClient: context.core.elasticsearch.client.asCurrentUser,
|
||||
savedObjectsClient: core.savedObjects.getScopedClient(request),
|
||||
user,
|
||||
|
@ -144,7 +144,7 @@ export class CasePlugin {
|
|||
};
|
||||
|
||||
return {
|
||||
getCaseClientWithRequestAndContext,
|
||||
getCasesClientWithRequestAndContext,
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -168,13 +168,13 @@ export class CasePlugin {
|
|||
userActionService: CaseUserActionServiceSetup;
|
||||
alertsService: AlertServiceContract;
|
||||
logger: Logger;
|
||||
}): IContextProvider<CasesRequestHandlerContext, 'case'> => {
|
||||
}): IContextProvider<CasesRequestHandlerContext, 'cases'> => {
|
||||
return async (context, request, response) => {
|
||||
const [{ savedObjects }] = await core.getStartServices();
|
||||
const user = await caseService.getUser({ request });
|
||||
return {
|
||||
getCaseClient: () => {
|
||||
return new CaseClientHandler({
|
||||
getCasesClient: () => {
|
||||
return new CasesClientHandler({
|
||||
scopedClusterClient: context.core.elasticsearch.client.asCurrentUser,
|
||||
savedObjectsClient: savedObjects.getScopedClient(request),
|
||||
caseService,
|
|
@ -18,7 +18,7 @@ export const createRoute = async (
|
|||
const httpService = httpServiceMock.createSetupContract();
|
||||
const router = httpService.createRouter();
|
||||
|
||||
const log = loggingSystemMock.create().get('case');
|
||||
const log = loggingSystemMock.create().get('cases');
|
||||
const auth = badAuth ? authenticationMock.createInvalid() : authenticationMock.create();
|
||||
const caseService = new CaseService(log, auth);
|
||||
const caseConfigureServicePlugin = new CaseConfigureService(log);
|
|
@ -6,7 +6,7 @@
|
|||
*/
|
||||
|
||||
import { elasticsearchServiceMock, loggingSystemMock } from 'src/core/server/mocks';
|
||||
import { createExternalCaseClient } from '../../../client';
|
||||
import { createExternalCasesClient } from '../../../client';
|
||||
import {
|
||||
AlertService,
|
||||
CaseService,
|
||||
|
@ -42,13 +42,13 @@ export const createRouteContext = async (client: any, badAuth = false) => {
|
|||
},
|
||||
},
|
||||
actions: { getActionsClient: () => actionsMock },
|
||||
case: {
|
||||
getCaseClient: () => caseClient,
|
||||
cases: {
|
||||
getCasesClient: () => casesClient,
|
||||
},
|
||||
} as unknown) as CasesRequestHandlerContext;
|
||||
|
||||
const connectorMappingsService = await connectorMappingsServicePlugin.setup();
|
||||
const caseClient = createExternalCaseClient({
|
||||
const casesClient = createExternalCasesClient({
|
||||
savedObjectsClient: client,
|
||||
user: authc.getCurrentUser(),
|
||||
caseService,
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue