Skip to content

Commit 92da8c0

Browse files
[7.x] [Reporting/New Platform] Provide async access to server-side dependencies (#56824) (#57727)
* [Reporting/New Platform] Provide async access to server-side dependencies (#56824) * [Reporting/New Platform] Provide async access to server-side * consistent name for reportingPlugin * Prettier changes * simplify reporting usage collector setup * add more tests * extract internals access to separate core class * fix tests * fix imports for jest and build Co-authored-by: Elastic Machine <[email protected]> * fix lint * fix ts import Co-authored-by: Elastic Machine <[email protected]>
1 parent d7a0074 commit 92da8c0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+1118
-749
lines changed

x-pack/legacy/plugins/reporting/export_types/common/execute_job/decrypt_job_headers.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
*/
66

77
import { cryptoFactory } from '../../../server/lib/crypto';
8-
import { createMockServer } from '../../../test_helpers/create_mock_server';
8+
import { createMockServer } from '../../../test_helpers';
99
import { Logger } from '../../../types';
1010
import { decryptJobHeaders } from './decrypt_job_headers';
1111

x-pack/legacy/plugins/reporting/export_types/common/execute_job/get_conditional_headers.test.ts

Lines changed: 41 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@
44
* you may not use this file except in compliance with the Elastic License.
55
*/
66

7-
import { createMockServer } from '../../../test_helpers/create_mock_server';
8-
import { getConditionalHeaders, getCustomLogo } from './index';
7+
import { createMockReportingCore, createMockServer } from '../../../test_helpers';
8+
import { ReportingCore } from '../../../server';
99
import { JobDocPayload } from '../../../types';
1010
import { JobDocPayloadPDF } from '../../printable_pdf/types';
11+
import { getConditionalHeaders, getCustomLogo } from './index';
1112

13+
let mockReportingPlugin: ReportingCore;
1214
let mockServer: any;
13-
beforeEach(() => {
15+
beforeEach(async () => {
16+
mockReportingPlugin = await createMockReportingCore();
1417
mockServer = createMockServer('');
1518
});
1619

@@ -148,56 +151,76 @@ describe('conditions', () => {
148151
});
149152

150153
test('uses basePath from job when creating saved object service', async () => {
154+
const mockGetSavedObjectsClient = jest.fn();
155+
mockReportingPlugin.getSavedObjectsClient = mockGetSavedObjectsClient;
156+
151157
const permittedHeaders = {
152158
foo: 'bar',
153159
baz: 'quix',
154160
};
155-
156161
const conditionalHeaders = await getConditionalHeaders({
157162
job: {} as JobDocPayload<any>,
158163
filteredHeaders: permittedHeaders,
159164
server: mockServer,
160165
});
161-
162-
const logo = 'custom-logo';
163-
mockServer.uiSettingsServiceFactory().get.mockReturnValue(logo);
164-
165166
const jobBasePath = '/sbp/s/marketing';
166167
await getCustomLogo({
168+
reporting: mockReportingPlugin,
167169
job: { basePath: jobBasePath } as JobDocPayloadPDF,
168170
conditionalHeaders,
169171
server: mockServer,
170172
});
171173

172-
expect(mockServer.savedObjects.getScopedSavedObjectsClient.mock.calls[0][0].getBasePath()).toBe(
173-
jobBasePath
174-
);
174+
const getBasePath = mockGetSavedObjectsClient.mock.calls[0][0].getBasePath;
175+
expect(getBasePath()).toBe(jobBasePath);
175176
});
176177

177178
test(`uses basePath from server if job doesn't have a basePath when creating saved object service`, async () => {
179+
const mockGetSavedObjectsClient = jest.fn();
180+
mockReportingPlugin.getSavedObjectsClient = mockGetSavedObjectsClient;
181+
178182
const permittedHeaders = {
179183
foo: 'bar',
180184
baz: 'quix',
181185
};
182-
183186
const conditionalHeaders = await getConditionalHeaders({
184187
job: {} as JobDocPayload<any>,
185188
filteredHeaders: permittedHeaders,
186189
server: mockServer,
187190
});
188191

189-
const logo = 'custom-logo';
190-
mockServer.uiSettingsServiceFactory().get.mockReturnValue(logo);
191-
192192
await getCustomLogo({
193+
reporting: mockReportingPlugin,
193194
job: {} as JobDocPayloadPDF,
194195
conditionalHeaders,
195196
server: mockServer,
196197
});
197198

198-
expect(mockServer.savedObjects.getScopedSavedObjectsClient.mock.calls[0][0].getBasePath()).toBe(
199-
'/sbp'
200-
);
199+
const getBasePath = mockGetSavedObjectsClient.mock.calls[0][0].getBasePath;
200+
expect(getBasePath()).toBe(`/sbp`);
201+
expect(mockGetSavedObjectsClient.mock.calls[0]).toMatchInlineSnapshot(`
202+
Array [
203+
Object {
204+
"getBasePath": [Function],
205+
"headers": Object {
206+
"baz": "quix",
207+
"foo": "bar",
208+
},
209+
"path": "/",
210+
"raw": Object {
211+
"req": Object {
212+
"url": "/",
213+
},
214+
},
215+
"route": Object {
216+
"settings": Object {},
217+
},
218+
"url": Object {
219+
"href": "/",
220+
},
221+
},
222+
]
223+
`);
201224
});
202225

203226
describe('config formatting', () => {

x-pack/legacy/plugins/reporting/export_types/common/execute_job/get_custom_logo.test.ts

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,16 @@
44
* you may not use this file except in compliance with the Elastic License.
55
*/
66

7-
import { createMockServer } from '../../../test_helpers/create_mock_server';
8-
import { getConditionalHeaders, getCustomLogo } from './index';
7+
import { ReportingCore } from '../../../server';
8+
import { createMockReportingCore, createMockServer } from '../../../test_helpers';
9+
import { ServerFacade } from '../../../types';
910
import { JobDocPayloadPDF } from '../../printable_pdf/types';
11+
import { getConditionalHeaders, getCustomLogo } from './index';
1012

11-
let mockServer: any;
12-
beforeEach(() => {
13+
let mockReportingPlugin: ReportingCore;
14+
let mockServer: ServerFacade;
15+
beforeEach(async () => {
16+
mockReportingPlugin = await createMockReportingCore();
1317
mockServer = createMockServer('');
1418
});
1519

@@ -19,19 +23,30 @@ test(`gets logo from uiSettings`, async () => {
1923
baz: 'quix',
2024
};
2125

26+
const mockGet = jest.fn();
27+
mockGet.mockImplementationOnce((...args: any[]) => {
28+
if (args[0] === 'xpackReporting:customPdfLogo') {
29+
return 'purple pony';
30+
}
31+
throw new Error('wrong caller args!');
32+
});
33+
mockReportingPlugin.getUiSettingsServiceFactory = jest.fn().mockResolvedValue({
34+
get: mockGet,
35+
});
36+
2237
const conditionalHeaders = await getConditionalHeaders({
2338
job: {} as JobDocPayloadPDF,
2439
filteredHeaders: permittedHeaders,
2540
server: mockServer,
2641
});
2742

2843
const { logo } = await getCustomLogo({
44+
reporting: mockReportingPlugin,
2945
job: {} as JobDocPayloadPDF,
3046
conditionalHeaders,
3147
server: mockServer,
3248
});
3349

34-
mockServer.uiSettingsServiceFactory().get.mockReturnValue(logo);
35-
36-
expect(mockServer.uiSettingsServiceFactory().get).toBeCalledWith('xpackReporting:customPdfLogo');
50+
expect(mockGet).toBeCalledWith('xpackReporting:customPdfLogo');
51+
expect(logo).toBe('purple pony');
3752
});

x-pack/legacy/plugins/reporting/export_types/common/execute_job/get_custom_logo.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@
55
*/
66

77
import { UI_SETTINGS_CUSTOM_PDF_LOGO } from '../../../common/constants';
8+
import { ReportingCore } from '../../../server';
89
import { ConditionalHeaders, ServerFacade } from '../../../types';
910
import { JobDocPayloadPDF } from '../../printable_pdf/types'; // Logo is PDF only
1011

1112
export const getCustomLogo = async ({
13+
reporting,
1214
server,
1315
job,
1416
conditionalHeaders,
1517
}: {
18+
reporting: ReportingCore;
1619
server: ServerFacade;
1720
job: JobDocPayloadPDF;
1821
conditionalHeaders: ConditionalHeaders;
@@ -27,19 +30,12 @@ export const getCustomLogo = async ({
2730
getBasePath: () => job.basePath || serverBasePath,
2831
path: '/',
2932
route: { settings: {} },
30-
url: {
31-
href: '/',
32-
},
33-
raw: {
34-
req: {
35-
url: '/',
36-
},
37-
},
33+
url: { href: '/' },
34+
raw: { req: { url: '/' } },
3835
};
3936

40-
const savedObjects = server.savedObjects;
41-
const savedObjectsClient = savedObjects.getScopedSavedObjectsClient(fakeRequest);
42-
const uiSettings = server.uiSettingsServiceFactory({ savedObjectsClient });
37+
const savedObjectsClient = await reporting.getSavedObjectsClient(fakeRequest);
38+
const uiSettings = await reporting.getUiSettingsServiceFactory(savedObjectsClient);
4339
const logo: string = await uiSettings.get(UI_SETTINGS_CUSTOM_PDF_LOGO);
4440
return { conditionalHeaders, logo };
4541
};

x-pack/legacy/plugins/reporting/export_types/common/execute_job/get_full_urls.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* you may not use this file except in compliance with the Elastic License.
55
*/
66

7-
import { createMockServer } from '../../../test_helpers/create_mock_server';
7+
import { createMockServer } from '../../../test_helpers';
88
import { ServerFacade } from '../../../types';
99
import { JobDocPayloadPNG } from '../../png/types';
1010
import { JobDocPayloadPDF } from '../../printable_pdf/types';

x-pack/legacy/plugins/reporting/export_types/common/lib/screenshots/index.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@
55
*/
66

77
import * as Rx from 'rxjs';
8-
import { first, concatMap, take, toArray, mergeMap } from 'rxjs/operators';
9-
import { ServerFacade, CaptureConfig, HeadlessChromiumDriverFactory } from '../../../../types';
10-
import { ScreenshotResults, ScreenshotObservableOpts } from './types';
11-
import { injectCustomCss } from './inject_css';
12-
import { openUrl } from './open_url';
13-
import { waitForRenderComplete } from './wait_for_render';
14-
import { getNumberOfItems } from './get_number_of_items';
15-
import { waitForElementsToBeInDOM } from './wait_for_dom_elements';
16-
import { getTimeRange } from './get_time_range';
8+
import { concatMap, first, mergeMap, take, toArray } from 'rxjs/operators';
9+
import { CaptureConfig, HeadlessChromiumDriverFactory, ServerFacade } from '../../../../types';
1710
import { getElementPositionAndAttributes } from './get_element_position_data';
11+
import { getNumberOfItems } from './get_number_of_items';
1812
import { getScreenshots } from './get_screenshots';
13+
import { getTimeRange } from './get_time_range';
14+
import { injectCustomCss } from './inject_css';
15+
import { openUrl } from './open_url';
1916
import { scanPage } from './scan_page';
2017
import { skipTelemetry } from './skip_telemetry';
18+
import { ScreenshotObservableOpts, ScreenshotResults } from './types';
19+
import { waitForElementsToBeInDOM } from './wait_for_dom_elements';
20+
import { waitForRenderComplete } from './wait_for_render';
2121

2222
export function screenshotsObservableFactory(
2323
server: ServerFacade,

x-pack/legacy/plugins/reporting/export_types/csv/server/create_job.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,20 @@
44
* you may not use this file except in compliance with the Elastic License.
55
*/
66

7+
import { ReportingCore } from '../../../server';
78
import { cryptoFactory } from '../../../server/lib/crypto';
89
import {
9-
CreateJobFactory,
1010
ConditionalHeaders,
11-
ServerFacade,
12-
RequestFacade,
11+
CreateJobFactory,
1312
ESQueueCreateJobFn,
13+
RequestFacade,
14+
ServerFacade,
1415
} from '../../../types';
1516
import { JobParamsDiscoverCsv } from '../types';
1617

1718
export const createJobFactory: CreateJobFactory<ESQueueCreateJobFn<
1819
JobParamsDiscoverCsv
19-
>> = function createJobFactoryFn(server: ServerFacade) {
20+
>> = function createJobFactoryFn(reporting: ReportingCore, server: ServerFacade) {
2021
const crypto = cryptoFactory(server);
2122

2223
return async function createJob(

0 commit comments

Comments
 (0)