From 123240f5e5264affb893b08a91034c37284db589 Mon Sep 17 00:00:00 2001 From: Tim Sullivan Date: Mon, 1 Mar 2021 10:19:13 -0700 Subject: [PATCH] [Reporting] Clean up test helpers and mocks (#92550) * [Reporting] Clean up logger instances and mocks * revert logging changes, just keep test changes * remove fluff * clean up too much logger.clone Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com> --- .../server/config/create_config.test.ts | 110 +++++++++--------- .../export_types/png/execute_job/index.ts | 5 +- .../printable_pdf/execute_job/index.ts | 7 +- .../reporting/server/lib/store/report.test.ts | 6 - .../reporting/server/lib/store/report.ts | 4 - .../reporting/server/lib/store/store.test.ts | 4 - .../server/routes/diagnostic/browser.test.ts | 10 +- .../server/routes/diagnostic/config.test.ts | 8 +- .../routes/diagnostic/screenshot.test.ts | 10 +- .../server/routes/generation.test.ts | 12 +- .../reporting/server/routes/jobs.test.ts | 13 ++- .../create_mock_reportingplugin.ts | 33 +++--- .../server/test_helpers/create_mock_server.ts | 35 ------ .../reporting/server/test_helpers/index.ts | 2 +- x-pack/plugins/reporting/server/types.ts | 4 +- 15 files changed, 114 insertions(+), 149 deletions(-) delete mode 100644 x-pack/plugins/reporting/server/test_helpers/create_mock_server.ts diff --git a/x-pack/plugins/reporting/server/config/create_config.test.ts b/x-pack/plugins/reporting/server/config/create_config.test.ts index a940e62a7225b11..c649fff446a2243 100644 --- a/x-pack/plugins/reporting/server/config/create_config.test.ts +++ b/x-pack/plugins/reporting/server/config/create_config.test.ts @@ -5,36 +5,11 @@ * 2.0. */ -import * as Rx from 'rxjs'; import { CoreSetup, PluginInitializerContext } from 'src/core/server'; +import { coreMock } from 'src/core/server/mocks'; import { LevelLogger } from '../lib'; +import { createMockConfigSchema } from '../test_helpers'; import { createConfig$ } from './create_config'; -import { ReportingConfigType } from './schema'; - -interface KibanaServer { - hostname?: string; - port?: number; - protocol?: string; -} - -const makeMockInitContext = (config: { - capture?: Partial; - encryptionKey?: string; - kibanaServer: Partial; -}): PluginInitializerContext => - ({ - config: { - create: () => - Rx.of({ - ...config, - capture: config.capture || { browser: { chromium: { disableSandbox: false } } }, - kibanaServer: config.kibanaServer || {}, - }), - }, - } as PluginInitializerContext); - -const makeMockCoreSetup = (serverInfo: KibanaServer): CoreSetup => - ({ http: { getServerInfo: () => serverInfo } } as any); describe('Reporting server createConfig$', () => { let mockCoreSetup: CoreSetup; @@ -42,10 +17,10 @@ describe('Reporting server createConfig$', () => { let mockLogger: LevelLogger; beforeEach(() => { - mockCoreSetup = makeMockCoreSetup({ hostname: 'kibanaHost', port: 5601, protocol: 'http' }); - mockInitContext = makeMockInitContext({ - kibanaServer: {}, - }); + mockCoreSetup = coreMock.createSetup(); + mockInitContext = coreMock.createPluginInitializerContext( + createMockConfigSchema({ kibanaServer: {} }) + ); mockLogger = ({ warn: jest.fn(), debug: jest.fn(), @@ -58,14 +33,18 @@ describe('Reporting server createConfig$', () => { }); it('creates random encryption key and default config using host, protocol, and port from server info', async () => { + mockInitContext = coreMock.createPluginInitializerContext({ + ...createMockConfigSchema({ kibanaServer: {} }), + encryptionKey: undefined, + }); const mockConfig$: any = mockInitContext.config.create(); const result = await createConfig$(mockCoreSetup, mockConfig$, mockLogger).toPromise(); expect(result.encryptionKey).toMatch(/\S{32,}/); // random 32 characters expect(result.kibanaServer).toMatchInlineSnapshot(` Object { - "hostname": "kibanaHost", - "port": 5601, + "hostname": "localhost", + "port": 80, "protocol": "http", } `); @@ -76,10 +55,11 @@ describe('Reporting server createConfig$', () => { }); it('uses the user-provided encryption key', async () => { - mockInitContext = makeMockInitContext({ - encryptionKey: 'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii', - kibanaServer: {}, - }); + mockInitContext = coreMock.createPluginInitializerContext( + createMockConfigSchema({ + encryptionKey: 'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii', + }) + ); const mockConfig$: any = mockInitContext.config.create(); const result = await createConfig$(mockCoreSetup, mockConfig$, mockLogger).toPromise(); expect(result.encryptionKey).toMatch('iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii'); @@ -87,14 +67,16 @@ describe('Reporting server createConfig$', () => { }); it('uses the user-provided encryption key, reporting kibanaServer settings to override server info', async () => { - mockInitContext = makeMockInitContext({ - encryptionKey: 'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii', - kibanaServer: { - hostname: 'reportingHost', - port: 5677, - protocol: 'httpsa', - }, - }); + mockInitContext = coreMock.createPluginInitializerContext( + createMockConfigSchema({ + encryptionKey: 'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii', + kibanaServer: { + hostname: 'reportingHost', + port: 5677, + protocol: 'httpsa', + }, + }) + ); const mockConfig$: any = mockInitContext.config.create(); const result = await createConfig$(mockCoreSetup, mockConfig$, mockLogger).toPromise(); @@ -103,26 +85,36 @@ describe('Reporting server createConfig$', () => { "capture": Object { "browser": Object { "chromium": Object { - "disableSandbox": false, + "disableSandbox": true, }, }, }, + "csv": Object {}, "encryptionKey": "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii", + "index": ".reporting", "kibanaServer": Object { "hostname": "reportingHost", "port": 5677, "protocol": "httpsa", }, + "queue": Object { + "indexInterval": "week", + "pollEnabled": true, + "pollInterval": 3000, + "timeout": 120000, + }, } `); expect((mockLogger.warn as any).mock.calls.length).toBe(0); }); it('uses user-provided disableSandbox: false', async () => { - mockInitContext = makeMockInitContext({ - encryptionKey: '888888888888888888888888888888888', - capture: { browser: { chromium: { disableSandbox: false } } }, - } as ReportingConfigType); + mockInitContext = coreMock.createPluginInitializerContext( + createMockConfigSchema({ + encryptionKey: '888888888888888888888888888888888', + capture: { browser: { chromium: { disableSandbox: false } } }, + }) + ); const mockConfig$: any = mockInitContext.config.create(); const result = await createConfig$(mockCoreSetup, mockConfig$, mockLogger).toPromise(); @@ -131,10 +123,12 @@ describe('Reporting server createConfig$', () => { }); it('uses user-provided disableSandbox: true', async () => { - mockInitContext = makeMockInitContext({ - encryptionKey: '888888888888888888888888888888888', - capture: { browser: { chromium: { disableSandbox: true } } }, - } as ReportingConfigType); + mockInitContext = coreMock.createPluginInitializerContext( + createMockConfigSchema({ + encryptionKey: '888888888888888888888888888888888', + capture: { browser: { chromium: { disableSandbox: true } } }, + }) + ); const mockConfig$: any = mockInitContext.config.create(); const result = await createConfig$(mockCoreSetup, mockConfig$, mockLogger).toPromise(); @@ -143,9 +137,11 @@ describe('Reporting server createConfig$', () => { }); it('provides a default for disableSandbox', async () => { - mockInitContext = makeMockInitContext({ - encryptionKey: '888888888888888888888888888888888', - } as ReportingConfigType); + mockInitContext = coreMock.createPluginInitializerContext( + createMockConfigSchema({ + encryptionKey: '888888888888888888888888888888888', + }) + ); const mockConfig$: any = mockInitContext.config.create(); const result = await createConfig$(mockCoreSetup, mockConfig$, mockLogger).toPromise(); diff --git a/x-pack/plugins/reporting/server/export_types/png/execute_job/index.ts b/x-pack/plugins/reporting/server/export_types/png/execute_job/index.ts index 4f439f494015d82..c65e7bdf7a5caed 100644 --- a/x-pack/plugins/reporting/server/export_types/png/execute_job/index.ts +++ b/x-pack/plugins/reporting/server/export_types/png/execute_job/index.ts @@ -25,7 +25,6 @@ export const runTaskFnFactory: RunTaskFnFactory< > = function executeJobFactoryFn(reporting, parentLogger) { const config = reporting.getConfig(); const encryptionKey = config.get('encryptionKey'); - const logger = parentLogger.clone([PNG_JOB_TYPE, 'execute']); return async function runTask(jobId, job, cancellationToken) { const apmTrans = apm.startTransaction('reporting execute_job png', 'reporting'); @@ -33,9 +32,9 @@ export const runTaskFnFactory: RunTaskFnFactory< let apmGeneratePng: { end: () => void } | null | undefined; const generatePngObservable = await generatePngObservableFactory(reporting); - const jobLogger = logger.clone([jobId]); + const jobLogger = parentLogger.clone([PNG_JOB_TYPE, 'execute', jobId]); const process$: Rx.Observable = Rx.of(1).pipe( - mergeMap(() => decryptJobHeaders(encryptionKey, job.headers, logger)), + mergeMap(() => decryptJobHeaders(encryptionKey, job.headers, jobLogger)), map((decryptedHeaders) => omitBlockedHeaders(decryptedHeaders)), map((filteredHeaders) => getConditionalHeaders(config, filteredHeaders)), mergeMap((conditionalHeaders) => { diff --git a/x-pack/plugins/reporting/server/export_types/printable_pdf/execute_job/index.ts b/x-pack/plugins/reporting/server/export_types/printable_pdf/execute_job/index.ts index 2c4ad288e681b08..8e215f87b52e0b8 100644 --- a/x-pack/plugins/reporting/server/export_types/printable_pdf/execute_job/index.ts +++ b/x-pack/plugins/reporting/server/export_types/printable_pdf/execute_job/index.ts @@ -28,20 +28,19 @@ export const runTaskFnFactory: RunTaskFnFactory< const encryptionKey = config.get('encryptionKey'); return async function runTask(jobId, job, cancellationToken) { - const logger = parentLogger.clone([PDF_JOB_TYPE, 'execute-job', jobId]); + const jobLogger = parentLogger.clone([PDF_JOB_TYPE, 'execute-job', jobId]); const apmTrans = apm.startTransaction('reporting execute_job pdf', 'reporting'); const apmGetAssets = apmTrans?.startSpan('get_assets', 'setup'); let apmGeneratePdf: { end: () => void } | null | undefined; const generatePdfObservable = await generatePdfObservableFactory(reporting); - const jobLogger = logger.clone([jobId]); const process$: Rx.Observable = Rx.of(1).pipe( - mergeMap(() => decryptJobHeaders(encryptionKey, job.headers, logger)), + mergeMap(() => decryptJobHeaders(encryptionKey, job.headers, jobLogger)), map((decryptedHeaders) => omitBlockedHeaders(decryptedHeaders)), map((filteredHeaders) => getConditionalHeaders(config, filteredHeaders)), mergeMap((conditionalHeaders) => - getCustomLogo(reporting, conditionalHeaders, job.spaceId, logger) + getCustomLogo(reporting, conditionalHeaders, job.spaceId, jobLogger) ), mergeMap(({ logo, conditionalHeaders }) => { const urls = getFullUrls(config, job); diff --git a/x-pack/plugins/reporting/server/lib/store/report.test.ts b/x-pack/plugins/reporting/server/lib/store/report.test.ts index 1d58b6f36f8261b..4c5cd755f71c459 100644 --- a/x-pack/plugins/reporting/server/lib/store/report.test.ts +++ b/x-pack/plugins/reporting/server/lib/store/report.test.ts @@ -18,7 +18,6 @@ describe('Class Report', () => { payload: { headers: 'payload_test_field', objectType: 'testOt', title: 'cool report' }, meta: { objectType: 'test' }, timeout: 30000, - priority: 1, }); expect(report.toEsDocsJSON()).toMatchObject({ @@ -32,7 +31,6 @@ describe('Class Report', () => { max_attempts: 50, meta: { objectType: 'test' }, payload: { headers: 'payload_test_field', objectType: 'testOt' }, - priority: 1, started_at: undefined, status: 'pending', timeout: 30000, @@ -47,7 +45,6 @@ describe('Class Report', () => { max_attempts: 50, payload: { headers: 'payload_test_field', objectType: 'testOt' }, meta: { objectType: 'test' }, - priority: 1, status: 'pending', timeout: 30000, }); @@ -65,7 +62,6 @@ describe('Class Report', () => { payload: { headers: 'payload_test_field', objectType: 'testOt', title: 'hot report' }, meta: { objectType: 'stange' }, timeout: 30000, - priority: 1, }); const metadata = { @@ -88,7 +84,6 @@ describe('Class Report', () => { max_attempts: 50, meta: { objectType: 'stange' }, payload: { objectType: 'testOt' }, - priority: 1, started_at: undefined, status: 'pending', timeout: 30000, @@ -105,7 +100,6 @@ describe('Class Report', () => { max_attempts: 50, meta: { objectType: 'stange' }, payload: { headers: 'payload_test_field', objectType: 'testOt' }, - priority: 1, started_at: undefined, status: 'pending', timeout: 30000, diff --git a/x-pack/plugins/reporting/server/lib/store/report.ts b/x-pack/plugins/reporting/server/lib/store/report.ts index 0f18ae3b4eac7ec..735ba274322cd24 100644 --- a/x-pack/plugins/reporting/server/lib/store/report.ts +++ b/x-pack/plugins/reporting/server/lib/store/report.ts @@ -36,7 +36,6 @@ export class Report implements Partial { public readonly started_at?: ReportSource['started_at']; public readonly completed_at?: ReportSource['completed_at']; public readonly process_expiration?: ReportSource['process_expiration']; - public readonly priority?: ReportSource['priority']; public readonly timeout?: ReportSource['timeout']; /* @@ -63,7 +62,6 @@ export class Report implements Partial { this.created_by = opts.created_by || false; this.meta = opts.meta || { objectType: 'unknown' }; this.browser_type = opts.browser_type; - this.priority = opts.priority; this.status = opts.status || JOB_STATUSES.PENDING; this.output = opts.output || null; @@ -98,7 +96,6 @@ export class Report implements Partial { meta: this.meta, timeout: this.timeout, max_attempts: this.max_attempts, - priority: this.priority, browser_type: this.browser_type, status: this.status, attempts: this.attempts, @@ -124,7 +121,6 @@ export class Report implements Partial { meta: this.meta, timeout: this.timeout, max_attempts: this.max_attempts, - priority: this.priority, browser_type: this.browser_type, status: this.status, attempts: this.attempts, diff --git a/x-pack/plugins/reporting/server/lib/store/store.test.ts b/x-pack/plugins/reporting/server/lib/store/store.test.ts index e86b17d4f75ea41..4e8e113fb069830 100644 --- a/x-pack/plugins/reporting/server/lib/store/store.test.ts +++ b/x-pack/plugins/reporting/server/lib/store/store.test.ts @@ -203,7 +203,6 @@ describe('ReportingStore', () => { browserTimezone: 'ABC', }, timeout: 30000, - priority: 1, }); await store.setReportClaimed(report, { testDoc: 'test' } as any); @@ -244,7 +243,6 @@ describe('ReportingStore', () => { browserTimezone: 'BCD', }, timeout: 30000, - priority: 1, }); await store.setReportFailed(report, { errors: 'yes' } as any); @@ -285,7 +283,6 @@ describe('ReportingStore', () => { browserTimezone: 'CDE', }, timeout: 30000, - priority: 1, }); await store.setReportCompleted(report, { certainly_completed: 'yes' } as any); @@ -326,7 +323,6 @@ describe('ReportingStore', () => { browserTimezone: 'utc', }, timeout: 30000, - priority: 1, }); await store.setReportCompleted(report, { diff --git a/x-pack/plugins/reporting/server/routes/diagnostic/browser.test.ts b/x-pack/plugins/reporting/server/routes/diagnostic/browser.test.ts index 1267a7a9a69d744..d80be2d7f0f4292 100644 --- a/x-pack/plugins/reporting/server/routes/diagnostic/browser.test.ts +++ b/x-pack/plugins/reporting/server/routes/diagnostic/browser.test.ts @@ -11,7 +11,11 @@ import { createInterface } from 'readline'; import { setupServer } from 'src/core/server/test_utils'; import supertest from 'supertest'; import { ReportingCore } from '../..'; -import { createMockLevelLogger, createMockReportingCore } from '../../test_helpers'; +import { + createMockLevelLogger, + createMockPluginSetup, + createMockReportingCore, +} from '../../test_helpers'; import { registerDiagnoseBrowser } from './browser'; import type { ReportingRequestHandlerContext } from '../../types'; @@ -55,12 +59,12 @@ describe('POST /diagnose/browser', () => { () => ({}) ); - const mockSetupDeps = ({ + const mockSetupDeps = createMockPluginSetup({ elasticsearch: { legacy: { client: { callAsInternalUser: jest.fn() } }, }, router: httpSetup.createRouter(''), - } as unknown) as any; + }); core = await createMockReportingCore(config, mockSetupDeps); diff --git a/x-pack/plugins/reporting/server/routes/diagnostic/config.test.ts b/x-pack/plugins/reporting/server/routes/diagnostic/config.test.ts index 3f95dd86d2af5a5..f35d8f5910da030 100644 --- a/x-pack/plugins/reporting/server/routes/diagnostic/config.test.ts +++ b/x-pack/plugins/reporting/server/routes/diagnostic/config.test.ts @@ -9,7 +9,11 @@ import { UnwrapPromise } from '@kbn/utility-types'; import { setupServer } from 'src/core/server/test_utils'; import supertest from 'supertest'; import { ReportingCore } from '../..'; -import { createMockReportingCore, createMockLevelLogger } from '../../test_helpers'; +import { + createMockReportingCore, + createMockLevelLogger, + createMockPluginSetup, +} from '../../test_helpers'; import { registerDiagnoseConfig } from './config'; import type { ReportingRequestHandlerContext } from '../../types'; @@ -33,7 +37,7 @@ describe('POST /diagnose/config', () => { () => ({}) ); - mockSetupDeps = ({ + mockSetupDeps = createMockPluginSetup({ elasticsearch: { legacy: { client: { callAsInternalUser: jest.fn() } }, }, diff --git a/x-pack/plugins/reporting/server/routes/diagnostic/screenshot.test.ts b/x-pack/plugins/reporting/server/routes/diagnostic/screenshot.test.ts index 754a116af79991d..6c723764d9f0add 100644 --- a/x-pack/plugins/reporting/server/routes/diagnostic/screenshot.test.ts +++ b/x-pack/plugins/reporting/server/routes/diagnostic/screenshot.test.ts @@ -9,7 +9,11 @@ import { UnwrapPromise } from '@kbn/utility-types'; import { setupServer } from 'src/core/server/test_utils'; import supertest from 'supertest'; import { ReportingCore } from '../..'; -import { createMockReportingCore, createMockLevelLogger } from '../../test_helpers'; +import { + createMockReportingCore, + createMockLevelLogger, + createMockPluginSetup, +} from '../../test_helpers'; import { registerDiagnoseScreenshot } from './screenshot'; import type { ReportingRequestHandlerContext } from '../../types'; @@ -52,12 +56,12 @@ describe('POST /diagnose/screenshot', () => { () => ({}) ); - const mockSetupDeps = ({ + const mockSetupDeps = createMockPluginSetup({ elasticsearch: { legacy: { client: { callAsInternalUser: jest.fn() } }, }, router: httpSetup.createRouter(''), - } as unknown) as any; + }); core = await createMockReportingCore(config, mockSetupDeps); }); diff --git a/x-pack/plugins/reporting/server/routes/generation.test.ts b/x-pack/plugins/reporting/server/routes/generation.test.ts index 70a5e2475ab926d..f6966a3b28ea9d0 100644 --- a/x-pack/plugins/reporting/server/routes/generation.test.ts +++ b/x-pack/plugins/reporting/server/routes/generation.test.ts @@ -12,7 +12,8 @@ import { setupServer } from 'src/core/server/test_utils'; import supertest from 'supertest'; import { ReportingCore } from '..'; import { ExportTypesRegistry } from '../lib/export_types_registry'; -import { createMockReportingCore, createMockLevelLogger } from '../test_helpers'; +import { createMockLevelLogger, createMockReportingCore } from '../test_helpers'; +import { createMockPluginSetup } from '../test_helpers/create_mock_reportingplugin'; import { registerJobGenerationRoutes } from './generation'; import type { ReportingRequestHandlerContext } from '../types'; @@ -37,7 +38,7 @@ describe('POST /api/reporting/generate', () => { case 'index': return '.reporting'; case 'queue.pollEnabled': - return false; + return true; default: return; } @@ -56,7 +57,7 @@ describe('POST /api/reporting/generate', () => { callClusterStub = sinon.stub().resolves({}); - const mockSetupDeps = ({ + const mockSetupDeps = createMockPluginSetup({ elasticsearch: { legacy: { client: { callAsInternalUser: callClusterStub } }, }, @@ -68,7 +69,7 @@ describe('POST /api/reporting/generate', () => { }, router: httpSetup.createRouter(''), licensing: { license$: of({ isActive: true, isAvailable: true, type: 'gold' }) }, - } as unknown) as any; + }); core = await createMockReportingCore(config, mockSetupDeps); @@ -157,7 +158,6 @@ describe('POST /api/reporting/generate', () => { it(`returns 200 if job handler doesn't error`, async () => { callClusterStub.withArgs('index').resolves({ _id: 'foo', _index: 'foo-index' }); - registerJobGenerationRoutes(core, mockLogger); await server.start(); @@ -179,9 +179,7 @@ describe('POST /api/reporting/generate', () => { test1: 'yes', }, }, - priority: 10, status: 'pending', - timeout: 10000, }, path: 'undefined/api/reporting/jobs/download/foo', }); diff --git a/x-pack/plugins/reporting/server/routes/jobs.test.ts b/x-pack/plugins/reporting/server/routes/jobs.test.ts index 847d27d44ea72d8..706a8d5dad7dd7d 100644 --- a/x-pack/plugins/reporting/server/routes/jobs.test.ts +++ b/x-pack/plugins/reporting/server/routes/jobs.test.ts @@ -12,7 +12,12 @@ import supertest from 'supertest'; import { ReportingCore } from '..'; import { ReportingInternalSetup } from '../core'; import { ExportTypesRegistry } from '../lib/export_types_registry'; -import { createMockConfig, createMockConfigSchema, createMockReportingCore } from '../test_helpers'; +import { + createMockConfig, + createMockConfigSchema, + createMockPluginSetup, + createMockReportingCore, +} from '../test_helpers'; import { ExportTypeDefinition, ReportingRequestHandlerContext } from '../types'; import { registerJobInfoRoutes } from './jobs'; @@ -41,7 +46,7 @@ describe('GET /api/reporting/jobs/download', () => { 'reporting', () => ({}) ); - core = await createMockReportingCore(config, ({ + const mockSetupDeps = createMockPluginSetup({ elasticsearch: { legacy: { client: { callAsInternalUser: jest.fn() } }, }, @@ -65,7 +70,9 @@ describe('GET /api/reporting/jobs/download', () => { type: 'gold', }), }, - } as unknown) as ReportingInternalSetup); + }); + + core = await createMockReportingCore(config, mockSetupDeps); // @ts-ignore exportTypesRegistry = new ExportTypesRegistry(); exportTypesRegistry.register({ diff --git a/x-pack/plugins/reporting/server/test_helpers/create_mock_reportingplugin.ts b/x-pack/plugins/reporting/server/test_helpers/create_mock_reportingplugin.ts index a8ea25492f33ffc..5341db12f65486d 100644 --- a/x-pack/plugins/reporting/server/test_helpers/create_mock_reportingplugin.ts +++ b/x-pack/plugins/reporting/server/test_helpers/create_mock_reportingplugin.ts @@ -12,7 +12,7 @@ jest.mock('../lib/create_queue'); import _ from 'lodash'; import * as Rx from 'rxjs'; -import { elasticsearchServiceMock } from 'src/core/server/mocks'; +import { coreMock, elasticsearchServiceMock } from 'src/core/server/mocks'; import { fieldFormats } from 'src/plugins/data/server'; // eslint-disable-next-line @kbn/eslint/no-restricted-paths import { dataPluginMock } from 'src/plugins/data/server/mocks'; @@ -27,7 +27,6 @@ import { ReportingConfigType } from '../config'; import { ReportingInternalSetup, ReportingInternalStart } from '../core'; import { ReportingStore } from '../lib'; import { setFieldFormats } from '../services'; -import { ReportingStartDeps } from '../types'; import { createMockLevelLogger } from './create_mock_levellogger'; (initializeBrowserDriverFactory as jest.Mock< @@ -36,7 +35,7 @@ import { createMockLevelLogger } from './create_mock_levellogger'; (chromium as any).createDriverFactory.mockImplementation(() => ({})); -export const createMockReportingSetup = (setupMock?: any): ReportingInternalSetup => { +export const createMockPluginSetup = (setupMock?: any): ReportingInternalSetup => { return { features: featuresPluginMock.createSetup(), elasticsearch: setupMock.elasticsearch || { legacy: { client: {} } }, @@ -44,6 +43,7 @@ export const createMockReportingSetup = (setupMock?: any): ReportingInternalSetu router: setupMock.router, security: setupMock.security, licensing: { license$: Rx.of({ isAvailable: true, isActive: true, type: 'basic' }) } as any, + ...setupMock, }; }; @@ -51,7 +51,7 @@ const logger = createMockLevelLogger(); const createMockReportingStore = () => ({} as ReportingStore); -export const createMockReportingStart = ( +export const createMockPluginStart = ( mockReportingCore: ReportingCore | undefined, startMock?: any ): ReportingInternalStart => { @@ -67,6 +67,7 @@ export const createMockReportingStart = ( uiSettings: startMock.uiSettings || { asScopedToClient: () => ({ get: jest.fn() }) }, data: startMock.data || dataPluginMock.createStartContract(), store, + ...startMock, }; }; @@ -82,7 +83,7 @@ interface ReportingConfigTestType { export const createMockConfigSchema = ( overrides: Partial = {} -): ReportingConfigTestType => { +): ReportingConfigType => { // deeply merge the defaults and the provided partial schema return { index: '.reporting', @@ -102,13 +103,16 @@ export const createMockConfigSchema = ( ...overrides.capture, }, queue: { + indexInterval: 'week', + pollEnabled: true, + pollInterval: 3000, timeout: 120000, ...overrides.queue, }, csv: { ...overrides.csv, }, - }; + } as any; }; export const createMockConfig = ( @@ -123,10 +127,6 @@ export const createMockConfig = ( }; }; -export const createMockStartDeps = (startMock?: any): ReportingStartDeps => ({ - data: startMock.data, -}); - export const createMockReportingCore = async ( config: ReportingConfig, setupDepsMock: ReportingInternalSetup | undefined = undefined, @@ -139,20 +139,23 @@ export const createMockReportingCore = async ( } as unknown) as ReportingCore; if (!setupDepsMock) { - setupDepsMock = createMockReportingSetup({}); + setupDepsMock = createMockPluginSetup({}); } if (!startDepsMock) { - startDepsMock = createMockReportingStart(mockReportingCore, {}); + startDepsMock = createMockPluginStart(mockReportingCore, {}); } - config = config || {}; + const context = coreMock.createPluginInitializerContext(createMockConfigSchema()); const core = new ReportingCore(logger); + core.setConfig(config); core.pluginSetup(setupDepsMock); - core.setConfig(config); await core.pluginSetsUp(); - core.pluginStart(startDepsMock); + if (!startDepsMock) { + startDepsMock = createMockPluginStart(core, context); + } + await core.pluginStart(startDepsMock); await core.pluginStartsUp(); setFieldFormats({ diff --git a/x-pack/plugins/reporting/server/test_helpers/create_mock_server.ts b/x-pack/plugins/reporting/server/test_helpers/create_mock_server.ts deleted file mode 100644 index 4805bf07a76a2c2..000000000000000 --- a/x-pack/plugins/reporting/server/test_helpers/create_mock_server.ts +++ /dev/null @@ -1,35 +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. - */ - -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { createHttpServer, createCoreContext } from 'src/core/server/http/test_utils'; -import { coreMock } from 'src/core/server/mocks'; -// eslint-disable-next-line @kbn/eslint/no-restricted-paths -import { ContextService } from 'src/core/server/context/context_service'; - -const coreId = Symbol('reporting'); - -export const createMockServer = async () => { - const coreContext = createCoreContext({ coreId }); - const contextService = new ContextService(coreContext); - - const server = createHttpServer(coreContext); - const httpSetup = await server.setup({ - context: contextService.setup({ pluginDependencies: new Map() }), - }); - const handlerContext = coreMock.createRequestHandlerContext(); - - httpSetup.registerRouteHandlerContext(coreId, 'core', async (ctx, req, res) => { - return handlerContext; - }); - - return { - server, - httpSetup, - handlerContext, - }; -}; diff --git a/x-pack/plugins/reporting/server/test_helpers/index.ts b/x-pack/plugins/reporting/server/test_helpers/index.ts index edf52fe5c2126a5..fe8c92d928af57a 100644 --- a/x-pack/plugins/reporting/server/test_helpers/index.ts +++ b/x-pack/plugins/reporting/server/test_helpers/index.ts @@ -11,6 +11,6 @@ export { createMockLevelLogger } from './create_mock_levellogger'; export { createMockConfig, createMockConfigSchema, + createMockPluginSetup, createMockReportingCore, } from './create_mock_reportingplugin'; -export { createMockServer } from './create_mock_server'; diff --git a/x-pack/plugins/reporting/server/types.ts b/x-pack/plugins/reporting/server/types.ts index fd7de0b0eaec73c..f84d2fbdf4712cc 100644 --- a/x-pack/plugins/reporting/server/types.ts +++ b/x-pack/plugins/reporting/server/types.ts @@ -14,11 +14,11 @@ import { LicensingPluginSetup } from '../../licensing/server'; import { AuthenticatedUser, SecurityPluginSetup } from '../../security/server'; import { SpacesPluginSetup } from '../../spaces/server'; import { CancellationToken } from '../common'; -import { BaseParams } from '../common/types'; +import { BaseParams, TaskRunResult } from '../common/types'; import { ReportingConfigType } from './config'; import { ReportingCore } from './core'; import { LevelLogger } from './lib'; -import { ReportTaskParams, TaskRunResult } from './lib/tasks'; +import { ReportTaskParams } from './lib/tasks'; /* * Plugin Contract