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