Skip to content

Commit c95c601

Browse files
kibanamachineSpencerspalger
authored
[ftr] migrate "embedding" and "renderable" services to FtrService class (#100596) (#100846)
Co-authored-by: spalger <spalger@users.noreply.github.com> Co-authored-by: Spencer <email@spalger.com> Co-authored-by: spalger <spalger@users.noreply.github.com>
1 parent 8a60908 commit c95c601

File tree

3 files changed

+49
-57
lines changed

3 files changed

+49
-57
lines changed

test/functional/services/embedding.ts

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,20 @@
66
* Side Public License, v 1.
77
*/
88

9-
import { FtrProviderContext } from '../ftr_provider_context';
9+
import { FtrService } from '../ftr_provider_context';
1010

11-
export function EmbeddingProvider({ getService, getPageObjects }: FtrProviderContext) {
12-
const browser = getService('browser');
13-
const log = getService('log');
14-
const PageObjects = getPageObjects(['header']);
11+
export class EmbeddingService extends FtrService {
12+
private readonly browser = this.ctx.getService('browser');
13+
private readonly log = this.ctx.getService('log');
14+
private readonly PageObjects = this.ctx.getPageObjects(['header']);
1515

16-
class Embedding {
17-
/**
18-
* Opens current page in embeded mode
19-
*/
20-
public async openInEmbeddedMode(): Promise<void> {
21-
const currentUrl = await browser.getCurrentUrl();
22-
log.debug(`Opening in embedded mode: ${currentUrl}`);
23-
await browser.get(`${currentUrl}&embed=true`);
24-
await PageObjects.header.waitUntilLoadingHasFinished();
25-
}
16+
/**
17+
* Opens current page in embeded mode
18+
*/
19+
public async openInEmbeddedMode(): Promise<void> {
20+
const currentUrl = await this.browser.getCurrentUrl();
21+
this.log.debug(`Opening in embedded mode: ${currentUrl}`);
22+
await this.browser.get(`${currentUrl}&embed=true`);
23+
await this.PageObjects.header.waitUntilLoadingHasFinished();
2624
}
27-
28-
return new Embedding();
2925
}

test/functional/services/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import {
2626
DashboardVisualizationsService,
2727
} from './dashboard';
2828
import { DocTableService } from './doc_table';
29-
import { EmbeddingProvider } from './embedding';
29+
import { EmbeddingService } from './embedding';
3030
import { FilterBarService } from './filter_bar';
3131
import { FlyoutService } from './flyout';
3232
import { GlobalNavService } from './global_nav';
@@ -35,7 +35,7 @@ import { FieldEditorService } from './field_editor';
3535
import { ManagementMenuService } from './management';
3636
import { QueryBarProvider } from './query_bar';
3737
import { RemoteProvider } from './remote';
38-
import { RenderableProvider } from './renderable';
38+
import { RenderableService } from './renderable';
3939
import { ToastsService } from './toasts';
4040
import { DataGridService } from './data_grid';
4141
import {
@@ -70,8 +70,8 @@ export const services = {
7070
flyout: FlyoutService,
7171
comboBox: ComboBoxService,
7272
dataGrid: DataGridService,
73-
embedding: EmbeddingProvider,
74-
renderable: RenderableProvider,
73+
embedding: EmbeddingService,
74+
renderable: RenderableService,
7575
browser: BrowserProvider,
7676
pieChart: PieChartService,
7777
inspector: InspectorService,

test/functional/services/renderable.ts

Lines changed: 32 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,49 +6,45 @@
66
* Side Public License, v 1.
77
*/
88

9-
import { FtrProviderContext } from '../ftr_provider_context';
9+
import { FtrService } from '../ftr_provider_context';
1010

1111
const RENDER_COMPLETE_SELECTOR = '[data-render-complete="true"]';
1212
const RENDER_COMPLETE_PENDING_SELECTOR = '[data-render-complete="false"]';
1313
const DATA_LOADING_SELECTOR = '[data-loading]';
1414

15-
export function RenderableProvider({ getService }: FtrProviderContext) {
16-
const log = getService('log');
17-
const retry = getService('retry');
18-
const find = getService('find');
15+
export class RenderableService extends FtrService {
16+
private readonly log = this.ctx.getService('log');
17+
private readonly retry = this.ctx.getService('retry');
18+
private readonly find = this.ctx.getService('find');
1919

20-
class Renderable {
21-
/**
22-
* This method waits for a certain number of objects to finish rendering and loading, which is indicated
23-
* by a couple tags. The RENDER_COMPLETE_SELECTOR indicates that it's done initially loading up. Some
24-
* visualizations also add a DATA_LOADING_SELECTOR when the internal data is loading. This test will not
25-
* return if any of those tags are found.
26-
* @param count {Number} Number of RENDER_COMPLETE_SELECTORs to wait for.
27-
*/
28-
public async waitForRender(count: number = 1): Promise<void> {
29-
log.debug(`Renderable.waitForRender for ${count} elements`);
30-
await retry.try(async () => {
31-
const completedElements = await find.allByCssSelector(RENDER_COMPLETE_SELECTOR);
32-
if (completedElements.length < count) {
33-
const pendingElements = await find.allByCssSelector(RENDER_COMPLETE_PENDING_SELECTOR);
34-
const pendingElementNames = [];
35-
for (const pendingElement of pendingElements) {
36-
const title = await pendingElement.getAttribute('data-title');
37-
pendingElementNames.push(title);
38-
}
39-
throw new Error(`${
40-
completedElements.length
41-
} elements completed rendering, still waiting on a total of ${count}
42-
specifically:\n${pendingElementNames.join('\n')}`);
20+
/**
21+
* This method waits for a certain number of objects to finish rendering and loading, which is indicated
22+
* by a couple tags. The RENDER_COMPLETE_SELECTOR indicates that it's done initially loading up. Some
23+
* visualizations also add a DATA_LOADING_SELECTOR when the internal data is loading. This test will not
24+
* return if any of those tags are found.
25+
* @param count {Number} Number of RENDER_COMPLETE_SELECTORs to wait for.
26+
*/
27+
public async waitForRender(count: number = 1): Promise<void> {
28+
this.log.debug(`Renderable.waitForRender for ${count} elements`);
29+
await this.retry.try(async () => {
30+
const completedElements = await this.find.allByCssSelector(RENDER_COMPLETE_SELECTOR);
31+
if (completedElements.length < count) {
32+
const pendingElements = await this.find.allByCssSelector(RENDER_COMPLETE_PENDING_SELECTOR);
33+
const pendingElementNames = [];
34+
for (const pendingElement of pendingElements) {
35+
const title = await pendingElement.getAttribute('data-title');
36+
pendingElementNames.push(title);
4337
}
38+
throw new Error(`${
39+
completedElements.length
40+
} elements completed rendering, still waiting on a total of ${count}
41+
specifically:\n${pendingElementNames.join('\n')}`);
42+
}
4443

45-
const stillLoadingElements = await find.allByCssSelector(DATA_LOADING_SELECTOR, 1000);
46-
if (stillLoadingElements.length > 0) {
47-
throw new Error(`${stillLoadingElements.length} elements still loading contents`);
48-
}
49-
});
50-
}
44+
const stillLoadingElements = await this.find.allByCssSelector(DATA_LOADING_SELECTOR, 1000);
45+
if (stillLoadingElements.length > 0) {
46+
throw new Error(`${stillLoadingElements.length} elements still loading contents`);
47+
}
48+
});
5149
}
52-
53-
return new Renderable();
5450
}

0 commit comments

Comments
 (0)