Skip to content

Commit

Permalink
Fix types + tests that use services
Browse files Browse the repository at this point in the history
  • Loading branch information
Heenawter committed Sep 17, 2024
1 parent 5241d8d commit c71bfeb
Show file tree
Hide file tree
Showing 9 changed files with 32 additions and 83 deletions.
20 changes: 4 additions & 16 deletions src/plugins/controls/public/actions/edit_control_action.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@

import { BehaviorSubject } from 'rxjs';

import { coreMock } from '@kbn/core/public/mocks';
import { dataPluginMock } from '@kbn/data-plugin/public/mocks';
import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks';
import dateMath from '@kbn/datemath';
import type { TimeRange } from '@kbn/es-query';
import type { ViewMode } from '@kbn/presentation-publishing';
Expand All @@ -23,12 +20,10 @@ import {
getMockedControlGroupApi,
} from '../react_controls/controls/mocks/control_mocks';
import { getTimesliderControlFactory } from '../react_controls/controls/timeslider_control/get_timeslider_control_factory';
import { dataService } from '../services/kibana_services';
import { EditControlAction } from './edit_control_action';

const mockDataViews = dataViewPluginMocks.createStartContract();
const mockCore = coreMock.createStart();
const dataStartServiceMock = dataPluginMock.createStartContract();
dataStartServiceMock.query.timefilter.timefilter.calculateBounds = (timeRange: TimeRange) => {
dataService.query.timefilter.timefilter.calculateBounds = (timeRange: TimeRange) => {
const now = new Date();
return {
min: dateMath.parse(timeRange.from, { forceNow: now }),
Expand All @@ -48,11 +43,7 @@ const controlGroupApi = getMockedControlGroupApi(dashboardApi, {

let optionsListApi: OptionsListControlApi;
beforeAll(async () => {
const controlFactory = getOptionsListControlFactory({
core: mockCore,
data: dataStartServiceMock,
dataViews: mockDataViews,
});
const controlFactory = getOptionsListControlFactory();

const optionsListUuid = 'optionsListControl';
const optionsListControl = await controlFactory.buildControl(
Expand All @@ -73,10 +64,7 @@ beforeAll(async () => {

describe('Incompatible embeddables', () => {
test('Action is incompatible with embeddables that are not editable', async () => {
const timeSliderFactory = getTimesliderControlFactory({
core: mockCore,
data: dataStartServiceMock,
});
const timeSliderFactory = getTimesliderControlFactory();
const timeSliderUuid = 'timeSliderControl';
const timeSliderControl = await timeSliderFactory.buildControl(
{},
Expand Down
1 change: 0 additions & 1 deletion src/plugins/controls/public/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ export { ACTION_CLEAR_CONTROL, ACTION_DELETE_CONTROL, ACTION_EDIT_CONTROL } from
export type {
DataControlApi,
DataControlFactory,
DataControlServices,
} from './react_controls/controls/data_controls/types';

export {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import { BehaviorSubject } from 'rxjs';

import { createStubDataView } from '@kbn/data-views-plugin/common/data_view.stub';
import { stubFieldSpecMap } from '@kbn/data-views-plugin/common/field.stub';
import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks';
import { TimeRange } from '@kbn/es-query';
import { I18nProvider } from '@kbn/i18n-react';
import { act, fireEvent, render, RenderResult, waitFor } from '@testing-library/react';
Expand All @@ -22,6 +21,7 @@ import {
DEFAULT_CONTROL_WIDTH,
type DefaultDataControlState,
} from '../../../../common';
import { dataViewsService } from '../../../services/kibana_services';
import { getAllControlTypes, getControlFactory } from '../../control_factory_registry';
import type { ControlGroupApi } from '../../control_group/types';
import type { ControlFactory } from '../types';
Expand All @@ -39,7 +39,6 @@ jest.mock('../../control_factory_registry', () => ({
getControlFactory: jest.fn(),
}));

const mockDataViews = dataViewPluginMocks.createStartContract();
const mockDataView = createStubDataView({
spec: {
id: 'logstash-*',
Expand All @@ -58,7 +57,6 @@ const mockDataView = createStubDataView({
timeFieldName: '@timestamp',
},
});
mockDataViews.get = jest.fn().mockResolvedValue(mockDataView);

const dashboardApi = {
timeRange$: new BehaviorSubject<TimeRange | undefined>(undefined),
Expand All @@ -82,7 +80,7 @@ describe('Data control editor', () => {
controlType?: string;
initialDefaultPanelTitle?: string;
}) => {
mockDataViews.get = jest.fn().mockResolvedValue(mockDataView);
dataViewsService.get = jest.fn().mockResolvedValue(mockDataView);

const controlEditor = render(
<I18nProvider>
Expand All @@ -97,13 +95,12 @@ describe('Data control editor', () => {
controlId={controlId}
controlType={controlType}
initialDefaultPanelTitle={initialDefaultPanelTitle}
services={{ dataViews: mockDataViews }}
/>
</I18nProvider>
);

await waitFor(() => {
expect(mockDataViews.get).toHaveBeenCalledTimes(1);
expect(dataViewsService.get).toHaveBeenCalledTimes(1);
});

return controlEditor;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,9 @@
* License v3.0 only", or the "Server Side Public License, v 1".
*/

import { coreMock } from '@kbn/core/public/mocks';
import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks';
import type { DataView } from '@kbn/data-views-plugin/public';
import { first, skip } from 'rxjs';
import { dataViewsService } from '../../../services/kibana_services';
import { ControlGroupApi } from '../../control_group/types';
import { initializeDataControl } from './initialize_data_control';

Expand All @@ -21,9 +20,8 @@ describe('initializeDataControl', () => {
};
const editorStateManager = {};
const controlGroupApi = {} as unknown as ControlGroupApi;
const mockDataViews = dataViewPluginMocks.createStartContract();
// @ts-ignore
mockDataViews.get = async (id: string): Promise<DataView> => {

dataViewsService.get = async (id: string): Promise<DataView> => {
if (id !== 'myDataViewId') {
throw new Error(`Simulated error: no data view found for id ${id}`);
}
Expand All @@ -40,10 +38,6 @@ describe('initializeDataControl', () => {
},
} as unknown as DataView;
};
const services = {
core: coreMock.createStart(),
dataViews: mockDataViews,
};

describe('dataViewId subscription', () => {
describe('no blocking errors', () => {
Expand All @@ -55,8 +49,7 @@ describe('initializeDataControl', () => {
'referenceNameSuffix',
dataControlState,
editorStateManager,
controlGroupApi,
services
controlGroupApi
);

dataControl.api.defaultPanelTitle!.pipe(skip(1), first()).subscribe(() => {
Expand Down Expand Up @@ -90,8 +83,7 @@ describe('initializeDataControl', () => {
dataViewId: 'notGonnaFindMeDataViewId',
},
editorStateManager,
controlGroupApi,
services
controlGroupApi
);

dataControl.api.dataViews.pipe(skip(1), first()).subscribe(() => {
Expand Down Expand Up @@ -129,8 +121,7 @@ describe('initializeDataControl', () => {
fieldName: 'notGonnaFindMeFieldName',
},
editorStateManager,
controlGroupApi,
services
controlGroupApi
);

dataControl.api.defaultPanelTitle!.pipe(skip(1), first()).subscribe(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,22 @@

import React from 'react';

import { coreMock } from '@kbn/core/public/mocks';
import { dataPluginMock } from '@kbn/data-plugin/public/mocks';
import { DataView } from '@kbn/data-views-plugin/common';
import { createStubDataView } from '@kbn/data-views-plugin/common/data_view.stub';
import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks';
import { act, render, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';

import { coreServices, dataViewsService } from '../../../../services/kibana_services';
import { getMockedBuildApi, getMockedControlGroupApi } from '../../mocks/control_mocks';
import { getOptionsListControlFactory } from './get_options_list_control_factory';

describe('Options List Control Api', () => {
const uuid = 'myControl1';
const controlGroupApi = getMockedControlGroupApi();
const mockDataViews = dataViewPluginMocks.createStartContract();
const mockCore = coreMock.createStart();

const waitOneTick = () => act(() => new Promise((resolve) => setTimeout(resolve, 0)));

mockDataViews.get = jest.fn().mockImplementation(async (id: string): Promise<DataView> => {
dataViewsService.get = jest.fn().mockImplementation(async (id: string): Promise<DataView> => {
if (id !== 'myDataViewId') {
throw new Error(`Simulated error: no data view found for id ${id}`);
}
Expand Down Expand Up @@ -60,11 +56,7 @@ describe('Options List Control Api', () => {
return stubDataView;
});

const factory = getOptionsListControlFactory({
core: mockCore,
data: dataPluginMock.createStartContract(),
dataViews: mockDataViews,
});
const factory = getOptionsListControlFactory();

describe('filters$', () => {
test('should not set filters$ when selectedOptions is not provided', async () => {
Expand Down Expand Up @@ -177,7 +169,7 @@ describe('Options List Control Api', () => {

describe('make selection', () => {
beforeAll(() => {
mockCore.http.fetch = jest.fn().mockResolvedValue({
coreServices.http.fetch = jest.fn().mockResolvedValue({
suggestions: [
{ value: 'woof', docCount: 10 },
{ value: 'bark', docCount: 15 },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,11 @@ import React from 'react';
import { of } from 'rxjs';

import { estypes } from '@elastic/elasticsearch';
import { coreMock } from '@kbn/core/public/mocks';
import { dataPluginMock } from '@kbn/data-plugin/public/mocks';
import { DataViewField } from '@kbn/data-views-plugin/common';
import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks';
import { SerializedPanelState } from '@kbn/presentation-containers';
import { fireEvent, render, waitFor } from '@testing-library/react';

import { dataService, dataViewsService } from '../../../../services/kibana_services';
import { getMockedBuildApi, getMockedControlGroupApi } from '../../mocks/control_mocks';
import { getRangesliderControlFactory } from './get_range_slider_control_factory';
import { RangesliderControlState } from './types';
Expand All @@ -31,11 +29,10 @@ describe('RangesliderControlApi', () => {

const controlGroupApi = getMockedControlGroupApi();

const dataStartServiceMock = dataPluginMock.createStartContract();
let totalResults = DEFAULT_TOTAL_RESULTS;
let min: estypes.AggregationsSingleMetricAggregateBase['value'] = DEFAULT_MIN;
let max: estypes.AggregationsSingleMetricAggregateBase['value'] = DEFAULT_MAX;
dataStartServiceMock.search.searchSource.create = jest.fn().mockImplementation(() => {
dataService.search.searchSource.create = jest.fn().mockImplementation(() => {
let isAggsRequest = false;
return {
setField: (key: string) => {
Expand All @@ -54,9 +51,8 @@ describe('RangesliderControlApi', () => {
},
};
});
const mockDataViews = dataViewPluginMocks.createStartContract();

mockDataViews.get = jest.fn().mockImplementation(async (id: string): Promise<DataView> => {
dataViewsService.get = jest.fn().mockImplementation(async (id: string): Promise<DataView> => {
if (id !== 'myDataViewId') {
throw new Error(`no data view found for id ${id}`);
}
Expand All @@ -82,11 +78,7 @@ describe('RangesliderControlApi', () => {
} as unknown as DataView;
});

const factory = getRangesliderControlFactory({
core: coreMock.createStart(),
data: dataStartServiceMock,
dataViews: mockDataViews,
});
const factory = getRangesliderControlFactory();

beforeEach(() => {
totalResults = DEFAULT_TOTAL_RESULTS;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@
* License v3.0 only", or the "Server Side Public License, v 1".
*/

import { coreMock } from '@kbn/core/public/mocks';
import { dataPluginMock } from '@kbn/data-plugin/public/mocks';
import React from 'react';
import { BehaviorSubject } from 'rxjs';

import dateMath from '@kbn/datemath';
import { TimeRange } from '@kbn/es-query';
import { StateComparators } from '@kbn/presentation-publishing';
import { fireEvent, render } from '@testing-library/react';
import React from 'react';
import { BehaviorSubject } from 'rxjs';

import { dataService } from '../../../services/kibana_services';
import { getMockedControlGroupApi } from '../mocks/control_mocks';
import { ControlApiRegistration } from '../types';
import { getTimesliderControlFactory } from './get_timeslider_control_factory';
Expand All @@ -28,18 +29,14 @@ describe('TimesliderControlApi', () => {
};
const controlGroupApi = getMockedControlGroupApi(dashboardApi);

const dataStartServiceMock = dataPluginMock.createStartContract();
dataStartServiceMock.query.timefilter.timefilter.calculateBounds = (timeRange: TimeRange) => {
dataService.query.timefilter.timefilter.calculateBounds = (timeRange: TimeRange) => {
const now = new Date();
return {
min: dateMath.parse(timeRange.from, { forceNow: now }),
max: dateMath.parse(timeRange.to, { roundUp: true, forceNow: now }),
};
};
const factory = getTimesliderControlFactory({
core: coreMock.createStart(),
data: dataStartServiceMock,
});
const factory = getTimesliderControlFactory();
let comparators: StateComparators<TimesliderControlState> | undefined;
function buildApiMock(
api: ControlApiRegistration<TimesliderControlApi>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,16 @@
*/

import type { CoreSetup } from '@kbn/core/public';
import { TIME_SLIDER_CONTROL } from '../../../../common';
import type { ControlsPluginStartDeps } from '../../../types';
import { registerControlFactory } from '../../control_factory_registry';
import { TIME_SLIDER_CONTROL } from '../../../../common';

export function registerTimeSliderControl(coreSetup: CoreSetup<ControlsPluginStartDeps>) {
registerControlFactory(TIME_SLIDER_CONTROL, async () => {
const [{ getTimesliderControlFactory }, [coreStart, depsStart]] = await Promise.all([
import('./get_timeslider_control_factory'),
coreSetup.getStartServices(),
]);
return getTimesliderControlFactory({
core: coreStart,
data: depsStart.data,
});
return getTimesliderControlFactory();
});
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,22 @@

import React from 'react';

import { coreMock } from '@kbn/core/public/mocks';
import { dataViewPluginMocks } from '@kbn/data-views-plugin/public/mocks';
import { embeddablePluginMock } from '@kbn/embeddable-plugin/public/mocks';
import { Filter } from '@kbn/es-query';
import { PublishesUnifiedSearch, PublishingSubject } from '@kbn/presentation-publishing';
import { act, render, waitFor } from '@testing-library/react';

import { ControlGroupRendererApi } from '.';
import { CONTROL_GROUP_TYPE } from '../..';
import { getControlGroupEmbeddableFactory } from '../control_group/get_control_group_factory';
import { ControlGroupRenderer, ControlGroupRendererProps } from './control_group_renderer';
import { CONTROL_GROUP_TYPE } from '../..';

type ParentApiType = PublishesUnifiedSearch & {
unifiedSearchFilters$?: PublishingSubject<Filter[] | undefined>;
};

describe('control group renderer', () => {
const core = coreMock.createStart();
const dataViews = dataViewPluginMocks.createStartContract();
const factory = getControlGroupEmbeddableFactory({ core, dataViews });
const factory = getControlGroupEmbeddableFactory();
const buildControlGroupSpy = jest.spyOn(factory, 'buildEmbeddable');

const mountControlGroupRenderer = async (
Expand Down

0 comments on commit c71bfeb

Please sign in to comment.