[SecuritySolution] Remove usage of the kibana observable (#175962)

## Summary

After merging https://github.com/elastic/kibana/pull/175678, we have no
more need for the kibana observable. It can now be replaced by an
instance of kibana (aka `CoreStart`).

This change mostly impacts tests that use `createStore` in
`security_solution`.

In a second step, this PR cleans up test-related imports between
`security_solution` and the `timelines` plugin
(523080c772).

This work is part of https://github.com/elastic/kibana/issues/175427.

### Checklist

- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
This commit is contained in:
Jan Monschke 2024-02-02 16:50:54 +01:00 committed by GitHub
parent 1985dd07bc
commit 5c00ddf1ef
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
80 changed files with 685 additions and 1650 deletions

View file

@ -6,13 +6,7 @@
*/
import { createFilterManagerMock } from '@kbn/data-plugin/public/query/filter_manager/filter_manager.mock';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
} from '../../../common/mock';
import { createStore } from '../../../common/store';
import { createMockStore, mockGlobalState } from '../../../common/mock';
import { createFilterInCellActionFactory } from './filter_in';
import type { SecurityCellActionExecutionContext } from '../../types';
import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock';
@ -45,8 +39,7 @@ jest.mock('@kbn/ui-actions-plugin/public', () => ({
addFilterOut: () => {},
}));
const { storage } = createSecuritySolutionStorageMock();
const mockStore = createStore(mockState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const mockStore = createMockStore(mockState);
describe('createFilterInCellActionFactory', () => {
const createFilterInCellAction = createFilterInCellActionFactory({ store: mockStore, services });

View file

@ -6,13 +6,7 @@
*/
import { createFilterManagerMock } from '@kbn/data-plugin/public/query/filter_manager/filter_manager.mock';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
} from '../../../common/mock';
import { createStore } from '../../../common/store';
import { createMockStore, mockGlobalState } from '../../../common/mock';
import { createFilterOutCellActionFactory } from './filter_out';
import type { SecurityCellActionExecutionContext } from '../../types';
import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock';
@ -39,8 +33,7 @@ const mockState = {
},
};
const { storage } = createSecuritySolutionStorageMock();
const mockStore = createStore(mockState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const mockStore = createMockStore(mockState);
describe('createFilterOutCellActionFactory', () => {
const filterOutActionFactory = createFilterOutCellActionFactory({ store: mockStore, services });

View file

@ -5,13 +5,7 @@
* 2.0.
*/
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
} from '../../../common/mock';
import { createStore } from '../../../common/store';
import { createMockStore } from '../../../common/mock';
import { createFilterInDiscoverCellActionFactory } from './filter_in';
import type { SecurityCellActionExecutionContext } from '../../types';
import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock';
@ -30,8 +24,7 @@ jest.mock('@kbn/ui-actions-plugin/public', () => ({
addFilterOut: () => {},
}));
const { storage } = createSecuritySolutionStorageMock();
const mockStore = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const mockStore = createMockStore();
describe('createFilterInDiscoverCellActionFactory', () => {
const createFilterInCellAction = createFilterInDiscoverCellActionFactory({

View file

@ -5,13 +5,7 @@
* 2.0.
*/
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
} from '../../../common/mock';
import { createStore } from '../../../common/store';
import { createMockStore } from '../../../common/mock';
import { createFilterOutDiscoverCellActionFactory } from './filter_out';
import type { SecurityCellActionExecutionContext } from '../../types';
import { createStartServicesMock } from '../../../common/lib/kibana/kibana_react.mock';
@ -30,8 +24,7 @@ jest.mock('@kbn/ui-actions-plugin/public', () => ({
addFilterOut: () => {},
}));
const { storage } = createSecuritySolutionStorageMock();
const mockStore = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const mockStore = createMockStore();
describe('createFilterOutDiscoverCellActionFactory', () => {
const createFilterOutCellAction = createFilterOutDiscoverCellActionFactory({

View file

@ -16,15 +16,12 @@ import {
THREAT_INTELLIGENCE_PATH,
} from '../../../../common/constants';
import {
createSecuritySolutionStorageMock,
createMockStore,
mockGlobalState,
mockIndexPattern,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../../common/mock';
import { TimelineId } from '../../../../common/types/timeline';
import { createStore } from '../../../common/store';
import { kibanaObservable } from '@kbn/timelines-plugin/public/mock';
import { sourcererPaths } from '../../../common/containers/sourcerer';
jest.mock('react-router-dom', () => {
@ -61,8 +58,7 @@ describe('global header', () => {
},
},
};
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state);
beforeEach(() => {
useVariationMock.mockReset();
@ -159,7 +155,7 @@ describe('global header', () => {
},
},
};
const mockStore = createStore(mockstate, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const mockStore = createMockStore(mockstate);
(useLocation as jest.Mock).mockReturnValue({ pathname: sourcererPaths[2] });

View file

@ -11,13 +11,7 @@ import { HomePage } from '.';
import type { SavedQuery } from '@kbn/data-plugin/public';
import { FilterManager } from '@kbn/data-plugin/public';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../common/mock';
import { createMockStore, mockGlobalState, TestProviders } from '../../common/mock';
import { inputsActions } from '../../common/store/inputs';
import {
setSearchBarFilter,
@ -26,7 +20,6 @@ import {
} from '../../common/store/inputs/actions';
import { coreMock } from '@kbn/core/public/mocks';
import type { Filter } from '@kbn/es-query';
import { createStore } from '../../common/store';
import type { TimeRange, UrlInputsModel } from '../../common/store/inputs/model';
import { SecurityPageName } from '../types';
import type { TimelineUrl } from '../../timelines/store/model';
@ -346,7 +339,6 @@ describe('HomePage', () => {
const state = null;
mockUseInitializeUrlParam(URL_PARAM_KEY.filters, state);
const spySetAppFilters = jest.spyOn(mockedFilterManager, 'setAppFilters');
const { storage } = createSecuritySolutionStorageMock();
const mockstate = {
...mockGlobalState,
@ -359,7 +351,7 @@ describe('HomePage', () => {
},
};
const mockStore = createStore(mockstate, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const mockStore = createMockStore(mockstate);
render(
<TestProviders store={mockStore}>
@ -512,8 +504,7 @@ describe('HomePage', () => {
},
};
const { storage } = createSecuritySolutionStorageMock();
const mockStore = createStore(mockstate, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const mockStore = createMockStore(mockstate);
const TestComponent = () => (
<TestProviders store={mockStore}>
@ -569,8 +560,7 @@ describe('HomePage', () => {
},
};
const { storage } = createSecuritySolutionStorageMock();
const mockStore = createStore(mockstate, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const mockStore = createMockStore(mockstate);
const TestComponent = () => (
<TestProviders store={mockStore}>
@ -629,16 +619,13 @@ describe('HomePage', () => {
});
it('it keeps timeline visibility and selected tab state in URL', async () => {
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
mockUseInitializeUrlParam(URL_PARAM_KEY.timeline, {
id: 'testSavedTimelineId',
isOpen: false,
});
const TestComponent = () => (
<TestProviders store={store}>
<TestProviders>
<HomePage>
<span />
</HomePage>
@ -660,8 +647,6 @@ describe('HomePage', () => {
});
it('it updates URL when timeline store changes', async () => {
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const savedObjectId = 'testTimelineId';
mockUseInitializeUrlParam(URL_PARAM_KEY.timeline, {
@ -670,7 +655,7 @@ describe('HomePage', () => {
});
const TestComponent = () => (
<TestProviders store={store}>
<TestProviders>
<HomePage>
<span />
</HomePage>

View file

@ -8,15 +8,7 @@
import { renderHook } from '@testing-library/react-hooks';
import React from 'react';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../../../mock';
import type { State } from '../../../../store';
import { createStore } from '../../../../store';
import { TestProviders } from '../../../../mock';
import * as i18n from './translations';
import { useChartSettingsPopoverConfiguration } from '.';
@ -30,11 +22,8 @@ describe('useChartSettingsPopoverConfiguration', () => {
const onResetStackByFields = jest.fn();
const queryId = 'abcd';
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const wrapper = ({ children }: { children: React.ReactNode }) => (
<TestProviders store={store}>{children}</TestProviders>
<TestProviders>{children}</TestProviders>
);
beforeEach(() => jest.clearAllMocks());

View file

@ -9,19 +9,12 @@ import { discoverPluginMock } from '@kbn/discover-plugin/public/mocks';
import { dataViewMock } from '@kbn/discover-utils/src/__mocks__';
import type { SavedSearch } from '@kbn/saved-search-plugin/common';
import { renderHook } from '@testing-library/react-hooks';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../mock';
import { createMockStore, mockGlobalState, TestProviders } from '../../mock';
import { useDiscoverInTimelineActions } from './use_discover_in_timeline_actions';
import type { Filter } from '@kbn/es-query';
import { createStartServicesMock } from '../../lib/kibana/kibana_react.mock';
import { useKibana } from '../../lib/kibana';
import type { State } from '../../store';
import { createStore } from '../../store';
import { TimelineId } from '../../../../common/types';
import * as timelineActions from '../../../timelines/store/actions';
import type { ComponentType, FC, PropsWithChildren } from 'react';
@ -67,10 +60,8 @@ jest.mock('./use_discover_in_timeline_actions', () => {
return actual;
});
const { storage } = createSecuritySolutionStorageMock();
const getTestProviderWithCustomState = (state: State = mockState) => {
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state);
const MockTestProvider: FC<PropsWithChildren<{}>> = ({ children }) => (
<TestProviders store={store}> {children}</TestProviders>

View file

@ -9,30 +9,15 @@ import { shallow } from 'enzyme';
import React from 'react';
import { Provider } from 'react-redux';
import {
mockGlobalState,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../mock';
import { createStore } from '../../store/store';
import { createMockStore } from '../../mock';
import { ErrorToastDispatcher } from '.';
import type { State } from '../../store/types';
describe('Error Toast Dispatcher', () => {
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
beforeEach(() => {
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
});
describe('rendering', () => {
test('it renders', () => {
const wrapper = shallow(
<Provider store={store}>
<Provider store={createMockStore()}>
<ErrorToastDispatcher toastLifeTimeMs={9999999999} />
</Provider>
);

View file

@ -8,16 +8,9 @@
import React from 'react';
import { act, render } from '@testing-library/react';
import { OverviewCardWithActions } from './overview_card';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../../mock';
import { createMockStore, mockGlobalState, TestProviders } from '../../../mock';
import { SeverityBadge } from '../../severity_badge';
import type { State } from '../../../store';
import { createStore } from '../../../store';
import { TimelineId } from '../../../../../common/types';
import { createAction } from '@kbn/ui-actions-plugin/public';
@ -34,8 +27,7 @@ const state: State = {
},
};
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state);
const props = {
title: 'Severity',

View file

@ -10,13 +10,7 @@ import type { ComponentProps, FC } from 'react';
import React from 'react';
import { act, render, screen, fireEvent, waitFor } from '@testing-library/react';
import { DEFAULT_DETECTION_PAGE_FILTERS } from '../../../../common/constants';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../mock';
import { TestProviders } from '../../mock';
import type {
ControlGroupOutput,
ControlGroupInput,
@ -24,7 +18,6 @@ import type {
} from '@kbn/controls-plugin/public';
import { OPTIONS_LIST_CONTROL } from '@kbn/controls-plugin/common';
import { initialInputData, sampleOutputData } from './mocks/data';
import { createStore } from '../../store';
import { useGetInitialUrlParamValue } from '../../utils/global_query_string/helpers';
import { COMMON_OPTIONS_LIST_CONTROL_INPUTS, TEST_IDS } from './constants';
import {
@ -88,19 +81,12 @@ jest.mock('@kbn/controls-plugin/public/control_group/external_api/control_group_
const onFilterChangeMock = jest.fn();
const onInitMock = jest.fn();
const state = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
const getStoreWithCustomState = (newState: typeof state = state) => {
return createStore(newState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
};
const TestComponent: FC<
ComponentProps<typeof TestProviders> & {
filterGroupProps?: Partial<ComponentProps<typeof FilterGroup>>;
}
> = (props) => (
<TestProviders store={getStoreWithCustomState()} {...props}>
<TestProviders {...props}>
<FilterGroup
initialControls={DEFAULT_DETECTION_PAGE_FILTERS}
dataViewId="security-solution-default"

View file

@ -10,11 +10,9 @@ import type { EuiTourStepProps } from '@elastic/eui';
import { GuidedOnboardingTourStep, SecurityTourStep } from './tour_step';
import { AlertsCasesTourSteps, SecurityStepId } from './tour_config';
import { useTourContext } from './tour';
import { mockGlobalState, SUB_PLUGINS_REDUCER, TestProviders } from '../../mock';
import { mockGlobalState, TestProviders } from '../../mock';
import { TimelineId } from '../../../../common/types';
import { createStore } from '../../store';
import { kibanaObservable } from '@kbn/timelines-plugin/public/mock';
import { createSecuritySolutionStorageMock } from '@kbn/timelines-plugin/public/mock/mock_local_storage';
import { createMockStore } from '../../mock/test_providers';
jest.mock('./tour');
const mockTourStep = jest
@ -256,8 +254,7 @@ describe('SecurityTourStep', () => {
},
},
};
const { storage } = createSecuritySolutionStorageMock();
const mockStore = createStore(mockstate, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const mockStore = createMockStore(mockstate);
render(
<TestProviders store={mockStore}>

View file

@ -8,15 +8,8 @@
import { mount } from 'enzyme';
import React from 'react';
import {
TestProviders,
mockGlobalState,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../mock';
import { TestProviders, mockGlobalState, createMockStore } from '../../mock';
import type { State } from '../../store';
import { createStore } from '../../store';
import type { UpdateQueryParams } from '../../store/inputs/helpers';
import { upsertQuery } from '../../store/inputs/helpers';
@ -31,7 +24,6 @@ jest.mock('./modal', () => ({
describe('Inspect Button', () => {
const refetch = jest.fn();
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
const newQuery: UpdateQueryParams = {
inputId: InputsModelId.global,
id: 'myQuery',
@ -41,19 +33,13 @@ describe('Inspect Button', () => {
state: state.inputs,
};
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
let store = createMockStore(state);
describe('Render', () => {
beforeEach(() => {
const myState = cloneDeep(state);
myState.inputs = upsertQuery(newQuery);
store = createStore(
myState,
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
store = createMockStore(myState);
});
test('Eui Empty Button', () => {
const wrapper = mount(
@ -159,7 +145,7 @@ describe('Inspect Button', () => {
const myQuery = cloneDeep(newQuery);
myQuery.inspect = null;
myState.inputs = upsertQuery(myQuery);
store = createStore(myState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(myState);
const wrapper = mount(
<TestProviders store={store}>
<InspectButton queryId={newQuery.id} title="My title" />
@ -176,7 +162,7 @@ describe('Inspect Button', () => {
response: ['my response'],
};
myState.inputs = upsertQuery(myQuery);
store = createStore(myState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(myState);
const wrapper = mount(
<TestProviders store={store}>
<InspectButton queryId={newQuery.id} title="My title" />
@ -193,7 +179,7 @@ describe('Inspect Button', () => {
response: [],
};
myState.inputs = upsertQuery(myQuery);
store = createStore(myState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(myState);
const wrapper = mount(
<TestProviders store={store}>
<InspectButton queryId={newQuery.id} title="My title" />
@ -212,7 +198,7 @@ describe('Inspect Button', () => {
response: ['my response'],
};
myState.inputs = upsertQuery(myQuery);
store = createStore(myState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(myState);
});
test('Open Inspect Modal', () => {
const wrapper = mount(
@ -257,7 +243,7 @@ describe('Inspect Button', () => {
};
myState.inputs = upsertQuery(myQuery);
myState.inputs.global.queries[0].isInspected = true;
store = createStore(myState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(myState);
const wrapper = mount(
<TestProviders store={store}>
<InspectButton queryId={newQuery.id} title="My title" />
@ -276,7 +262,7 @@ describe('Inspect Button', () => {
};
myState.inputs = upsertQuery(myQuery);
myState.inputs.global.queries[0].isInspected = false;
store = createStore(myState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(myState);
const wrapper = mount(
<TestProviders store={store}>
<InspectButton queryId={newQuery.id} title="My title" />
@ -295,7 +281,7 @@ describe('Inspect Button', () => {
};
myState.inputs = upsertQuery(myQuery);
myState.inputs.global.queries[0].isInspected = true;
store = createStore(myState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(myState);
const wrapper = mount(
<TestProviders store={store}>
<InspectButton queryId={newQuery.id} title="My title" />
@ -314,7 +300,7 @@ describe('Inspect Button', () => {
};
myState.inputs = upsertQuery(myQuery);
myState.inputs.global.queries[0].isInspected = true;
store = createStore(myState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(myState);
const wrapper = mount(
<TestProviders store={store}>
<InspectButton queryId={newQuery.id} title="My title" />

View file

@ -7,26 +7,14 @@
import React from 'react';
import { renderHook, act } from '@testing-library/react-hooks';
import { useEnableDataFeed } from './use_enable_data_feed';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../../mock';
import { createStore } from '../../../store';
import type { State } from '../../../store';
import { TestProviders } from '../../../mock';
import type { SecurityJob } from '../types';
import { createTelemetryServiceMock } from '../../../lib/telemetry/telemetry_service.mock';
import { ML_JOB_TELEMETRY_STATUS } from '../../../lib/telemetry';
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const wrapper = ({ children }: { children: React.ReactNode }) => (
<TestProviders store={store}>{children}</TestProviders>
<TestProviders>{children}</TestProviders>
);
const moduleId = 'test_module_id';

View file

@ -8,15 +8,7 @@ import type { MutableRefObject } from 'react';
import React from 'react';
import type { RenderHookResult } from '@testing-library/react-hooks';
import { renderHook } from '@testing-library/react-hooks';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../mock';
import type { State } from '../../store';
import { createStore } from '../../store';
import { TestProviders } from '../../mock';
import { useKibana } from '../../lib/kibana';
import { InputsModelId } from '../../store/inputs/constants';
import { useRefetchByRestartingSession } from './use_refetch_by_session';
@ -24,13 +16,8 @@ import { inputsActions } from '../../store/actions';
import type { Refetch } from '../../store/inputs/model';
import type { ISessionService } from '@kbn/data-plugin/public';
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const wrapper = ({ children }: { children: React.ReactNode }) => (
<TestProviders store={store}>{children}</TestProviders>
<TestProviders>{children}</TestProviders>
);
jest.mock('react-redux', () => {

View file

@ -6,19 +6,12 @@
*/
import React from 'react';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../mock';
import { createMockStore, mockGlobalState, TestProviders } from '../../mock';
import { render, fireEvent, waitFor } from '@testing-library/react';
import { SearchBarComponent } from '.';
import type { SavedQuery } from '@kbn/data-plugin/public';
import { FilterManager } from '@kbn/data-plugin/public';
import { coreMock } from '@kbn/core/public/mocks';
import { createStore } from '../../store';
import { inputsActions } from '../../store/inputs';
import { InputsModelId } from '../../store/inputs/constants';
@ -137,8 +130,7 @@ describe('SearchBarComponent', () => {
},
};
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state);
render(
<TestProviders store={store}>
@ -174,8 +166,7 @@ describe('SearchBarComponent', () => {
},
};
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state);
render(
<TestProviders store={store}>
@ -189,9 +180,7 @@ describe('SearchBarComponent', () => {
});
it('calls useUpdateUrlParam when query query changes', async () => {
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore();
render(
<TestProviders store={store}>
<SearchBarComponent {...props} />
@ -214,9 +203,7 @@ describe('SearchBarComponent', () => {
});
it('calls useUpdateUrlParam when filters change', async () => {
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore();
render(
<TestProviders store={store}>
<SearchBarComponent {...props} />
@ -250,9 +237,7 @@ describe('SearchBarComponent', () => {
});
it('calls useUpdateUrlParam when savedQuery changes', async () => {
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore();
render(
<TestProviders store={store}>
<SearchBarComponent {...props} />
@ -284,9 +269,7 @@ describe('SearchBarComponent', () => {
describe('Timerange', () => {
it('calls useUpdateUrlParam when global timerange changes', async () => {
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore();
render(
<TestProviders store={store}>
<SearchBarComponent {...props} />
@ -320,9 +303,7 @@ describe('SearchBarComponent', () => {
});
it('calls useUpdateUrlParam when timeline timerange changes', async () => {
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore();
render(
<TestProviders store={store}>
<SearchBarComponent {...props} />
@ -359,11 +340,9 @@ describe('SearchBarComponent', () => {
});
it('initializes timerange URL param with redux date on mount', async () => {
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
jest.clearAllMocks();
render(
<TestProviders store={store}>
<TestProviders>
<SearchBarComponent {...props} />
</TestProviders>
);

View file

@ -9,14 +9,7 @@ import React from 'react';
import { Sourcerer } from '.';
import { sourcererModel } from '../../store/sourcerer';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../mock';
import { createStore } from '../../store';
import { TestProviders } from '../../mock';
import { useSourcererDataView } from '../../containers/sourcerer';
import { useSignalHelpers } from '../../containers/sourcerer/use_signal_helpers';
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
@ -57,14 +50,11 @@ jest.mock('../../utils/global_query_string', () => {
};
});
let store: ReturnType<typeof createStore>;
const sourcererDataView = {
indicesExist: true,
loading: false,
};
describe('sourcerer on alerts page or rules details page', () => {
const { storage } = createSecuritySolutionStorageMock();
store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const testProps = {
scope: sourcererModel.SourcererScopeName.detections,
};
@ -85,7 +75,7 @@ describe('sourcerer on alerts page or rules details page', () => {
});
render(
<TestProviders store={store}>
<TestProviders>
<Sourcerer {...testProps} />
</TestProviders>
);

View file

@ -12,14 +12,7 @@ import { mount } from 'enzyme';
import { SourcererScopeName } from '../../store/sourcerer/model';
import { Sourcerer } from '.';
import { sourcererActions, sourcererModel } from '../../store/sourcerer';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../mock';
import { createStore } from '../../store';
import { createMockStore, mockGlobalState, TestProviders } from '../../mock';
import type { EuiSuperSelectOption } from '@elastic/eui/src/components/form/super_select/super_select_control';
import { fireEvent, waitFor, render } from '@testing-library/react';
import { useSourcererDataView } from '../../containers/sourcerer';
@ -81,19 +74,16 @@ const { id, patternList, title } = mockGlobalState.sourcerer.defaultDataView;
const patternListNoSignals = sortWithExcludesAtEnd(
patternList.filter((p) => p !== mockGlobalState.sourcerer.signalIndexName)
);
let store: ReturnType<typeof createStore>;
const sourcererDataView = {
indicesExist: true,
loading: false,
};
describe('Sourcerer component', () => {
const { storage } = createSecuritySolutionStorageMock();
const pollForSignalIndexMock = jest.fn();
let wrapper: ReactWrapper;
beforeEach(() => {
jest.clearAllMocks();
store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
(useSourcererDataView as jest.Mock).mockReturnValue(sourcererDataView);
(useSignalHelpers as jest.Mock).mockReturnValue({ signalIndexNeedsInit: false });
});
@ -104,7 +94,7 @@ describe('Sourcerer component', () => {
it('renders data view title', () => {
wrapper = mount(
<TestProviders store={store}>
<TestProviders>
<Sourcerer {...defaultProps} />
</TestProviders>
);
@ -120,7 +110,7 @@ describe('Sourcerer component', () => {
showAlertsOnlyCheckbox: true,
};
wrapper = mount(
<TestProviders store={store}>
<TestProviders>
<Sourcerer {...testProps} />
</TestProviders>
);
@ -159,7 +149,7 @@ describe('Sourcerer component', () => {
// because EuiSelectable uses a virtualized list, which isn't easily testable via test subjects
it('Mounts with all options selected', () => {
wrapper = mount(
<TestProviders store={store}>
<TestProviders>
<Sourcerer {...defaultProps} />
</TestProviders>
);
@ -174,40 +164,35 @@ describe('Sourcerer component', () => {
);
});
it('Removes duplicate options from title', () => {
store = createStore(
{
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
defaultDataView: {
const store = createMockStore({
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
defaultDataView: {
...mockGlobalState.sourcerer.defaultDataView,
id: '1234',
title: 'filebeat-*,auditbeat-*,auditbeat-*,auditbeat-*,auditbeat-*',
patternList: ['filebeat-*', 'auditbeat-*'],
},
kibanaDataViews: [
{
...mockGlobalState.sourcerer.defaultDataView,
id: '1234',
title: 'filebeat-*,auditbeat-*,auditbeat-*,auditbeat-*,auditbeat-*',
patternList: ['filebeat-*', 'auditbeat-*'],
},
kibanaDataViews: [
{
...mockGlobalState.sourcerer.defaultDataView,
id: '1234',
title: 'filebeat-*,auditbeat-*,auditbeat-*,auditbeat-*,auditbeat-*',
patternList: ['filebeat-*', 'auditbeat-*'],
},
],
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.default]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.default],
loading: false,
selectedDataViewId: '1234',
selectedPatterns: ['filebeat-*'],
},
],
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.default]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.default],
loading: false,
selectedDataViewId: '1234',
selectedPatterns: ['filebeat-*'],
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
wrapper = mount(
<TestProviders store={store}>
<Sourcerer {...defaultProps} />
@ -225,39 +210,34 @@ describe('Sourcerer component', () => {
expect(options.length).toEqual(2);
});
it('Disables options with no data', () => {
store = createStore(
{
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
defaultDataView: {
const store = createMockStore({
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
defaultDataView: {
...mockGlobalState.sourcerer.defaultDataView,
id: '1234',
title: 'filebeat-*,auditbeat-*,fakebeat-*',
patternList: ['filebeat-*', 'auditbeat-*'],
},
kibanaDataViews: [
{
...mockGlobalState.sourcerer.defaultDataView,
id: '1234',
title: 'filebeat-*,auditbeat-*,fakebeat-*',
patternList: ['filebeat-*', 'auditbeat-*'],
},
kibanaDataViews: [
{
...mockGlobalState.sourcerer.defaultDataView,
id: '1234',
title: 'filebeat-*,auditbeat-*,fakebeat-*',
patternList: ['filebeat-*', 'auditbeat-*'],
},
],
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.default]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.default],
selectedDataViewId: '1234',
selectedPatterns: ['filebeat-*'],
},
],
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.default]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.default],
selectedDataViewId: '1234',
selectedPatterns: ['filebeat-*'],
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
wrapper = mount(
<TestProviders store={store}>
<Sourcerer {...defaultProps} />
@ -306,7 +286,7 @@ describe('Sourcerer component', () => {
},
};
store = createStore(state2, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state2);
wrapper = mount(
<TestProviders store={store}>
<Sourcerer {...defaultProps} />
@ -351,7 +331,7 @@ describe('Sourcerer component', () => {
},
};
store = createStore(state2, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state2);
const { getByTestId, queryByTitle, queryAllByTestId } = render(
<TestProviders store={store}>
<Sourcerer scope={sourcererModel.SourcererScopeName.timeline} />
@ -371,34 +351,29 @@ describe('Sourcerer component', () => {
});
});
it('onSave dispatches setSelectedDataView', async () => {
store = createStore(
{
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
kibanaDataViews: [
mockGlobalState.sourcerer.defaultDataView,
{
...mockGlobalState.sourcerer.defaultDataView,
id: '1234',
title: 'filebeat-*',
patternList: ['filebeat-*'],
},
],
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.default]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.default],
selectedDataViewId: id,
selectedPatterns: patternListNoSignals.slice(0, 2),
},
const store = createMockStore({
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
kibanaDataViews: [
mockGlobalState.sourcerer.defaultDataView,
{
...mockGlobalState.sourcerer.defaultDataView,
id: '1234',
title: 'filebeat-*',
patternList: ['filebeat-*'],
},
],
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.default]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.default],
selectedDataViewId: id,
selectedPatterns: patternListNoSignals.slice(0, 2),
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
wrapper = mount(
<TestProviders store={store}>
<Sourcerer {...defaultProps} />
@ -428,34 +403,29 @@ describe('Sourcerer component', () => {
});
it('onSave updates the URL param', () => {
store = createStore(
{
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
kibanaDataViews: [
mockGlobalState.sourcerer.defaultDataView,
{
...mockGlobalState.sourcerer.defaultDataView,
id: '1234',
title: 'filebeat-*',
patternList: ['filebeat-*'],
},
],
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.default]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.default],
selectedDataViewId: id,
selectedPatterns: patternListNoSignals.slice(0, 2),
},
const store = createMockStore({
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
kibanaDataViews: [
mockGlobalState.sourcerer.defaultDataView,
{
...mockGlobalState.sourcerer.defaultDataView,
id: '1234',
title: 'filebeat-*',
patternList: ['filebeat-*'],
},
],
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.default]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.default],
selectedDataViewId: id,
selectedPatterns: patternListNoSignals.slice(0, 2),
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
wrapper = mount(
<TestProviders store={store}>
@ -472,7 +442,7 @@ describe('Sourcerer component', () => {
it('resets to default index pattern', async () => {
wrapper = mount(
<TestProviders store={store}>
<TestProviders>
<Sourcerer {...defaultProps} />
</TestProviders>
);
@ -504,26 +474,21 @@ describe('Sourcerer component', () => {
});
});
it('disables saving when no index patterns are selected', () => {
store = createStore(
{
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
kibanaDataViews: [
mockGlobalState.sourcerer.defaultDataView,
{
...mockGlobalState.sourcerer.defaultDataView,
id: '1234',
title: 'auditbeat-*',
patternList: ['auditbeat-*'],
},
],
},
const store = createMockStore({
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
kibanaDataViews: [
mockGlobalState.sourcerer.defaultDataView,
{
...mockGlobalState.sourcerer.defaultDataView,
id: '1234',
title: 'auditbeat-*',
patternList: ['auditbeat-*'],
},
],
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
wrapper = mount(
<TestProviders store={store}>
<Sourcerer {...defaultProps} />
@ -572,7 +537,7 @@ describe('Sourcerer component', () => {
},
};
store = createStore(state2, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state2);
const el = render(
<TestProviders store={store}>
<Sourcerer scope={sourcererModel.SourcererScopeName.timeline} />
@ -620,7 +585,7 @@ describe('Sourcerer component', () => {
},
};
store = createStore(state2, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state2);
wrapper = mount(
<TestProviders store={store}>
<Sourcerer {...defaultProps} />
@ -644,7 +609,7 @@ describe('Sourcerer component', () => {
});
mount(
<TestProviders store={store}>
<TestProviders>
<Sourcerer scope={sourcererModel.SourcererScopeName.timeline} />
</TestProviders>
);
@ -659,7 +624,7 @@ describe('Sourcerer component', () => {
});
mount(
<TestProviders store={store}>
<TestProviders>
<Sourcerer scope={sourcererModel.SourcererScopeName.default} />
</TestProviders>
);
@ -674,7 +639,7 @@ describe('Sourcerer component', () => {
});
mount(
<TestProviders store={store}>
<TestProviders>
<Sourcerer scope={sourcererModel.SourcererScopeName.timeline} />
</TestProviders>
);
@ -688,7 +653,7 @@ describe('Sourcerer component', () => {
});
mount(
<TestProviders store={store}>
<TestProviders>
<Sourcerer scope={sourcererModel.SourcererScopeName.detections} />
</TestProviders>
);

View file

@ -13,14 +13,7 @@ import { cloneDeep } from 'lodash';
import { initialSourcererState, SourcererScopeName } from '../../store/sourcerer/model';
import { Sourcerer } from '.';
import { sourcererActions, sourcererModel } from '../../store/sourcerer';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../mock';
import { createStore } from '../../store';
import { createMockStore, mockGlobalState, TestProviders } from '../../mock';
import { useSourcererDataView } from '../../containers/sourcerer';
import { useSignalHelpers } from '../../containers/sourcerer/use_signal_helpers';
import { TimelineId } from '../../../../common/types/timeline';
@ -81,7 +74,6 @@ const { id, patternList } = mockGlobalState.sourcerer.defaultDataView;
const patternListNoSignals = sortWithExcludesAtEnd(
patternList.filter((p) => p !== mockGlobalState.sourcerer.signalIndexName)
);
let store: ReturnType<typeof createStore>;
const sourcererDataView = {
indicesExist: true,
loading: false,
@ -94,8 +86,7 @@ describe('No data', () => {
...initialSourcererState,
},
};
const { storage } = createSecuritySolutionStorageMock();
let store = createMockStore(mockNoIndicesState);
const pollForSignalIndexMock = jest.fn();
beforeEach(() => {
@ -107,7 +98,7 @@ describe('No data', () => {
pollForSignalIndex: pollForSignalIndexMock,
signalIndexNeedsInit: false,
});
store = createStore(mockNoIndicesState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(mockNoIndicesState);
jest.clearAllMocks();
});
@ -141,7 +132,6 @@ describe('No data', () => {
});
describe('Update available', () => {
const { storage } = createSecuritySolutionStorageMock();
const state2 = {
...mockGlobalState,
sourcerer: {
@ -174,7 +164,7 @@ describe('Update available', () => {
},
},
};
let store = createMockStore(state2);
const pollForSignalIndexMock = jest.fn();
beforeEach(() => {
(useSignalHelpers as jest.Mock).mockReturnValue({
@ -185,7 +175,7 @@ describe('Update available', () => {
...sourcererDataView,
activePatterns: ['myFakebeat-*'],
});
store = createStore(state2, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(state2);
render(
<TestProviders store={store}>
@ -265,7 +255,6 @@ describe('Update available', () => {
});
describe('Update available for timeline template', () => {
const { storage } = createSecuritySolutionStorageMock();
const state2 = {
...mockGlobalState,
timeline: {
@ -308,13 +297,14 @@ describe('Update available for timeline template', () => {
},
},
};
let store = createMockStore(state2);
beforeEach(() => {
(useSourcererDataView as jest.Mock).mockReturnValue({
...sourcererDataView,
activePatterns: ['myFakebeat-*'],
});
store = createStore(state2, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(state2);
render(
<TestProviders store={store}>
@ -341,7 +331,6 @@ describe('Update available for timeline template', () => {
});
describe('Missing index patterns', () => {
const { storage } = createSecuritySolutionStorageMock();
const state2 = {
...mockGlobalState,
timeline: {
@ -384,7 +373,7 @@ describe('Missing index patterns', () => {
},
},
};
let store = createMockStore(state2);
beforeEach(() => {
const pollForSignalIndexMock = jest.fn();
(useSignalHelpers as jest.Mock).mockReturnValue({
@ -404,7 +393,7 @@ describe('Missing index patterns', () => {
});
const state3 = cloneDeep(state2);
state3.timeline.timelineById[TimelineId.active].timelineType = TimelineType.default;
store = createStore(state3, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(state3);
render(
<TestProviders store={store}>
@ -435,7 +424,7 @@ describe('Missing index patterns', () => {
...sourcererDataView,
activePatterns: ['myFakebeat-*'],
});
store = createStore(state2, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(state2);
render(
<TestProviders store={store}>
@ -493,8 +482,7 @@ describe('Sourcerer integration tests', () => {
},
};
const { storage } = createSecuritySolutionStorageMock();
let store = createMockStore(state);
beforeEach(() => {
const pollForSignalIndexMock = jest.fn();
(useSignalHelpers as jest.Mock).mockReturnValue({
@ -506,7 +494,7 @@ describe('Sourcerer integration tests', () => {
...sourcererDataView,
activePatterns: ['myFakebeat-*'],
});
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(state);
jest.clearAllMocks();
});

View file

@ -13,14 +13,7 @@ import { SourcererScopeName } from '../../store/sourcerer/model';
import { Sourcerer } from '.';
import { useSignalHelpers } from '../../containers/sourcerer/use_signal_helpers';
import { sourcererActions, sourcererModel } from '../../store/sourcerer';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../mock';
import { createStore } from '../../store';
import { createMockStore, mockGlobalState, TestProviders } from '../../mock';
import { sortWithExcludesAtEnd } from '../../../../common/utils/sourcerer';
import { useSourcererDataView } from '../../containers/sourcerer';
@ -76,7 +69,6 @@ const { id, patternList } = mockGlobalState.sourcerer.defaultDataView;
const patternListNoSignals = sortWithExcludesAtEnd(
patternList.filter((p) => p !== mockGlobalState.sourcerer.signalIndexName)
);
let store: ReturnType<typeof createStore>;
const sourcererDataView = {
indicesExist: true,
loading: false,
@ -108,8 +100,6 @@ describe('Sourcerer integration tests', () => {
},
};
const { storage } = createSecuritySolutionStorageMock();
beforeEach(() => {
const pollForSignalIndexMock = jest.fn();
(useSignalHelpers as jest.Mock).mockReturnValue({
@ -121,13 +111,12 @@ describe('Sourcerer integration tests', () => {
...sourcererDataView,
activePatterns: ['myFakebeat-*'],
});
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
jest.clearAllMocks();
});
it('Selects a different index pattern', async () => {
const wrapper = mount(
<TestProviders store={store}>
<TestProviders store={createMockStore(state)}>
<Sourcerer {...defaultProps} />
</TestProviders>
);

View file

@ -11,14 +11,7 @@ import { render, cleanup, fireEvent, screen, waitFor } from '@testing-library/re
import { SourcererScopeName } from '../../store/sourcerer/model';
import { Sourcerer } from '.';
import { sourcererModel } from '../../store/sourcerer';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../mock';
import { createStore } from '../../store';
import { createMockStore, mockGlobalState, TestProviders } from '../../mock';
import { useSourcererDataView } from '../../containers/sourcerer';
import { useSignalHelpers } from '../../containers/sourcerer/use_signal_helpers';
@ -60,15 +53,12 @@ jest.mock('../../utils/global_query_string', () => {
const { id } = mockGlobalState.sourcerer.defaultDataView;
let store: ReturnType<typeof createStore>;
const sourcererDataView = {
indicesExist: true,
loading: false,
};
describe('timeline sourcerer', () => {
const { storage } = createSecuritySolutionStorageMock();
store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const testProps = {
scope: sourcererModel.SourcererScopeName.timeline,
};
@ -84,7 +74,7 @@ describe('timeline sourcerer', () => {
});
render(
<TestProviders store={store}>
<TestProviders>
<Sourcerer {...testProps} />
</TestProviders>
);
@ -165,16 +155,8 @@ describe('timeline sourcerer', () => {
},
};
store = createStore(
state2,
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
render(
<TestProviders store={store}>
<TestProviders store={createMockStore(state2)}>
<Sourcerer scope={sourcererModel.SourcererScopeName.timeline} />
</TestProviders>
);

View file

@ -11,15 +11,8 @@ import { Provider as ReduxStoreProvider } from 'react-redux';
import { DEFAULT_TIMEPICKER_QUICK_RANGES } from '../../../../common/constants';
import { useUiSetting$ } from '../../lib/kibana';
import {
mockGlobalState,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../mock';
import { mockGlobalState, createMockStore } from '../../mock';
import { createUseUiSetting$Mock } from '../../lib/kibana/kibana_react.mock';
import type { State } from '../../store';
import { createStore } from '../../store';
import { SuperDatePicker, makeMapStateToProps } from '.';
import { cloneDeep } from 'lodash/fp';
@ -27,6 +20,7 @@ import { InputsModelId } from '../../store/inputs/constants';
jest.mock('../../lib/kibana');
const mockUseUiSetting$ = useUiSetting$ as jest.Mock;
const state = mockGlobalState;
const timepickerRanges = [
{
from: 'now/d',
@ -82,13 +76,11 @@ const timepickerRanges = [
describe('SIEM Super Date Picker', () => {
describe('#SuperDatePicker', () => {
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
let store = createMockStore();
beforeEach(() => {
jest.clearAllMocks();
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore();
mockUseUiSetting$.mockImplementation((key, defaultValue) => {
const useUiSetting$Mock = createUseUiSetting$Mock();

View file

@ -6,12 +6,12 @@
*/
import { ALERT_WORKFLOW_ASSIGNEE_IDS } from '@kbn/rule-data-utils';
import { TestProviders } from '@kbn/timelines-plugin/public/mock';
import type { BulkActionsConfig } from '@kbn/triggers-actions-ui-plugin/public/types';
import type { TimelineItem } from '@kbn/triggers-actions-ui-plugin/public/application/sections/alerts_table/bulk_actions/components/toolbar';
import { act, fireEvent, render } from '@testing-library/react';
import { renderHook } from '@testing-library/react-hooks';
import { TestProviders } from '../../../mock';
import type {
UseBulkAlertAssigneesItemsProps,
UseBulkAlertAssigneesPanel,

View file

@ -6,9 +6,9 @@
*/
import { ALERT_WORKFLOW_TAGS } from '@kbn/rule-data-utils';
import { TestProviders } from '@kbn/timelines-plugin/public/mock';
import { act, fireEvent, render } from '@testing-library/react';
import { renderHook } from '@testing-library/react-hooks';
import { TestProviders } from '../../../mock';
import type {
UseBulkAlertTagsItemsProps,
UseBulkAlertTagsPanel,

View file

@ -11,16 +11,8 @@ import React from 'react';
import { waitFor } from '@testing-library/react';
import '../../mock/match_media';
import { mockBrowserFields } from '../../containers/source/mock';
import {
mockGlobalState,
TestProviders,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
mockIndexPattern,
} from '../../mock';
import { mockGlobalState, TestProviders, mockIndexPattern, createMockStore } from '../../mock';
import type { State } from '../../store';
import { createStore } from '../../store';
import type { Props } from './top_n';
import { StatefulTopN } from '.';
@ -149,8 +141,7 @@ const state: State = {
},
};
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state);
const testProps = {
browserFields: mockBrowserFields,

View file

@ -7,15 +7,8 @@
import { render } from '@testing-library/react';
import type { RenderResult } from '@testing-library/react';
import React from 'react';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../mock';
import { createMockStore, mockGlobalState, TestProviders } from '../../mock';
import type { State } from '../../store';
import { createStore } from '../../store';
import { kpiHostMetricLensAttributes } from './lens_attributes/hosts/kpi_host_metric';
import { LensEmbeddable } from './lens_embeddable';
import { useKibana } from '../../lib/kibana';
@ -77,8 +70,7 @@ describe('LensEmbeddable', () => {
},
};
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state);
const mockEmbeddableComponent = jest
.fn()
.mockReturnValue(<div data-test-subj="embeddableComponent" />);

View file

@ -7,15 +7,7 @@
import React from 'react';
import { cloneDeep } from 'lodash/fp';
import {
TestProviders,
mockGlobalState,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../mock';
import type { State } from '../../store';
import { createStore } from '../../store';
import { TestProviders, mockGlobalState, createMockStore } from '../../mock';
import type { LensAttributes } from './types';
export const queryFromSearchBar = {
@ -43,13 +35,8 @@ export const filterFromSearchBar = [
},
];
export const mockCreateStoreWithQueryFilters = () => {
const { storage } = createSecuritySolutionStorageMock();
const state: State = mockGlobalState;
const myState = cloneDeep(state);
const mockCreateStoreWithQueryFilters = () => {
const myState = cloneDeep(mockGlobalState);
myState.inputs = {
...myState.inputs,
global: {
@ -58,7 +45,7 @@ export const mockCreateStoreWithQueryFilters = () => {
filters: filterFromSearchBar,
},
};
return createStore(myState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
return createMockStore(myState);
};
export const wrapper = ({ children }: { children: React.ReactElement }) => (

View file

@ -5,14 +5,7 @@
* 2.0.
*/
import { createStore } from '../../store';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../mock';
import { createMockStore, mockGlobalState, TestProviders } from '../../mock';
import { useVisualizationResponse } from './use_visualization_response';
import { renderHook } from '@testing-library/react-hooks';
import React from 'react';
@ -45,8 +38,7 @@ describe('useVisualizationResponse', () => {
},
};
const { storage } = createSecuritySolutionStorageMock();
const mockStore = createStore(mockState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const mockStore = createMockStore(mockState);
const visualizationId = 'testId';
beforeEach(() => {
jest.clearAllMocks();

View file

@ -12,15 +12,7 @@ import { kpiHostMetricLensAttributes } from './lens_attributes/hosts/kpi_host_me
import { VisualizationEmbeddable } from './visualization_embeddable';
import * as inputActions from '../../store/inputs/actions';
import { InputsModelId } from '../../store/inputs/constants';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../mock';
import { createStore } from '../../store';
import type { State } from '../../store';
import { createMockStore, mockGlobalState, TestProviders } from '../../mock';
import { useRefetchByRestartingSession } from '../page/use_refetch_by_session';
import { getRiskScoreDonutAttributes } from '../../../entity_analytics/lens_attributes/risk_score_donut';
@ -36,11 +28,6 @@ const mockRefetchByRestartingSession = jest.fn();
const mockRefetchByDeletingSession = jest.fn();
const mockSetQuery = jest.spyOn(inputActions, 'setQuery');
const mockDeleteQuery = jest.spyOn(inputActions, 'deleteOneQuery');
const state: State = {
...mockGlobalState,
};
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
describe('VisualizationEmbeddable', () => {
describe('when isDonut = false', () => {
@ -59,7 +46,7 @@ describe('VisualizationEmbeddable', () => {
refetchByDeletingSession: mockRefetchByDeletingSession,
});
res = render(
<TestProviders store={store}>
<TestProviders>
<VisualizationEmbeddable
id="testId"
lensAttributes={kpiHostMetricLensAttributes}
@ -121,7 +108,7 @@ describe('VisualizationEmbeddable', () => {
},
},
};
const mockStore = createStore(mockState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const mockStore = createMockStore(mockState);
beforeEach(() => {
jest.clearAllMocks();
@ -177,7 +164,7 @@ describe('VisualizationEmbeddable', () => {
refetchByRestartingSession: mockRefetchByRestartingSession,
});
res = render(
<TestProviders store={store}>
<TestProviders>
<VisualizationEmbeddable
getLensAttributes={getRiskScoreDonutAttributes}
id="testId"

View file

@ -18,19 +18,11 @@ import {
DEFAULT_INDEX_PATTERN,
SecurityPageName,
} from '../../../../common/constants';
import { createStore } from '../../store';
import {
useUserInfo,
initialState as userInfoState,
} from '../../../detections/components/user_info';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
mockSourcererState,
TestProviders,
} from '../../mock';
import { mockGlobalState, mockSourcererState, TestProviders, createMockStore } from '../../mock';
import type { SelectedDataView } from '../../store/sourcerer/model';
import { SourcererScopeName } from '../../store/sourcerer/model';
import * as source from '../source/use_data_view';
@ -155,12 +147,11 @@ jest.mock('../../lib/kibana', () => ({
}));
describe('Sourcerer Hooks', () => {
const { storage } = createSecuritySolutionStorageMock();
let store: ReturnType<typeof createStore>;
let store = createMockStore();
beforeEach(() => {
jest.clearAllMocks();
store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore();
mockUseUserInfo.mockImplementation(() => userInfoState);
});
it('initializes loading default and timeline index patterns', async () => {
@ -192,23 +183,18 @@ describe('Sourcerer Hooks', () => {
};
(createSourcererDataView as jest.Mock).mockResolvedValue(mockNewDataViews);
store = createStore(
{
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
signalIndexName: null,
defaultDataView: {
...mockGlobalState.sourcerer.defaultDataView,
title: DEFAULT_INDEX_PATTERN.join(','),
patternList: DEFAULT_INDEX_PATTERN,
},
store = createMockStore({
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
signalIndexName: null,
defaultDataView: {
...mockGlobalState.sourcerer.defaultDataView,
title: DEFAULT_INDEX_PATTERN.join(','),
patternList: DEFAULT_INDEX_PATTERN,
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
await act(async () => {
mockUseUserInfo.mockImplementation(() => ({
...userInfoState,
@ -295,22 +281,17 @@ describe('Sourcerer Hooks', () => {
});
it('calls addWarning if defaultDataView has an error', async () => {
store = createStore(
{
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
signalIndexName: null,
defaultDataView: {
...mockGlobalState.sourcerer.defaultDataView,
error: true,
},
store = createMockStore({
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
signalIndexName: null,
defaultDataView: {
...mockGlobalState.sourcerer.defaultDataView,
error: true,
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
await act(async () => {
renderHook<string, void>(() => useInitSourcerer(), {
wrapper: ({ children }) => <Provider store={store}>{children}</Provider>,
@ -330,23 +311,18 @@ describe('Sourcerer Hooks', () => {
// puts us in the catch block, but the addError toast is not called
(createSourcererDataView as jest.Mock).mockImplementation(mockCreateSourcererDataView);
store = createStore(
{
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
signalIndexName: null,
defaultDataView: {
...mockGlobalState.sourcerer.defaultDataView,
title: DEFAULT_INDEX_PATTERN.join(','),
patternList: DEFAULT_INDEX_PATTERN,
},
store = createMockStore({
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
signalIndexName: null,
defaultDataView: {
...mockGlobalState.sourcerer.defaultDataView,
title: DEFAULT_INDEX_PATTERN.join(','),
patternList: DEFAULT_INDEX_PATTERN,
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
await act(async () => {
mockUseUserInfo.mockImplementation(() => ({
...userInfoState,
@ -374,23 +350,18 @@ describe('Sourcerer Hooks', () => {
throw Error('fake error');
});
store = createStore(
{
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
signalIndexName: null,
defaultDataView: {
...mockGlobalState.sourcerer.defaultDataView,
title: DEFAULT_INDEX_PATTERN.join(','),
patternList: DEFAULT_INDEX_PATTERN,
},
store = createMockStore({
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
signalIndexName: null,
defaultDataView: {
...mockGlobalState.sourcerer.defaultDataView,
title: DEFAULT_INDEX_PATTERN.join(','),
patternList: DEFAULT_INDEX_PATTERN,
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
await act(async () => {
mockUseUserInfo.mockImplementation(() => ({
...userInfoState,
@ -448,24 +419,19 @@ describe('Sourcerer Hooks', () => {
});
});
it('index field search called twice when default and timeline have different dataViewId', async () => {
store = createStore(
{
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.timeline]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.timeline],
selectedDataViewId: 'different-id',
},
store = createMockStore({
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.timeline]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.timeline],
selectedDataViewId: 'different-id',
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
await act(async () => {
const { rerender, waitForNextUpdate } = renderHook<string, void>(() => useInitSourcerer(), {
wrapper: ({ children }) => <Provider store={store}>{children}</Provider>,
@ -505,25 +471,20 @@ describe('Sourcerer Hooks', () => {
});
it('does needToBeInit if scope is default and selectedPatterns/missingPatterns are empty', async () => {
store = createStore(
{
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.default]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.default],
selectedPatterns: [],
missingPatterns: [],
},
store = createMockStore({
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.default]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.default],
selectedPatterns: [],
missingPatterns: [],
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
await act(async () => {
const { rerender, waitForNextUpdate } = renderHook<string, void>(() => useInitSourcerer(), {
wrapper: ({ children }) => <Provider store={store}>{children}</Provider>,
@ -541,30 +502,25 @@ describe('Sourcerer Hooks', () => {
});
it('does needToBeInit and skipScopeUpdate=false if scope is timeline and selectedPatterns/missingPatterns are empty', async () => {
store = createStore(
{
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
kibanaDataViews: [
...mockGlobalState.sourcerer.kibanaDataViews,
{ ...mockSourcererState.defaultDataView, id: 'something-weird', patternList: [] },
],
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.timeline]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.timeline],
selectedDataViewId: 'something-weird',
selectedPatterns: [],
missingPatterns: [],
},
store = createMockStore({
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
kibanaDataViews: [
...mockGlobalState.sourcerer.kibanaDataViews,
{ ...mockSourcererState.defaultDataView, id: 'something-weird', patternList: [] },
],
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.timeline]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.timeline],
selectedDataViewId: 'something-weird',
selectedPatterns: [],
missingPatterns: [],
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
await act(async () => {
const { rerender, waitForNextUpdate } = renderHook<string, void>(() => useInitSourcerer(), {
wrapper: ({ children }) => <Provider store={store}>{children}</Provider>,
@ -583,30 +539,25 @@ describe('Sourcerer Hooks', () => {
});
it('does needToBeInit and skipScopeUpdate=true if scope is timeline and selectedPatterns have value', async () => {
store = createStore(
{
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
kibanaDataViews: [
...mockGlobalState.sourcerer.kibanaDataViews,
{ ...mockSourcererState.defaultDataView, id: 'something-weird', patternList: [] },
],
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.timeline]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.timeline],
selectedDataViewId: 'something-weird',
selectedPatterns: ['ohboy'],
missingPatterns: [],
},
store = createMockStore({
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
kibanaDataViews: [
...mockGlobalState.sourcerer.kibanaDataViews,
{ ...mockSourcererState.defaultDataView, id: 'something-weird', patternList: [] },
],
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.timeline]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.timeline],
selectedDataViewId: 'something-weird',
selectedPatterns: ['ohboy'],
missingPatterns: [],
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
await act(async () => {
const { rerender, waitForNextUpdate } = renderHook<string, void>(() => useInitSourcerer(), {
wrapper: ({ children }) => <Provider store={store}>{children}</Provider>,
@ -625,34 +576,29 @@ describe('Sourcerer Hooks', () => {
});
it('does not needToBeInit if scope is timeline and data view has patternList', async () => {
store = createStore(
{
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
kibanaDataViews: [
...mockGlobalState.sourcerer.kibanaDataViews,
{
...mockSourcererState.defaultDataView,
id: 'something-weird',
patternList: ['ohboy'],
},
],
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.timeline]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.timeline],
selectedDataViewId: 'something-weird',
selectedPatterns: [],
missingPatterns: [],
},
store = createMockStore({
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
kibanaDataViews: [
...mockGlobalState.sourcerer.kibanaDataViews,
{
...mockSourcererState.defaultDataView,
id: 'something-weird',
patternList: ['ohboy'],
},
],
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.timeline]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.timeline],
selectedDataViewId: 'something-weird',
selectedPatterns: [],
missingPatterns: [],
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
await act(async () => {
const { rerender, waitForNextUpdate } = renderHook<string, void>(() => useInitSourcerer(), {
wrapper: ({ children }) => <Provider store={store}>{children}</Provider>,
@ -673,34 +619,29 @@ describe('Sourcerer Hooks', () => {
describe('useSourcererDataView', () => {
it('Should put any excludes in the index pattern at the end of the pattern list, and sort both the includes and excludes', async () => {
await act(async () => {
store = createStore(
{
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.default]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.default],
selectedPatterns: [
'-packetbeat-*',
'endgame-*',
'auditbeat-*',
'filebeat-*',
'winlogbeat-*',
'-filebeat-*',
'packetbeat-*',
'traces-apm*',
'apm-*-transaction*',
],
},
store = createMockStore({
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.default]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.default],
selectedPatterns: [
'-packetbeat-*',
'endgame-*',
'auditbeat-*',
'filebeat-*',
'winlogbeat-*',
'-filebeat-*',
'packetbeat-*',
'traces-apm*',
'apm-*-transaction*',
],
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
const { result, rerender, waitForNextUpdate } = renderHook<
SourcererScopeName,
SelectedDataView

View file

@ -6,17 +6,10 @@
*/
import React from 'react';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../mock';
import { createMockStore, mockGlobalState, TestProviders } from '../../mock';
import { act, renderHook } from '@testing-library/react-hooks';
import { useSignalHelpers } from './use_signal_helpers';
import type { State } from '../../store';
import { createStore } from '../../store';
import { createSourcererDataView } from './create_sourcerer_data_view';
const mockCreateSourcererDataView = jest.fn(() => {
@ -76,8 +69,7 @@ describe('useSignalHelpers', () => {
],
},
};
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state);
await act(async () => {
const { result, waitForNextUpdate } = renderHook(() => useSignalHelpers(), {
wrapper: ({ children }) => <TestProviders store={store}>{children}</TestProviders>,
@ -106,8 +98,7 @@ describe('useSignalHelpers', () => {
],
},
};
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state);
await act(async () => {
const { result, waitForNextUpdate } = renderHook(() => useSignalHelpers(), {
wrapper: ({ children }) => <TestProviders store={store}>{children}</TestProviders>,
@ -138,8 +129,7 @@ describe('useSignalHelpers', () => {
],
},
};
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state);
await act(async () => {
const { result, waitForNextUpdate } = renderHook(() => useSignalHelpers(), {
wrapper: ({ children }) => <TestProviders store={store}>{children}</TestProviders>,
@ -173,8 +163,7 @@ describe('useSignalHelpers', () => {
],
},
};
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state);
await act(async () => {
const { result, waitForNextUpdate } = renderHook(() => useSignalHelpers(), {
wrapper: ({ children }) => <TestProviders store={store}>{children}</TestProviders>,

View file

@ -30,13 +30,11 @@ import type { StartPlugins, StartServices } from '../../../types';
import { depsStartMock } from './dependencies_start_mock';
import type { MiddlewareActionSpyHelper } from '../../store/test_utils';
import { createSpyMiddleware } from '../../store/test_utils';
import { kibanaObservable } from '../test_providers';
import type { State } from '../../store';
import { createStore } from '../../store';
import { AppRootProvider } from './app_root_provider';
import { managementMiddlewareFactory } from '../../../management/store/middleware';
import { createStartServicesMock } from '../../lib/kibana/kibana_react.mock';
import { SUB_PLUGINS_REDUCER, mockGlobalState, createSecuritySolutionStorageMock } from '..';
import { SUB_PLUGINS_REDUCER, mockGlobalState, createMockStore } from '..';
import type { ExperimentalFeatures } from '../../../../common/experimental_features';
import { APP_UI_ID, APP_PATH } from '../../../../common/constants';
import { KibanaServices } from '../../lib/kibana';
@ -201,7 +199,6 @@ export const createAppRootMockRenderer = (): AppContextTestRender => {
const coreStart = createCoreStartMock(history);
const depsStart = depsStartMock();
const middlewareSpy = createSpyMiddleware();
const { storage } = createSecuritySolutionStorageMock();
const startServices: StartServices = createStartServicesMock(coreStart);
const storeReducer = {
@ -211,11 +208,11 @@ export const createAppRootMockRenderer = (): AppContextTestRender => {
app: experimentalFeaturesReducer,
};
const store = createStore(
mockGlobalState,
const store = createMockStore(
undefined,
storeReducer,
kibanaObservable,
storage,
undefined,
undefined,
// @ts-expect-error ts upgrade v4.7.4
[...managementMiddlewareFactory(coreStart, depsStart), middlewareSpy.actionSpyMiddleware]
);

View file

@ -8,7 +8,7 @@
import { euiLightVars } from '@kbn/ui-theme';
import React from 'react';
import { Provider as ReduxStoreProvider } from 'react-redux';
import { BehaviorSubject, Subject } from 'rxjs';
import { Subject } from 'rxjs';
import { ThemeProvider } from 'styled-components';
import type { CoreStart } from '@kbn/core/public';
import { createKibanaReactContext } from '@kbn/kibana-react-plugin/public';
@ -16,16 +16,11 @@ import { I18nProvider } from '@kbn/i18n-react';
import { CellActionsProvider } from '@kbn/cell-actions';
import { NavigationProvider } from '@kbn/security-solution-navigation';
import { CASES_FEATURE_ID } from '../../../common';
import { createStore } from '../store';
import { mockGlobalState } from './global_state';
import { SUB_PLUGINS_REDUCER } from './utils';
import { createSecuritySolutionStorageMock } from './mock_local_storage';
import type { StartServices } from '../../types';
import { ReactQueryClientProvider } from '../containers/query_client/query_client_provider';
import { createMockStore } from './test_providers';
export const kibanaObservable = new BehaviorSubject({} as unknown as StartServices);
const { storage } = createSecuritySolutionStorageMock();
export const kibanaMock = {} as unknown as StartServices;
const uiSettings = {
get: (setting: string) => {
@ -101,7 +96,7 @@ const KibanaReactContext = createKibanaReactContext(coreMock);
* To reuse TestProvidersComponent here, we need to remove all references to jest from mocks.
*/
export const StorybookProviders: React.FC = ({ children }) => {
const store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore();
return (
<I18nProvider>

View file

@ -12,8 +12,7 @@ import React from 'react';
import type { DropResult, ResponderProvided } from '@hello-pangea/dnd';
import { DragDropContext } from '@hello-pangea/dnd';
import { Provider as ReduxStoreProvider } from 'react-redux';
import type { Store } from 'redux';
import { BehaviorSubject } from 'rxjs';
import type { Dispatch, Middleware, Store } from 'redux';
import { ThemeProvider } from 'styled-components';
import type { Capabilities } from '@kbn/core/public';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
@ -38,8 +37,8 @@ import { createSecuritySolutionStorageMock, localStorageMock } from './mock_loca
import { ASSISTANT_FEATURE_ID, CASES_FEATURE_ID } from '../../../common/constants';
import { UserPrivilegesProvider } from '../components/user_privileges/user_privileges_context';
import { MockDiscoverInTimelineContext } from '../components/discover_in_timeline/mocks/discover_in_timeline_provider';
const state: State = mockGlobalState;
import type { AppAction } from '../store/actions';
import type { Immutable } from '../../../common/endpoint/types';
interface Props {
children?: React.ReactNode;
@ -48,19 +47,29 @@ interface Props {
cellActions?: Action[];
}
export const kibanaObservable = new BehaviorSubject(createStartServicesMock());
export const kibanaMock = createStartServicesMock();
Object.defineProperty(window, 'localStorage', {
value: localStorageMock(),
});
window.scrollTo = jest.fn();
const MockKibanaContextProvider = createKibanaContextProviderMock();
const { storage } = createSecuritySolutionStorageMock();
const { storage: storageMock } = createSecuritySolutionStorageMock();
export const createMockStore = (
state: State = mockGlobalState,
pluginsReducer: typeof SUB_PLUGINS_REDUCER = SUB_PLUGINS_REDUCER,
kibana: typeof kibanaMock = kibanaMock,
storage: typeof storageMock = storageMock,
additionalMiddleware?: Array<Middleware<{}, State, Dispatch<AppAction | Immutable<AppAction>>>>
) => {
return createStore(state, pluginsReducer, kibana, storage, additionalMiddleware);
};
/** A utility for wrapping children in the providers required to run most tests */
export const TestProvidersComponent: React.FC<Props> = ({
children,
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage),
store = createMockStore(),
onDragEnd = jest.fn(),
cellActions = [],
}) => {
@ -118,7 +127,7 @@ const UpsellingProviderMock = ({ children }: React.PropsWithChildren<{}>) => {
*/
const TestProvidersWithPrivilegesComponent: React.FC<Props> = ({
children,
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage),
store = createMockStore(),
onDragEnd = jest.fn(),
cellActions = [],
}) => {

View file

@ -6,17 +6,7 @@
*/
import '../../mock/match_media';
import {
mockGlobalState,
SUB_PLUGINS_REDUCER,
defaultHeaders,
createSecuritySolutionStorageMock,
kibanaObservable,
} from '../../mock';
import type { State } from '..';
import { createStore } from '..';
import { defaultHeaders, createSecuritySolutionStorageMock, createMockStore } from '../../mock';
import { addTableInStorage } from '../../../timelines/containers/local_storage';
import { Direction } from '../../../../common/search_strategy';
import { TableId, dataTableActions } from '@kbn/securitysolution-data-table';
@ -37,12 +27,11 @@ jest.mock('../../../timelines/containers/local_storage');
const addTableInStorageMock = addTableInStorage as jest.Mock;
describe('DataTable localStorage middleware', () => {
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
let store = createMockStore(undefined, undefined, undefined, storage);
beforeEach(() => {
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(undefined, undefined, undefined, storage);
});
it('should call the storage method with the most recent table state', () => {

View file

@ -17,8 +17,6 @@ import type {
import { applyMiddleware, createStore as createReduxStore } from 'redux';
import { composeWithDevTools } from 'redux-devtools-extension/developmentOnly';
import type { EnhancerOptions } from 'redux-devtools-extension';
import type { Observable } from 'rxjs';
import { BehaviorSubject, pluck } from 'rxjs';
import type { Storage } from '@kbn/kibana-utils-plugin/public';
import type { CoreStart } from '@kbn/core/public';
import reduceReducers from 'reduce-reducers';
@ -41,7 +39,7 @@ import type { State } from './types';
import type { TimelineState } from '../../timelines/store/types';
import type { KibanaDataView, SourcererModel, SourcererDataView } from './sourcerer/model';
import { initDataView } from './sourcerer/model';
import type { AppObservableLibs, StartedSubPlugins, StartPlugins } from '../../types';
import type { StartedSubPlugins, StartPlugins } from '../../types';
import type { ExperimentalFeatures } from '../../../common/experimental_features';
import { createSourcererDataView } from '../containers/sourcerer/create_sourcerer_data_view';
import type { AnalyzerState } from '../../resolver/types';
@ -96,8 +94,6 @@ export const createStoreFactory = async (
defaultDataView = { ...initDataView, error };
kibanaDataViews = [];
}
const appLibs: AppObservableLibs = { kibana: coreStart };
const libs$ = new BehaviorSubject(appLibs);
const timelineInitialState = {
timeline: {
@ -161,7 +157,7 @@ export const createStoreFactory = async (
...subPlugins.management.store.reducer,
};
return createStore(initialState, rootReducer, libs$.pipe(pluck('kibana')), storage, [
return createStore(initialState, rootReducer, coreStart, storage, [
...(subPlugins.management.store.middleware ?? []),
...(subPlugins.explore.store.middleware ?? []),
...[resolverMiddlewareFactory(dataAccessLayerFactory(coreStart)) ?? []],
@ -249,7 +245,7 @@ const stateSanitizer = (state: State) => {
export const createStore = (
state: State,
pluginsReducer: SubPluginsInitReducer,
kibana$: Observable<CoreStart>,
kibana: CoreStart,
storage: Storage,
additionalMiddleware?: Array<Middleware<{}, State, Dispatch<AppAction | Immutable<AppAction>>>>
): Store<State, Action> => {
@ -266,16 +262,6 @@ export const createStore = (
const composeEnhancers = composeWithDevTools(enhancerOptions);
// TODO: Once `createStore` does not use redux-observable, we will not need to pass a
// kibana observable anymore. Then we can remove this `any` cast and replace kibana$
// with a regular kibana instance.
// I'm not doing it in this PR, as this will have an impact on literally hundreds of test files.
// A separate PR will be created to clean this up.
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const kibanaObsv = kibana$ as any;
const kibana =
'source' in kibanaObsv ? kibanaObsv.source._value.kibana : kibanaObsv._value.kibana;
const middlewareEnhancer = applyMiddleware(
...createMiddlewares(kibana, storage),
telemetryMiddleware,

View file

@ -16,14 +16,7 @@ import {
import type { GlobalUrlParam } from '../../store/global_url_param';
import { globalUrlParamActions } from '../../store/global_url_param';
import { mockHistory } from '../route/mocks';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../mock';
import { createStore } from '../../store';
import { createMockStore, mockGlobalState, TestProviders } from '../../mock';
import type { LinkInfo } from '../../links';
import { SecurityPageName } from '../../../app/types';
@ -56,18 +49,11 @@ jest.mock('../../links', () => ({
}));
describe('global query string', () => {
const { storage } = createSecuritySolutionStorageMock();
const makeStore = (globalUrlParam: GlobalUrlParam) =>
createStore(
{
...mockGlobalState,
globalUrlParam,
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
createMockStore({
...mockGlobalState,
globalUrlParam,
});
const makeWrapper = (globalUrlParam?: GlobalUrlParam) => {
const wrapper = ({ children }: { children: React.ReactElement }) => (
@ -181,22 +167,17 @@ describe('global query string', () => {
describe('useGlobalQueryString', () => {
it('returns global query string', () => {
const store = createStore(
{
...mockGlobalState,
globalUrlParam: {
testNumber: 123,
testObject: { testKey: 321 },
testEmptyObject: {},
testEmptyArray: [],
testNull: null,
testEmptyString: '',
},
const store = createMockStore({
...mockGlobalState,
globalUrlParam: {
testNumber: 123,
testObject: { testKey: 321 },
testEmptyObject: {},
testEmptyArray: [],
testNull: null,
testEmptyString: '',
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
const wrapper = ({ children }: { children: React.ReactElement }) => (
<TestProviders store={store}>{children}</TestProviders>
);

View file

@ -13,20 +13,13 @@ import { fields } from '@kbn/data-plugin/common/mocks';
import { render } from '@testing-library/react';
import { useGlobalTime } from '../../../../common/containers/use_global_time';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../../../common/mock';
import { createMockStore, mockGlobalState, TestProviders } from '../../../../common/mock';
import { VisualizationEmbeddable } from '../../../../common/components/visualization_actions/visualization_embeddable';
import { useVisualizationResponse } from '../../../../common/components/visualization_actions/use_visualization_response';
import { PreviewHistogram } from './preview_histogram';
import { useTimelineEvents } from '../../../../common/components/events_viewer/use_timelines_events';
import { TableId } from '@kbn/securitysolution-data-table';
import { createStore } from '../../../../common/store';
import { mockEventViewerResponse } from '../../../../common/components/events_viewer/mock';
import type { UseFieldBrowserOptionsProps } from '../../../../timelines/components/fields_browser';
import type { TransformColumnsProps } from '../../../../common/components/control_columns';
@ -87,24 +80,17 @@ describe('PreviewHistogram', () => {
});
});
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(
{
...mockGlobalState,
dataTable: {
...mockGlobalState.dataTable,
tableById: {
[TableId.rulePreview]: {
...mockGlobalState.dataTable.tableById[TableId.test],
},
const store = createMockStore({
...mockGlobalState,
dataTable: {
...mockGlobalState.dataTable,
tableById: {
[TableId.rulePreview]: {
...mockGlobalState.dataTable.tableById[TableId.test],
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
afterEach(() => {
jest.clearAllMocks();

View file

@ -11,19 +11,12 @@ import type { Filter } from '@kbn/es-query';
import useResizeObserver from 'use-resize-observer/polyfilled';
import '../../../common/mock/match_media';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../../common/mock';
import { createMockStore, mockGlobalState, TestProviders } from '../../../common/mock';
import type { AlertsTableComponentProps } from './alerts_grouping';
import { GroupedAlertsTable } from './alerts_grouping';
import { TableId } from '@kbn/securitysolution-data-table';
import { useSourcererDataView } from '../../../common/containers/sourcerer';
import type { UseFieldBrowserOptionsProps } from '../../../timelines/components/fields_browser';
import { createStore } from '../../../common/store';
import { useKibana as mockUseKibana } from '../../../common/lib/kibana/__mocks__';
import { createTelemetryServiceMock } from '../../../common/lib/telemetry/telemetry_service.mock';
import { useQueryAlerts } from '../../containers/detection_engine/alerts/use_query';
@ -154,22 +147,16 @@ const getMockStorageState = (groups: string[] = ['none']) =>
});
describe('GroupedAlertsTable', () => {
const { storage } = createSecuritySolutionStorageMock();
let store: ReturnType<typeof createStore>;
let store = createMockStore();
beforeEach(() => {
jest.clearAllMocks();
store = createStore(
{
...mockGlobalState,
groups: {
[testProps.tableId]: { options: mockOptions, activeGroups: ['kibana.alert.rule.name'] },
},
store = createMockStore({
...mockGlobalState,
groups: {
[testProps.tableId]: { options: mockOptions, activeGroups: ['kibana.alert.rule.name'] },
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
(useSourcererDataView as jest.Mock).mockReturnValue({
...sourcererDataView,
selectedPatterns: ['myFakebeat-*'],
@ -186,9 +173,8 @@ describe('GroupedAlertsTable', () => {
});
it('calls the proper initial dispatch actions for groups', () => {
store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const { getByTestId, queryByTestId } = render(
<TestProviders store={store}>
<TestProviders store={createMockStore()}>
<GroupedAlertsTable {...testProps} />
</TestProviders>
);
@ -260,20 +246,15 @@ describe('GroupedAlertsTable', () => {
jest
.spyOn(window.localStorage, 'getItem')
.mockReturnValue(getMockStorageState(['kibana.alert.rule.name', 'host.name']));
store = createStore(
{
...mockGlobalState,
groups: {
[testProps.tableId]: {
options: mockOptions,
activeGroups: ['kibana.alert.rule.name', 'host.name'],
},
store = createMockStore({
...mockGlobalState,
groups: {
[testProps.tableId]: {
options: mockOptions,
activeGroups: ['kibana.alert.rule.name', 'host.name'],
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
const { getByTestId } = render(
<TestProviders store={store}>
@ -292,20 +273,15 @@ describe('GroupedAlertsTable', () => {
jest
.spyOn(window.localStorage, 'getItem')
.mockReturnValue(getMockStorageState(['kibana.alert.rule.name', 'host.name', 'user.name']));
store = createStore(
{
...mockGlobalState,
groups: {
[testProps.tableId]: {
options: mockOptions,
activeGroups: ['kibana.alert.rule.name', 'host.name', 'user.name'],
},
store = createMockStore({
...mockGlobalState,
groups: {
[testProps.tableId]: {
options: mockOptions,
activeGroups: ['kibana.alert.rule.name', 'host.name', 'user.name'],
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
const { getByTestId, getAllByTestId } = render(
<TestProviders store={store}>
@ -355,20 +331,15 @@ describe('GroupedAlertsTable', () => {
jest
.spyOn(window.localStorage, 'getItem')
.mockReturnValue(getMockStorageState(['kibana.alert.rule.name', 'host.name', 'user.name']));
store = createStore(
{
...mockGlobalState,
groups: {
[testProps.tableId]: {
options: mockOptions,
activeGroups: ['kibana.alert.rule.name', 'host.name', 'user.name'],
},
store = createMockStore({
...mockGlobalState,
groups: {
[testProps.tableId]: {
options: mockOptions,
activeGroups: ['kibana.alert.rule.name', 'host.name', 'user.name'],
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
const { getByTestId, rerender } = render(
<TestProviders store={store}>
@ -405,20 +376,15 @@ describe('GroupedAlertsTable', () => {
});
it('resets only most inner group pagination when its parent groups open/close', () => {
store = createStore(
{
...mockGlobalState,
groups: {
[testProps.tableId]: {
options: mockOptions,
activeGroups: ['kibana.alert.rule.name', 'host.name', 'user.name'],
},
store = createMockStore({
...mockGlobalState,
groups: {
[testProps.tableId]: {
options: mockOptions,
activeGroups: ['kibana.alert.rule.name', 'host.name', 'user.name'],
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
const { getByTestId } = render(
<TestProviders store={store}>
@ -468,20 +434,15 @@ describe('GroupedAlertsTable', () => {
});
it(`resets innermost level's current page when that level's page size updates`, () => {
store = createStore(
{
...mockGlobalState,
groups: {
[testProps.tableId]: {
options: mockOptions,
activeGroups: ['kibana.alert.rule.name', 'host.name', 'user.name'],
},
store = createMockStore({
...mockGlobalState,
groups: {
[testProps.tableId]: {
options: mockOptions,
activeGroups: ['kibana.alert.rule.name', 'host.name', 'user.name'],
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
const { getByTestId } = render(
<TestProviders store={store}>
@ -521,20 +482,15 @@ describe('GroupedAlertsTable', () => {
});
it(`resets outermost level's current page when that level's page size updates`, () => {
store = createStore(
{
...mockGlobalState,
groups: {
[testProps.tableId]: {
options: mockOptions,
activeGroups: ['kibana.alert.rule.name', 'host.name', 'user.name'],
},
store = createMockStore({
...mockGlobalState,
groups: {
[testProps.tableId]: {
options: mockOptions,
activeGroups: ['kibana.alert.rule.name', 'host.name', 'user.name'],
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
const { getByTestId, getAllByTestId } = render(
<TestProviders store={store}>

View file

@ -5,22 +5,11 @@
* 2.0.
*/
import { TestProviders } from '@kbn/timelines-plugin/public/mock';
import { act, renderHook } from '@testing-library/react-hooks';
import React from 'react';
import { TestProviders } from '../../../../common/mock';
import { useGroupTakeActionsItems } from '.';
jest.mock('../../../../common/store', () => ({
inputsSelectors: {
globalQuery: jest.fn(),
},
inputsModel: {},
}));
jest.mock('../../../../common/hooks/use_selector', () => ({
useDeepEqualSelector: () => jest.fn(),
}));
describe('useGroupTakeActionsItems', () => {
const wrapperContainer: React.FC<{ children?: React.ReactNode }> = ({ children }) => (
<TestProviders>{children}</TestProviders>

View file

@ -5,7 +5,6 @@
* 2.0.
*/
import { TestProviders } from '@kbn/timelines-plugin/public/mock';
import { renderHook } from '@testing-library/react-hooks';
import type { UseAlertAssigneesActionsProps } from './use_alert_assignees_actions';
import { useAlertAssigneesActions } from './use_alert_assignees_actions';
@ -15,6 +14,7 @@ import { render } from '@testing-library/react';
import React from 'react';
import type { EuiContextMenuPanelDescriptor } from '@elastic/eui';
import { EuiPopover, EuiContextMenu } from '@elastic/eui';
import { TestProviders } from '../../../../common/mock';
import { useSetAlertAssignees } from '../../../../common/components/toolbar/bulk_actions/use_set_alert_assignees';
import { useGetCurrentUserProfile } from '../../../../common/components/user_profiles/use_get_current_user_profile';
import { useBulkGetUserProfiles } from '../../../../common/components/user_profiles/use_bulk_get_user_profiles';

View file

@ -5,7 +5,6 @@
* 2.0.
*/
import { TestProviders } from '@kbn/timelines-plugin/public/mock';
import { renderHook } from '@testing-library/react-hooks';
import type { UseAlertTagsActionsProps } from './use_alert_tags_actions';
import { useAlertTagsActions } from './use_alert_tags_actions';
@ -15,6 +14,7 @@ import { render } from '@testing-library/react';
import React from 'react';
import type { EuiContextMenuPanelDescriptor } from '@elastic/eui';
import { EuiPopover, EuiContextMenu } from '@elastic/eui';
import { TestProviders } from '../../../../common/mock';
import { useSetAlertTags } from '../../../../common/components/toolbar/bulk_actions/use_set_alert_tags';
import { useUiSetting$ } from '../../../../common/lib/kibana';

View file

@ -5,12 +5,7 @@
* 2.0.
*/
import {
createSecuritySolutionStorageMock,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../../common/mock';
import { createMockStore, mockGlobalState, TestProviders } from '../../../common/mock';
import { TableId } from '@kbn/securitysolution-data-table';
import { renderHook } from '@testing-library/react-hooks';
import { getUseCellActionsHook } from './use_cell_actions';
@ -27,9 +22,6 @@ import type { ComponentProps, JSXElementConstructor, PropsWithChildren } from 'r
import React from 'react';
import { makeAction } from '../../../common/components/cell_actions/mocks';
import { VIEW_SELECTION } from '../../../../common/constants';
import { createStore } from '../../../common/store';
import { createStartServicesMock } from '@kbn/timelines-plugin/public/mock';
import { BehaviorSubject } from 'rxjs';
const useCellActions = getUseCellActionsHook(TableId.test);
@ -86,17 +78,10 @@ const mockedStateWithEventRenderedView: typeof mockGlobalState = {
},
},
};
export const kibanaObservable = new BehaviorSubject(createStartServicesMock());
const { storage } = createSecuritySolutionStorageMock();
const TestProviderWithCustomStateAndActions = withCustomPropsAndCellActions({
cellActions: compatibleActions,
store: createStore(
mockedStateWithEventRenderedView,
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
),
store: createMockStore(mockedStateWithEventRenderedView),
});
describe('getUseCellActionsHook', () => {

View file

@ -10,14 +10,7 @@ import { getPersistentControlsHook } from './use_persistent_controls';
import { TableId } from '@kbn/securitysolution-data-table';
import { renderHook } from '@testing-library/react-hooks';
import { render, fireEvent } from '@testing-library/react';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../../common/mock';
import { createStore } from '../../../common/store';
import { createMockStore, mockGlobalState, TestProviders } from '../../../common/mock';
import { useSourcererDataView } from '../../../common/containers/sourcerer';
import { useDeepEqualSelector, useShallowEqualSelector } from '../../../common/hooks/use_selector';
import { useKibana as mockUseKibana } from '../../../common/lib/kibana/__mocks__';
@ -71,9 +64,6 @@ const groups = {
};
describe('usePersistentControls', () => {
const { storage } = createSecuritySolutionStorageMock();
let store: ReturnType<typeof createStore>;
beforeEach(() => {
(useDeepEqualSelector as jest.Mock).mockImplementation(() => groups[tableId]);
(useShallowEqualSelector as jest.Mock).mockReturnValue({
@ -81,15 +71,6 @@ describe('usePersistentControls', () => {
showBuildBlockAlerts: false,
});
jest.clearAllMocks();
store = createStore(
{
...mockGlobalState,
groups,
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
(useSourcererDataView as jest.Mock).mockReturnValue({
...sourcererDataView,
selectedPatterns: ['myFakebeat-*'],
@ -101,6 +82,10 @@ describe('usePersistentControls', () => {
});
test('Should render the group selector component and allow the user to select a grouping field', () => {
const store = createMockStore({
...mockGlobalState,
groups,
});
const usePersistentControls = getPersistentControlsHook(tableId);
const { result } = renderHook(() => usePersistentControls(), {
wrapper: ({ children }) => <TestProviders store={store}>{children}</TestProviders>,

View file

@ -8,14 +8,7 @@ import React from 'react';
import { render } from '@testing-library/react';
import { Router } from '@kbn/shared-ux-router';
import { AlertDetailsRedirect } from './alert_details_redirect';
import {
createSecuritySolutionStorageMock,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../../common/mock';
import { createStore } from '../../../common/store';
import { kibanaObservable } from '@kbn/timelines-plugin/public/mock';
import { TestProviders } from '../../../common/mock';
import { ALERTS_PATH, ALERT_DETAILS_REDIRECT_PATH } from '../../../../common/constants';
import { mockHistory } from '../../../common/utils/route/mocks';
import { useIsExperimentalFeatureEnabled } from '../../../common/hooks/use_experimental_features';
@ -37,8 +30,6 @@ const testTimestamp = '2023-04-20T12:00:00.000Z';
const mockPathname = `${ALERT_DETAILS_REDIRECT_PATH}/${testAlertId}`;
describe('AlertDetailsRedirect', () => {
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
afterEach(() => {
mockHistory.replace.mockClear();
});
@ -56,7 +47,7 @@ describe('AlertDetailsRedirect', () => {
},
};
render(
<TestProviders store={store}>
<TestProviders>
<Router history={historyMock}>
<AlertDetailsRedirect />
</Router>
@ -85,7 +76,7 @@ describe('AlertDetailsRedirect', () => {
},
};
render(
<TestProviders store={store}>
<TestProviders>
<Router history={historyMock}>
<AlertDetailsRedirect />
</Router>
@ -113,7 +104,7 @@ describe('AlertDetailsRedirect', () => {
},
};
render(
<TestProviders store={store}>
<TestProviders>
<Router history={historyMock}>
<AlertDetailsRedirect />
</Router>
@ -147,7 +138,7 @@ describe('AlertDetailsRedirect', () => {
},
};
render(
<TestProviders store={store}>
<TestProviders>
<Router history={historyMock}>
<AlertDetailsRedirect />
</Router>

View file

@ -9,18 +9,11 @@ import React, { useEffect } from 'react';
import { render, waitFor } from '@testing-library/react';
import { useParams } from 'react-router-dom';
import '../../../common/mock/match_media';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
TestProviders,
SUB_PLUGINS_REDUCER,
} from '../../../common/mock';
import { mockGlobalState, TestProviders, createMockStore } from '../../../common/mock';
import { DetectionEnginePage } from './detection_engine';
import { useUserData } from '../../components/user_info';
import { useSourcererDataView } from '../../../common/containers/sourcerer';
import type { State } from '../../../common/store';
import { createStore } from '../../../common/store';
import { mockHistory, Router } from '../../../common/mock/router';
import { mockTimelines } from '../../../common/mock/mock_timelines_plugin';
import { mockBrowserFields } from '../../../common/containers/source/mock';
@ -168,26 +161,14 @@ jest.mock('../../../timelines/components/side_panel/hooks/use_detail_panel', ()
};
});
const state: State = {
...mockGlobalState,
};
const { storage } = createSecuritySolutionStorageMock();
const getStoreWithCustomState = (newState: State = state) => {
return createStore(newState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
};
const store = getStoreWithCustomState();
const stateWithBuildingBlockAlertsEnabled: State = {
...state,
...mockGlobalState,
dataTable: {
...state.dataTable,
...mockGlobalState.dataTable,
tableById: {
...state.dataTable.tableById,
...mockGlobalState.dataTable.tableById,
[TableId.test]: {
...state.dataTable.tableById[TableId.test],
...mockGlobalState.dataTable.tableById[TableId.test],
additionalFilters: {
showOnlyThreatIndicatorAlerts: false,
showBuildingBlockAlerts: true,
@ -198,13 +179,13 @@ const stateWithBuildingBlockAlertsEnabled: State = {
};
const stateWithThreatIndicatorsAlertEnabled: State = {
...state,
...mockGlobalState,
dataTable: {
...state.dataTable,
...mockGlobalState.dataTable,
tableById: {
...state.dataTable.tableById,
...mockGlobalState.dataTable.tableById,
[TableId.test]: {
...state.dataTable.tableById[TableId.test],
...mockGlobalState.dataTable.tableById[TableId.test],
additionalFilters: {
showOnlyThreatIndicatorAlerts: true,
showBuildingBlockAlerts: false,
@ -248,7 +229,7 @@ describe('DetectionEnginePageComponent', () => {
});
it('renders correctly', async () => {
const { getByTestId } = render(
<TestProviders store={store}>
<TestProviders>
<Router history={mockHistory}>
<DetectionEnginePage />
</Router>
@ -261,7 +242,7 @@ describe('DetectionEnginePageComponent', () => {
it('renders the chart panels', async () => {
const { getByTestId } = render(
<TestProviders store={store}>
<TestProviders>
<Router history={mockHistory}>
<DetectionEnginePage />
</Router>
@ -278,7 +259,7 @@ describe('DetectionEnginePageComponent', () => {
MockedFilterGroup.mockImplementationOnce(getMockedFilterGroupWithCustomFilters());
await waitFor(() => {
render(
<TestProviders store={getStoreWithCustomState(stateWithBuildingBlockAlertsEnabled)}>
<TestProviders store={createMockStore(stateWithBuildingBlockAlertsEnabled)}>
<Router history={mockHistory}>
<DetectionEnginePage />
</Router>
@ -316,7 +297,7 @@ describe('DetectionEnginePageComponent', () => {
await waitFor(() => {
render(
<TestProviders store={getStoreWithCustomState(stateWithThreatIndicatorsAlertEnabled)}>
<TestProviders store={createMockStore(stateWithThreatIndicatorsAlertEnabled)}>
<Router history={mockHistory}>
<DetectionEnginePage />
</Router>
@ -362,7 +343,7 @@ describe('DetectionEnginePageComponent', () => {
);
await waitFor(() => {
render(
<TestProviders store={store}>
<TestProviders>
<Router history={mockHistory}>
<DetectionEnginePage />
</Router>
@ -405,7 +386,7 @@ describe('DetectionEnginePageComponent', () => {
);
await waitFor(() => {
render(
<TestProviders store={store}>
<TestProviders>
<Router history={mockHistory}>
<DetectionEnginePage />
</Router>
@ -436,7 +417,7 @@ describe('DetectionEnginePageComponent', () => {
);
await waitFor(() => {
render(
<TestProviders store={store}>
<TestProviders>
<Router history={mockHistory}>
<DetectionEnginePage />
</Router>

View file

@ -16,14 +16,7 @@ import { BarChart } from '../../../common/components/charts/barchart';
import { AreaChart } from '../../../common/components/charts/areachart';
import { EuiHorizontalRule } from '@elastic/eui';
import { mockUpdateDateRange } from '../../network/components/kpi_network/mock';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
} from '../../../common/mock';
import type { State } from '../../../common/store';
import { createStore } from '../../../common/store';
import { createMockStore } from '../../../common/mock';
import { Provider as ReduxStoreProvider } from 'react-redux';
import { getMockTheme } from '../../../common/lib/kibana/kibana_react.mock';
import * as module from '../../../common/containers/query_toggle';
@ -57,9 +50,7 @@ jest
const mockSetQuerySkip = jest.fn();
describe('Stat Items Component', () => {
const mockTheme = getMockTheme({ eui: { euiColorMediumShade: '#ece' } });
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore();
const testProps = {
description: 'HOSTS',
fields: [{ key: 'hosts', value: null, color: '#6092C0', icon: 'cross' }],

View file

@ -9,16 +9,8 @@ import { shallow } from 'enzyme';
import React from 'react';
import '../../../../common/mock/match_media';
import {
mockGlobalState,
TestProviders,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../../../common/mock';
import { TestProviders, createMockStore } from '../../../../common/mock';
import { useMountAppended } from '../../../../common/utils/use_mount_appended';
import type { State } from '../../../../common/store';
import { createStore } from '../../../../common/store';
import { hostsModel } from '../../store';
import { HostsTableType } from '../../store/model';
import { HostsTable } from '.';
@ -57,16 +49,9 @@ jest.mock('../../../../helper_hooks', () => ({
describe('Hosts Table', () => {
const loadPage = jest.fn();
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore();
const mount = useMountAppended();
beforeEach(() => {
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
});
describe('rendering', () => {
test('it renders the default Hosts table', () => {
const wrapper = shallow(

View file

@ -11,11 +11,9 @@ import useResizeObserver from 'use-resize-observer/polyfilled';
import '../../../../common/mock/match_media';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
createMockStore,
mockGlobalState,
mockIndexPattern,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../../../common/mock';
import { HostDetailsTabs } from './details_tabs';
@ -24,8 +22,6 @@ import { useMountAppended } from '../../../../common/utils/use_mount_appended';
import { getHostDetailsPageFilters } from './helpers';
import { HostsType, HostsTableType } from '../../store/model';
import { mockCasesContract } from '@kbn/cases-plugin/public/mocks';
import type { State } from '../../../../common/store';
import { createStore } from '../../../../common/store';
import { TableId } from '@kbn/securitysolution-data-table';
jest.mock('../../../../common/lib/kibana', () => {
@ -73,21 +69,14 @@ mockUseResizeObserver.mockImplementation(() => ({}));
jest.mock('../../../../common/components/visualization_actions/actions');
jest.mock('../../../../common/components/visualization_actions/lens_embeddable');
const myState: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
const myStore = createStore(
{
...myState,
dataTable: {
tableById: {
[TableId.hostsPageEvents]: myState.dataTable.tableById['table-test'],
},
const myStore = createMockStore({
...mockGlobalState,
dataTable: {
tableById: {
[TableId.hostsPageEvents]: mockGlobalState.dataTable.tableById['table-test'],
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
describe('body', () => {
const scenariosMap = {

View file

@ -11,17 +11,9 @@ import { Router } from '@kbn/shared-ux-router';
import type { Filter } from '@kbn/es-query';
import '../../../common/mock/match_media';
import {
TestProviders,
mockGlobalState,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../../common/mock';
import { TestProviders, createMockStore } from '../../../common/mock';
import { TabNavigation } from '../../../common/components/navigation/tab_navigation';
import { inputsActions } from '../../../common/store/inputs';
import type { State } from '../../../common/store';
import { createStore } from '../../../common/store';
import { Hosts } from './hosts';
import { HostsTabs } from './hosts_tabs';
import { useSourcererDataView } from '../../../common/containers/sourcerer';
@ -85,9 +77,7 @@ const mockHistory = {
listen: jest.fn(),
};
const mockUseSourcererDataView = useSourcererDataView as jest.Mock;
const myState: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
const myStore = createStore(myState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const myStore = createMockStore();
describe('Hosts - rendering', () => {
beforeEach(() => {

View file

@ -10,15 +10,7 @@ import React from 'react';
import type { ActionCreator } from 'typescript-fsa';
import '../../../../common/mock/match_media';
import {
mockGlobalState,
TestProviders,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../../../common/mock';
import type { State } from '../../../../common/store';
import { createStore } from '../../../../common/store';
import { TestProviders } from '../../../../common/mock';
import { networkModel } from '../../store';
import { IpOverview } from '.';
@ -28,15 +20,6 @@ import type { NarrowDateRange } from '../../../../common/components/ml/types';
import { FlowTargetSourceDest } from '../../../../../common/search_strategy';
describe('IP Overview Component', () => {
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
beforeEach(() => {
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
});
describe('rendering', () => {
const mockProps = {
anomaliesData: mockAnomalies,
@ -60,7 +43,7 @@ describe('IP Overview Component', () => {
test('it renders the default IP Overview', () => {
const wrapper = shallow(
<TestProviders store={store}>
<TestProviders>
<IpOverview {...mockProps} />
</TestProviders>
);
@ -74,7 +57,7 @@ describe('IP Overview Component', () => {
isInDetailsSidePanel: true,
};
const wrapper = shallow(
<TestProviders store={store}>
<TestProviders>
<IpOverview {...panelViewProps} />
</TestProviders>
);

View file

@ -9,19 +9,11 @@ import { shallow } from 'enzyme';
import React from 'react';
import { Provider as ReduxStoreProvider } from 'react-redux';
import {
mockGlobalState,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../../../common/mock';
import { createMockStore } from '../../../../common/mock';
import '../../../../common/mock/match_media';
import type { State } from '../../../../common/store';
import { createStore } from '../../../../common/store';
import { NetworkKpiComponent } from '.';
describe('NetworkKpiComponent', () => {
const state: State = mockGlobalState;
const props = {
filterQuery: '',
from: '2019-06-15T06:00:00.000Z',
@ -32,17 +24,10 @@ describe('NetworkKpiComponent', () => {
to: '2019-06-18T06:00:00.000Z',
};
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
beforeEach(() => {
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
});
describe('rendering', () => {
test('it renders the default widget', () => {
const wrapper = shallow(
<ReduxStoreProvider store={store}>
<ReduxStoreProvider store={createMockStore()}>
<NetworkKpiComponent {...props} />
</ReduxStoreProvider>
);

View file

@ -11,15 +11,7 @@ import React from 'react';
import { Provider as ReduxStoreProvider } from 'react-redux';
import '../../../../common/mock/match_media';
import {
mockGlobalState,
TestProviders,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../../../common/mock';
import type { State } from '../../../../common/store';
import { createStore } from '../../../../common/store';
import { TestProviders, createMockStore } from '../../../../common/mock';
import { networkModel } from '../../store';
import { useMountAppended } from '../../../../common/utils/use_mount_appended';
@ -30,9 +22,7 @@ jest.mock('../../../../common/lib/kibana');
describe('NetworkTopNFlow Table Component', () => {
const loadPage = jest.fn();
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
let store = createMockStore();
const mount = useMountAppended();
const defaultProps = {
@ -49,7 +39,7 @@ describe('NetworkTopNFlow Table Component', () => {
};
beforeEach(() => {
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore();
});
describe('rendering', () => {

View file

@ -11,16 +11,8 @@ import React from 'react';
import { Provider as ReduxStoreProvider } from 'react-redux';
import '../../../../common/mock/match_media';
import {
mockGlobalState,
TestProviders,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../../../common/mock';
import { TestProviders, createMockStore } from '../../../../common/mock';
import { useMountAppended } from '../../../../common/utils/use_mount_appended';
import type { State } from '../../../../common/store';
import { createStore } from '../../../../common/store';
import { networkModel } from '../../store';
import { NetworkHttpTable } from '.';
@ -31,7 +23,6 @@ jest.mock('../../../../common/components/link_to');
describe('NetworkHttp Table Component', () => {
const loadPage = jest.fn();
const state: State = mockGlobalState;
const defaultProps = {
data: mockData.edges,
fakeTotalCount: getOr(50, 'fakeTotalCount', mockData.pageInfo),
@ -45,12 +36,11 @@ describe('NetworkHttp Table Component', () => {
type: networkModel.NetworkType.page,
};
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
let store = createMockStore();
const mount = useMountAppended();
beforeEach(() => {
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore();
});
describe('rendering', () => {

View file

@ -12,17 +12,8 @@ import { Provider as ReduxStoreProvider } from 'react-redux';
import '../../../../common/mock/match_media';
import { FlowTargetSourceDest } from '../../../../../common/search_strategy/security_solution/network';
import {
mockGlobalState,
mockIndexPattern,
TestProviders,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../../../common/mock';
import { mockIndexPattern, TestProviders, createMockStore } from '../../../../common/mock';
import { useMountAppended } from '../../../../common/utils/use_mount_appended';
import type { State } from '../../../../common/store';
import { createStore } from '../../../../common/store';
import { networkModel } from '../../store';
import { NetworkTopCountriesTable } from '.';
@ -32,7 +23,6 @@ jest.mock('../../../../common/lib/kibana');
describe('NetworkTopCountries Table Component', () => {
const loadPage = jest.fn();
const state: State = mockGlobalState;
const mount = useMountAppended();
const defaultProps = {
data: mockData.NetworkTopCountries.edges,
@ -53,11 +43,10 @@ describe('NetworkTopCountries Table Component', () => {
type: networkModel.NetworkType.page,
};
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
let store = createMockStore();
beforeEach(() => {
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore();
});
describe('rendering', () => {

View file

@ -11,16 +11,8 @@ import React from 'react';
import { Provider as ReduxStoreProvider } from 'react-redux';
import '../../../../common/mock/match_media';
import {
mockGlobalState,
TestProviders,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../../../common/mock';
import { TestProviders, createMockStore } from '../../../../common/mock';
import { useMountAppended } from '../../../../common/utils/use_mount_appended';
import type { State } from '../../../../common/store';
import { createStore } from '../../../../common/store';
import { networkModel } from '../../store';
import { NetworkTopNFlowTable } from '.';
import { mockData } from './mock';
@ -31,10 +23,7 @@ jest.mock('../../../../common/components/link_to');
describe('NetworkTopNFlow Table Component', () => {
const loadPage = jest.fn();
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
let store = createMockStore();
const mount = useMountAppended();
const defaultProps = {
data: mockData.edges,
@ -51,7 +40,7 @@ describe('NetworkTopNFlow Table Component', () => {
};
beforeEach(() => {
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore();
});
describe('rendering', () => {

View file

@ -11,16 +11,8 @@ import React from 'react';
import { Provider as ReduxStoreProvider } from 'react-redux';
import '../../../../common/mock/match_media';
import {
mockGlobalState,
TestProviders,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../../../common/mock';
import { TestProviders, createMockStore } from '../../../../common/mock';
import { useMountAppended } from '../../../../common/utils/use_mount_appended';
import type { State } from '../../../../common/store';
import { createStore } from '../../../../common/store';
import { networkModel } from '../../store';
import { TlsTable } from '.';
import { mockTlsData } from './mock';
@ -29,7 +21,6 @@ jest.mock('../../../../common/lib/kibana');
describe('Tls Table Component', () => {
const loadPage = jest.fn();
const state: State = mockGlobalState;
const defaultProps = {
data: mockTlsData.edges,
fakeTotalCount: getOr(50, 'fakeTotalCount', mockTlsData.pageInfo),
@ -42,12 +33,11 @@ describe('Tls Table Component', () => {
totalCount: 1,
type: networkModel.NetworkType.details,
};
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
let store = createMockStore();
const mount = useMountAppended();
beforeEach(() => {
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore();
});
describe('Rendering', () => {

View file

@ -11,16 +11,8 @@ import React from 'react';
import { Provider as ReduxStoreProvider } from 'react-redux';
import '../../../../common/mock/match_media';
import {
mockGlobalState,
TestProviders,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../../../common/mock';
import { TestProviders, createMockStore } from '../../../../common/mock';
import { useMountAppended } from '../../../../common/utils/use_mount_appended';
import type { State } from '../../../../common/store';
import { createStore } from '../../../../common/store';
import { networkModel } from '../../store';
import { UsersTable } from '.';
@ -31,14 +23,12 @@ jest.mock('../../../../common/lib/kibana');
describe('Users Table Component', () => {
const loadPage = jest.fn();
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
let store = createMockStore();
const mount = useMountAppended();
beforeEach(() => {
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore();
});
const defaultProps = {

View file

@ -11,16 +11,8 @@ import { Router, useParams } from 'react-router-dom';
import '../../../../common/mock/match_media';
import { useSourcererDataView } from '../../../../common/containers/sourcerer';
import {
mockGlobalState,
TestProviders,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../../../common/mock';
import { TestProviders } from '../../../../common/mock';
import { useMountAppended } from '../../../../common/utils/use_mount_appended';
import type { State } from '../../../../common/store';
import { createStore } from '../../../../common/store';
import { NetworkDetails } from '.';
import { FlowTargetSourceDest } from '../../../../../common/search_strategy';
@ -151,14 +143,6 @@ describe('Network Details', () => {
jest.clearAllMocks();
});
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
beforeEach(() => {
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
});
test('it renders', () => {
const ip = '123.456.78.90';
(useSourcererDataView as jest.Mock).mockReturnValue({
@ -170,7 +154,7 @@ describe('Network Details', () => {
flowTarget: FlowTargetSourceDest.source,
});
const wrapper = mount(
<TestProviders store={store}>
<TestProviders>
<Router history={getMockHistory(ip)}>
<NetworkDetails />
</Router>
@ -190,7 +174,7 @@ describe('Network Details', () => {
flowTarget: FlowTargetSourceDest.source,
});
const wrapper = mount(
<TestProviders store={store}>
<TestProviders>
<Router history={getMockHistory(ip)}>
<NetworkDetails />
</Router>
@ -214,7 +198,7 @@ describe('Network Details', () => {
flowTarget: FlowTargetSourceDest.source,
});
const wrapper = mount(
<TestProviders store={store}>
<TestProviders>
<Router history={getMockHistory(ip)}>
<NetworkDetails />
</Router>

View file

@ -12,15 +12,7 @@ import { waitFor } from '@testing-library/react';
import '../../../common/mock/match_media';
import type { Filter } from '@kbn/es-query';
import { useSourcererDataView } from '../../../common/containers/sourcerer';
import {
TestProviders,
mockGlobalState,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../../common/mock';
import type { State } from '../../../common/store';
import { createStore } from '../../../common/store';
import { TestProviders, createMockStore } from '../../../common/mock';
import { inputsActions } from '../../../common/store/inputs';
import { Network } from './network';
@ -228,9 +220,7 @@ describe('Network page - rendering', () => {
indicesExist: true,
indexPattern: { fields: [], title: 'title' },
});
const myState: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
const myStore = createStore(myState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const myStore = createMockStore();
const wrapper = mount(
<TestProviders store={myStore}>
<Router history={mockHistory}>

View file

@ -5,28 +5,16 @@
* 2.0.
*/
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
} from '../../../common/mock';
import { createStore } from '../../../common/store';
import { createMockStore, createSecuritySolutionStorageMock } from '../../../common/mock';
import { addUserAssetTableField, removeUserAssetTableField } from './actions';
import { UserAssetTableType } from './model';
import { getUserAssetTableFromStorage } from './storage';
import type { Store } from 'redux';
let store: Store;
const storage = createSecuritySolutionStorageMock().storage;
describe('UsersAssetTable localStorage middleware', () => {
beforeEach(() => {
storage.clear();
store = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
});
it('persist asset table when adding and removing fields', async () => {
const store = createMockStore(undefined, undefined, undefined, storage);
const fieldName = 'test-field';
// Add field to the table

View file

@ -7,8 +7,8 @@
import { renderHook } from '@testing-library/react-hooks';
import { useObservedHostFields } from './use_observed_host_fields';
import { TestProviders } from '@kbn/timelines-plugin/public/mock';
import { mockObservedHostData } from '../../mocks';
import { TestProviders } from '../../../../common/mock';
describe('useManagedUserItems', () => {
it('returns managed user items for Entra user', () => {

View file

@ -5,9 +5,9 @@
* 2.0.
*/
import { TestProviders } from '@kbn/timelines-plugin/public/mock';
import { renderHook } from '@testing-library/react-hooks';
import { mockObservedUser } from '../mocks';
import { TestProviders } from '../../../../common/mock';
import { useObservedUserItems } from './use_observed_user_items';
describe('useManagedUserItems', () => {

View file

@ -6,49 +6,16 @@
*/
import React from 'react';
import { Provider } from 'react-redux';
import { cloneDeep } from 'lodash/fp';
import { render, screen } from '@testing-library/react';
import { I18nProvider } from '@kbn/i18n-react';
import { CtiDisabledModule } from './cti_disabled_module';
import { ThemeProvider } from 'styled-components';
import type { State } from '../../../common/store';
import { createStore } from '../../../common/store';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
} from '../../../common/mock';
import { mockTheme } from './mock';
import { createKibanaContextProviderMock } from '../../../common/lib/kibana/kibana_react.mock';
const MockKibanaContextProvider = createKibanaContextProviderMock();
jest.mock('../../../common/lib/kibana');
import { TestProviders } from '../../../common/mock';
describe('CtiDisabledModule', () => {
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
beforeEach(() => {
const myState = cloneDeep(state);
store = createStore(myState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
});
it('renders splitPanel with "danger" variant', () => {
render(
<Provider store={store}>
<I18nProvider>
<ThemeProvider theme={mockTheme}>
<MockKibanaContextProvider>
<CtiDisabledModule />
</MockKibanaContextProvider>
</ThemeProvider>
</I18nProvider>
</Provider>
<TestProviders>
<CtiDisabledModule />
</TestProviders>
);
expect(screen.getByTestId('cti-dashboard-links')).toBeInTheDocument();

View file

@ -6,28 +6,12 @@
*/
import React from 'react';
import { Provider } from 'react-redux';
import { cloneDeep } from 'lodash/fp';
import { render, screen } from '@testing-library/react';
import { I18nProvider } from '@kbn/i18n-react';
import { CtiEnabledModule } from './cti_enabled_module';
import { ThemeProvider } from 'styled-components';
import type { State } from '../../../common/store';
import { createStore } from '../../../common/store';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
} from '../../../common/mock';
import { mockTheme, mockProps, mockTiDataSources, mockCtiLinksResponse } from './mock';
import { TestProviders } from '../../../common/mock';
import { mockProps, mockTiDataSources, mockCtiLinksResponse } from './mock';
import { useCtiDashboardLinks } from '../../containers/overview_cti_links';
import { useTiDataSources } from '../../containers/overview_cti_links/use_ti_data_sources';
import { createKibanaContextProviderMock } from '../../../common/lib/kibana/kibana_react.mock';
const MockKibanaContextProvider = createKibanaContextProviderMock();
jest.mock('../../../common/lib/kibana');
jest.mock('../../containers/overview_cti_links/use_ti_data_sources');
const useTiDataSourcesMock = useTiDataSources as jest.Mock;
@ -38,27 +22,11 @@ const useCtiDashboardLinksMock = useCtiDashboardLinks as jest.Mock;
useCtiDashboardLinksMock.mockReturnValue(mockCtiLinksResponse);
describe('CtiEnabledModule', () => {
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
beforeEach(() => {
const myState = cloneDeep(state);
store = createStore(myState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
});
it('renders CtiWithEvents when there are events', () => {
render(
<Provider store={store}>
<I18nProvider>
<ThemeProvider theme={mockTheme}>
<MockKibanaContextProvider>
<CtiEnabledModule {...mockProps} />
</MockKibanaContextProvider>
</ThemeProvider>
</I18nProvider>
</Provider>
<TestProviders>
<CtiEnabledModule {...mockProps} />
</TestProviders>
);
expect(screen.getByText('Showing: 5 indicators')).toBeInTheDocument();

View file

@ -6,28 +6,13 @@
*/
import React from 'react';
import { Provider } from 'react-redux';
import { cloneDeep } from 'lodash/fp';
import { mount } from 'enzyme';
import { I18nProvider } from '@kbn/i18n-react';
import { ThreatIntelLinkPanel } from '.';
import { ThemeProvider } from 'styled-components';
import type { State } from '../../../common/store';
import { createStore } from '../../../common/store';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
} from '../../../common/mock';
import { mockTheme, mockProps, mockTiDataSources, mockCtiLinksResponse } from './mock';
import { TestProviders } from '../../../common/mock';
import { mockProps, mockTiDataSources, mockCtiLinksResponse } from './mock';
import { useTiDataSources } from '../../containers/overview_cti_links/use_ti_data_sources';
import { useCtiDashboardLinks } from '../../containers/overview_cti_links';
import { createKibanaContextProviderMock } from '../../../common/lib/kibana/kibana_react.mock';
const MockKibanaContextProvider = createKibanaContextProviderMock();
jest.mock('../../../common/lib/kibana');
jest.mock('../../containers/overview_cti_links/use_ti_data_sources');
const useTiDataSourcesMock = useTiDataSources as jest.Mock;
@ -38,27 +23,11 @@ const useCtiDashboardLinksMock = useCtiDashboardLinks as jest.Mock;
useCtiDashboardLinksMock.mockReturnValue(mockCtiLinksResponse);
describe('ThreatIntelLinkPanel', () => {
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
beforeEach(() => {
const myState = cloneDeep(state);
store = createStore(myState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
});
it('renders CtiEnabledModule when Threat Intel module is enabled', () => {
const wrapper = mount(
<Provider store={store}>
<I18nProvider>
<ThemeProvider theme={mockTheme}>
<MockKibanaContextProvider>
<ThreatIntelLinkPanel {...mockProps} />
</MockKibanaContextProvider>
</ThemeProvider>
</I18nProvider>
</Provider>
<TestProviders>
<ThreatIntelLinkPanel {...mockProps} />
</TestProviders>
);
expect(wrapper.find('[data-test-subj="cti-enabled-module"]').length).toEqual(1);
@ -68,15 +37,9 @@ describe('ThreatIntelLinkPanel', () => {
it('renders CtiDisabledModule when Threat Intel module is disabled', () => {
const wrapper = mount(
<Provider store={store}>
<I18nProvider>
<ThemeProvider theme={mockTheme}>
<MockKibanaContextProvider>
<ThreatIntelLinkPanel {...mockProps} allTiDataSources={[]} />
</MockKibanaContextProvider>
</ThemeProvider>
</I18nProvider>
</Provider>
<TestProviders>
<ThreatIntelLinkPanel {...mockProps} allTiDataSources={[]} />
</TestProviders>
);
expect(wrapper.find('[data-test-subj="cti-disabled-module"]').length).toEqual(1);

View file

@ -5,27 +5,17 @@
* 2.0.
*/
import { cloneDeep } from 'lodash/fp';
import { mount } from 'enzyme';
import React from 'react';
import '../../../common/mock/match_media';
import {
mockGlobalState,
TestProviders,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../../common/mock';
import { TestProviders } from '../../../common/mock';
import { OverviewHost } from '.';
import type { State } from '../../../common/store';
import { createStore } from '../../../common/store';
import { useHostOverview } from '../../containers/overview_host';
import { useQueryToggle } from '../../../common/containers/query_toggle';
import { render } from '@testing-library/react';
jest.mock('../../../common/lib/kibana');
jest.mock('../../../common/components/link_to');
jest.mock('../../../common/containers/query_toggle');
@ -64,22 +54,16 @@ const useHostOverviewMock = useHostOverview as jest.Mock;
const mockUseQueryToggle = useQueryToggle as jest.Mock;
describe('OverviewHost', () => {
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
beforeEach(() => {
jest.clearAllMocks();
mockUseQueryToggle.mockReturnValue({ toggleStatus: true, setToggleStatus: jest.fn() });
const myState = cloneDeep(state);
useHostOverviewMock.mockReturnValue([false, MOCKED_RESPONSE]);
store = createStore(myState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
});
test('it renders the expected widget title', () => {
const wrapper = mount(
<TestProviders store={store}>
<TestProviders>
<OverviewHost {...testProps} />
</TestProviders>
);
@ -92,7 +76,7 @@ describe('OverviewHost', () => {
test('it renders an empty subtitle while loading', () => {
useHostOverviewMock.mockReturnValueOnce([true, { overviewHost: {} }]);
const wrapper = mount(
<TestProviders store={store}>
<TestProviders>
<OverviewHost {...testProps} />
</TestProviders>
);
@ -102,7 +86,7 @@ describe('OverviewHost', () => {
test('it renders the expected event count in the subtitle after loading events', async () => {
const wrapper = mount(
<TestProviders store={store}>
<TestProviders>
<OverviewHost {...testProps} />
</TestProviders>
);

View file

@ -5,21 +5,12 @@
* 2.0.
*/
import { cloneDeep } from 'lodash/fp';
import { mount } from 'enzyme';
import React from 'react';
import '../../../common/mock/match_media';
import {
mockGlobalState,
TestProviders,
SUB_PLUGINS_REDUCER,
createSecuritySolutionStorageMock,
kibanaObservable,
} from '../../../common/mock';
import { TestProviders } from '../../../common/mock';
import { OverviewNetwork } from '.';
import type { State } from '../../../common/store';
import { createStore } from '../../../common/store';
import { useNetworkOverview } from '../../containers/overview_network';
import { SecurityPageName } from '../../../app/types';
import { useQueryToggle } from '../../../common/containers/query_toggle';
@ -83,22 +74,15 @@ const useNetworkOverviewMock = useNetworkOverview as jest.Mock;
const mockUseQueryToggle = useQueryToggle as jest.Mock;
describe('OverviewNetwork', () => {
const state: State = mockGlobalState;
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
beforeEach(() => {
jest.clearAllMocks();
useNetworkOverviewMock.mockReturnValue([false, MOCKED_RESPONSE]);
mockUseQueryToggle.mockReturnValue({ toggleStatus: true, setToggleStatus: jest.fn() });
const myState = cloneDeep(state);
store = createStore(myState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
});
test('it renders the expected widget title', () => {
const wrapper = mount(
<TestProviders store={store}>
<TestProviders>
<OverviewNetwork {...defaultProps} />
</TestProviders>
);
@ -111,7 +95,7 @@ describe('OverviewNetwork', () => {
test('it renders an empty subtitle while loading', () => {
useNetworkOverviewMock.mockReturnValueOnce([true, { overviewNetwork: {} }]);
const wrapper = mount(
<TestProviders store={store}>
<TestProviders>
<OverviewNetwork {...defaultProps} />
</TestProviders>
);
@ -121,7 +105,7 @@ describe('OverviewNetwork', () => {
test('it renders the expected event count in the subtitle after loading events', async () => {
const wrapper = mount(
<TestProviders store={store}>
<TestProviders>
<OverviewNetwork {...defaultProps} />
</TestProviders>
);
@ -133,7 +117,7 @@ describe('OverviewNetwork', () => {
it('it renders View Network', () => {
const wrapper = mount(
<TestProviders store={store}>
<TestProviders>
<OverviewNetwork {...defaultProps} />
</TestProviders>
);
@ -143,7 +127,7 @@ describe('OverviewNetwork', () => {
it('when click on View Network we call navigateToApp to make sure to navigate to right page', () => {
const wrapper = mount(
<TestProviders store={store}>
<TestProviders>
<OverviewNetwork {...defaultProps} />
</TestProviders>
);

View file

@ -12,7 +12,6 @@ import { mount } from 'enzyme';
import type { History as HistoryPackageHistoryInterface } from 'history';
import { createMemoryHistory } from 'history';
import { coreMock } from '@kbn/core/public/mocks';
import { createStore } from '../../../common/store/store';
import { spyMiddlewareFactory } from '../spy_middleware_factory';
import { resolverMiddlewareFactory } from '../../store/middleware';
import { MockResolver } from './mock_resolver';
@ -21,12 +20,7 @@ import { sideEffectSimulatorFactory } from '../../view/side_effect_simulator_fac
import { uiSetting } from '../../mocks/ui_setting';
import { EMPTY_RESOLVER } from '../../store/helpers';
import type { State } from '../../../common/store/types';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
} from '../../../common/mock';
import { createMockStore, mockGlobalState } from '../../../common/mock';
import { createResolver } from '../../store/actions';
/**
* Test a Resolver instance using jest, enzyme, and a mock data layer.
@ -112,17 +106,16 @@ export class Simulator {
this.spyMiddleware = spyMiddlewareFactory();
// Create a redux store w/ the top level Resolver reducer and the enhancer that includes the Resolver middleware and the `spyMiddleware`
const { storage } = createSecuritySolutionStorageMock();
this.store = createStore(
this.store = createMockStore(
{
...mockGlobalState,
analyzer: {
[resolverComponentInstanceID]: EMPTY_RESOLVER,
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage,
undefined,
undefined,
undefined,
[resolverMiddlewareFactory(dataAccessLayer), this.spyMiddleware.middleware]
);

View file

@ -14,16 +14,13 @@ import {
useTimelineFullScreen,
} from '../../../common/containers/use_full_screen';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
createMockStore,
mockGlobalState,
mockIndexNames,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../../common/mock';
import { TimelineId } from '../../../../common/types/timeline';
import { GraphOverlay } from '.';
import { createStore } from '../../../common/store';
import { useStateSyncingActions } from '../../../resolver/view/use_state_syncing_actions';
import { SourcererScopeName } from '../../../common/store/sourcerer/model';
import { TableId } from '@kbn/securitysolution-data-table';
@ -73,7 +70,6 @@ jest.mock('react-redux', () => {
});
describe('GraphOverlay', () => {
const { storage } = createSecuritySolutionStorageMock();
beforeEach(() => {
jest.clearAllMocks();
(useGlobalFullScreen as jest.Mock).mockReturnValue({
@ -121,23 +117,18 @@ describe('GraphOverlay', () => {
test('it gets index pattern from default data view', () => {
render(
<TestProviders
store={createStore(
{
...mockGlobalState,
timeline: {
...mockGlobalState.timeline,
timelineById: {
[TimelineId.test]: {
...mockGlobalState.timeline.timelineById[TimelineId.test],
graphEventId: 'definitely-not-null',
},
store={createMockStore({
...mockGlobalState,
timeline: {
...mockGlobalState.timeline,
timelineById: {
[TimelineId.test]: {
...mockGlobalState.timeline.timelineById[TimelineId.test],
graphEventId: 'definitely-not-null',
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
)}
})}
>
<GraphOverlay SessionView={<div />} Navigation={<div />} scopeId={TableId.test} />
</TestProviders>
@ -190,37 +181,32 @@ describe('GraphOverlay', () => {
const mockedDefaultDataViewPattern = 'default-dataview-pattern';
render(
<TestProviders
store={createStore(
{
...mockGlobalState,
timeline: {
...mockGlobalState.timeline,
timelineById: {
[timelineId]: {
...mockGlobalState.timeline.timelineById[timelineId],
graphEventId: 'definitely-not-null',
},
},
},
sourcerer: {
...mockGlobalState.sourcerer,
defaultDataView: {
...mockGlobalState.sourcerer.defaultDataView,
patternList: [mockedDefaultDataViewPattern],
},
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.timeline]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.timeline],
selectedPatterns: mockIndexNames,
},
store={createMockStore({
...mockGlobalState,
timeline: {
...mockGlobalState.timeline,
timelineById: {
[timelineId]: {
...mockGlobalState.timeline.timelineById[timelineId],
graphEventId: 'definitely-not-null',
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
)}
sourcerer: {
...mockGlobalState.sourcerer,
defaultDataView: {
...mockGlobalState.sourcerer.defaultDataView,
patternList: [mockedDefaultDataViewPattern],
},
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.timeline]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.timeline],
selectedPatterns: mockIndexNames,
},
},
},
})}
>
<GraphOverlay SessionView={<div />} Navigation={<div />} scopeId={timelineId} />
</TestProviders>
@ -244,27 +230,22 @@ describe('GraphOverlay', () => {
const wrapper = render(
<TestProviders
store={createStore(
{
...mockGlobalState,
timeline: {
...mockGlobalState.timeline,
timelineById: {
[timelineId]: {
...mockGlobalState.timeline.timelineById[timelineId],
sessionViewConfig: {
index: 'logs-endpoint.events.process*',
sessionEntityId: 'testId',
sessionStartTime: '2021-10-14T08:05:34.853Z',
},
store={createMockStore({
...mockGlobalState,
timeline: {
...mockGlobalState.timeline,
timelineById: {
[timelineId]: {
...mockGlobalState.timeline.timelineById[timelineId],
sessionViewConfig: {
index: 'logs-endpoint.events.process*',
sessionEntityId: 'testId',
sessionStartTime: '2021-10-14T08:05:34.853Z',
},
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
)}
})}
>
<GraphOverlay
SessionView={<div />}
@ -289,23 +270,18 @@ describe('GraphOverlay', () => {
const wrapper = render(
<TestProviders
store={createStore(
{
...mockGlobalState,
timeline: {
...mockGlobalState.timeline,
timelineById: {
[timelineId]: {
...mockGlobalState.timeline.timelineById[timelineId],
graphEventId: 'test_id',
},
store={createMockStore({
...mockGlobalState,
timeline: {
...mockGlobalState.timeline,
timelineById: {
[timelineId]: {
...mockGlobalState.timeline.timelineById[timelineId],
graphEventId: 'test_id',
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
)}
})}
>
<GraphOverlay SessionView={<div />} Navigation={<div />} scopeId={timelineId} />
</TestProviders>

View file

@ -9,15 +9,8 @@ import { mount } from 'enzyme';
import React from 'react';
import '../../../common/mock/match_media';
import {
mockGlobalState,
TestProviders,
SUB_PLUGINS_REDUCER,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../../common/mock';
import { mockGlobalState, TestProviders, createMockStore } from '../../../common/mock';
import type { State } from '../../../common/store';
import { createStore } from '../../../common/store';
import { DetailsPanel } from '.';
import { TimelineId, TimelineTabs } from '../../../../common/types/timeline';
import { FlowTargetSourceDest } from '../../../../common/search_strategy/security_solution/network';
@ -63,8 +56,7 @@ describe('Details Panel Component', () => {
},
};
const { storage } = createSecuritySolutionStorageMock();
let store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
let store = createMockStore(state);
const dataLessExpandedDetail = {
[TimelineTabs.query]: {
@ -131,7 +123,7 @@ describe('Details Panel Component', () => {
hasAssistantPrivilege: false,
isAssistantEnabled: true,
});
store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(state);
});
test('it should not render the DetailsPanel if no expanded detail has been set in the reducer', () => {
@ -180,7 +172,7 @@ describe('Details Panel Component', () => {
};
mockState.timeline.timelineById[TimelineId.active].expandedDetail = eventExpandedDetail;
mockState.timeline.timelineById[TimelineId.test].expandedDetail = eventExpandedDetail;
store = createStore(mockState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(mockState);
mockUseSearchStrategy.mockReturnValue({
loading: true,
@ -244,7 +236,7 @@ describe('Details Panel Component', () => {
};
newState.timeline.timelineById[TimelineId.active].activeTab = TimelineTabs.query;
newState.timeline.timelineById[TimelineId.active].expandedDetail = eventExpandedDetail;
store = createStore(newState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(newState);
const wrapper = mount(
<TestProviders store={store}>
<DetailsPanel {...currentProps} />
@ -270,7 +262,7 @@ describe('Details Panel Component', () => {
mockState.timeline.timelineById[TimelineId.active].expandedDetail = eventPinnedExpandedDetail;
mockState.timeline.timelineById[TimelineId.test].expandedDetail = eventPinnedExpandedDetail;
mockState.timeline.timelineById[TimelineId.test].activeTab = TimelineTabs.pinned;
store = createStore(mockState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(mockState);
});
test('it should have the attributes isDraggable to be false when timelineId !== "active" and activeTab === "pinned"', () => {
@ -324,7 +316,7 @@ describe('Details Panel Component', () => {
};
mockState.timeline.timelineById[TimelineId.test].expandedDetail = hostExpandedDetail;
mockState.timeline.timelineById[TimelineId.active].expandedDetail = hostExpandedDetail;
store = createStore(mockState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(mockState);
});
afterEach(() => {
@ -365,7 +357,7 @@ describe('Details Panel Component', () => {
};
mockState.timeline.timelineById[TimelineId.test].expandedDetail = networkExpandedDetail;
mockState.timeline.timelineById[TimelineId.active].expandedDetail = networkExpandedDetail;
store = createStore(mockState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
store = createMockStore(mockState);
});
afterEach(() => {

View file

@ -6,18 +6,11 @@
*/
import { renderHook } from '@testing-library/react-hooks';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../../../../common/mock';
import { mockGlobalState, TestProviders, createMockStore } from '../../../../../common/mock';
import { useManagedUserItems } from './use_managed_user_items';
import { mockEntraUserFields, mockOktaUserFields } from '../__mocks__';
import { UserAssetTableType } from '../../../../../explore/users/store/model';
import React from 'react';
import { createStore } from '../../../../../common/store';
const mockState = {
...mockGlobalState,
@ -37,8 +30,7 @@ const mockState = {
},
};
const { storage } = createSecuritySolutionStorageMock();
const mockStore = createStore(mockState, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const mockStore = createMockStore(mockState);
const TestWrapper = ({ children }: { children: React.ReactNode }) => (
<TestProviders store={mockStore}>{children}</TestProviders>

View file

@ -6,7 +6,6 @@
*/
import React from 'react';
import type { Store } from 'redux';
import { mount } from 'enzyme';
import { waitFor } from '@testing-library/react';
@ -16,14 +15,12 @@ import '../../../../common/mock/match_media';
import { mockBrowserFields } from '../../../../common/containers/source/mock';
import { Direction } from '../../../../../common/search_strategy';
import {
createSecuritySolutionStorageMock,
defaultHeaders,
kibanaObservable,
mockGlobalState,
mockTimelineData,
SUB_PLUGINS_REDUCER,
createMockStore,
TestProviders,
} from '../../../../common/mock';
import { TestProviders } from '../../../../common/mock/test_providers';
import { useAppToasts } from '../../../../common/hooks/use_app_toasts';
import { useAppToastsMock } from '../../../../common/hooks/use_app_toasts.mock';
@ -35,7 +32,6 @@ import { timelineActions } from '../../../store';
import { TimelineId, TimelineTabs } from '../../../../../common/types/timeline';
import { defaultRowRenderers } from './renderers';
import type { State } from '../../../../common/store';
import { createStore } from '../../../../common/store';
import type { UseFieldBrowserOptionsProps } from '../../fields_browser';
import type {
DraggableProvided,
@ -214,7 +210,10 @@ jest.mock('@hello-pangea/dnd', () => ({
}));
describe('Body', () => {
const getWrapper = async (childrenComponent: JSX.Element, store?: { store: Store<State> }) => {
const getWrapper = async (
childrenComponent: JSX.Element,
store?: { store: ReturnType<typeof createMockStore> }
) => {
const wrapper = mount(childrenComponent, {
wrappingComponent: TestProviders,
wrappingComponentProps: store ?? {},
@ -301,7 +300,6 @@ describe('Body', () => {
expect(wrapper.find('[data-test-subj="events"]').first().exists()).toEqual(true);
});
test('it renders a tooltip for timestamp', async () => {
const { storage } = createSecuritySolutionStorageMock();
const headersJustTimestamp = defaultHeaders.filter((h) => h.id === '@timestamp');
const state: State = {
...mockGlobalState,
@ -318,7 +316,7 @@ describe('Body', () => {
},
};
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state);
const wrapper = await getWrapper(<StatefulBody {...props} />, { store });
headersJustTimestamp.forEach(() => {
@ -378,7 +376,6 @@ describe('Body', () => {
});
test('Add two notes to an event', async () => {
const { storage } = createSecuritySolutionStorageMock();
const state: State = {
...mockGlobalState,
timeline: {
@ -394,7 +391,7 @@ describe('Body', () => {
},
};
const store = createStore(state, SUB_PLUGINS_REDUCER, kibanaObservable, storage);
const store = createMockStore(state);
const Proxy = (proxyProps: Props) => <StatefulBody {...proxyProps} />;

View file

@ -7,7 +7,7 @@
import React from 'react';
import { mockTimelineData } from '../../../../../common/mock';
import { mockTimelineData, TestProviders } from '../../../../../common/mock';
import { defaultColumnHeaderType } from '../column_headers/default_headers';
import { REASON_FIELD_NAME } from './constants';
import { reasonColumnRenderer } from './reason_column_renderer';
@ -17,7 +17,6 @@ import type { ColumnHeaderOptions, RowRenderer } from '../../../../../../common/
import { RowRendererId } from '../../../../../../common/api/timeline';
import { render } from '@testing-library/react';
import { TestProviders } from '@kbn/timelines-plugin/public/mock';
import { cloneDeep } from 'lodash';
import { TableId } from '@kbn/securitysolution-data-table';
jest.mock('./plain_column_renderer');

View file

@ -14,12 +14,10 @@ import '../../../common/mock/match_media';
import { mockBrowserFields } from '../../../common/containers/source/mock';
import { TimelineId } from '../../../../common/types/timeline';
import {
createSecuritySolutionStorageMock,
kibanaObservable,
createMockStore,
mockGlobalState,
mockIndexNames,
mockIndexPattern,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../../common/mock';
@ -30,7 +28,6 @@ import { DefaultCellRenderer } from './cell_rendering/default_cell_renderer';
import { SELECTOR_TIMELINE_GLOBAL_CONTAINER } from './styles';
import { defaultRowRenderers } from './body/renderers';
import { useSourcererDataView } from '../../../common/containers/sourcerer';
import { createStore } from '../../../common/store';
import { SourcererScopeName } from '../../../common/store/sourcerer/model';
jest.mock('../../containers', () => ({
@ -99,7 +96,6 @@ describe('StatefulTimeline', () => {
rowRenderers: defaultRowRenderers,
timelineId: TimelineId.test,
};
const { storage } = createSecuritySolutionStorageMock();
beforeEach(() => {
jest.clearAllMocks();
@ -155,26 +151,21 @@ describe('StatefulTimeline', () => {
test('sourcerer data view updates and timeline already matches the data view, no updates', () => {
mount(
<TestProviders
store={createStore(
{
...mockGlobalState,
timeline: {
...mockGlobalState.timeline,
timelineById: {
[TimelineId.test]: {
...mockGlobalState.timeline.timelineById[TimelineId.test],
savedObjectId: 'definitely-not-null',
indexNames:
mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.timeline]
.selectedPatterns,
},
store={createMockStore({
...mockGlobalState,
timeline: {
...mockGlobalState.timeline,
timelineById: {
[TimelineId.test]: {
...mockGlobalState.timeline.timelineById[TimelineId.test],
savedObjectId: 'definitely-not-null',
indexNames:
mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.timeline]
.selectedPatterns,
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
)}
})}
>
<StatefulTimeline {...props} />
</TestProviders>
@ -185,33 +176,28 @@ describe('StatefulTimeline', () => {
test('sourcerer data view updates, update timeline data view', () => {
mount(
<TestProviders
store={createStore(
{
...mockGlobalState,
timeline: {
...mockGlobalState.timeline,
timelineById: {
[TimelineId.test]: {
...mockGlobalState.timeline.timelineById[TimelineId.test],
savedObjectId: 'definitely-not-null',
},
},
},
sourcerer: {
...mockGlobalState.sourcerer,
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.timeline]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.timeline],
selectedPatterns: mockIndexNames,
},
store={createMockStore({
...mockGlobalState,
timeline: {
...mockGlobalState.timeline,
timelineById: {
[TimelineId.test]: {
...mockGlobalState.timeline.timelineById[TimelineId.test],
savedObjectId: 'definitely-not-null',
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
)}
sourcerer: {
...mockGlobalState.sourcerer,
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.timeline]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.timeline],
selectedPatterns: mockIndexNames,
},
},
},
})}
>
<StatefulTimeline {...props} />
</TestProviders>

View file

@ -12,15 +12,12 @@ import { TIMELINE_TOUR_CONFIG_ANCHORS } from './step_config';
import { useIsElementMounted } from '../../../../detection_engine/rule_management_ui/components/rules_table/rules_table/guided_onboarding/use_is_element_mounted';
import { render, screen, waitFor, fireEvent } from '@testing-library/react';
import {
createMockStore,
createSecuritySolutionStorageMock,
kibanaObservable,
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
} from '../../../../common/mock';
import { TimelineTabs } from '../../../../../common/types';
import { TimelineType } from '../../../../../common/api/timeline';
import { createStore } from '../../../../common/store';
import { useKibana as mockUseKibana } from '../../../../common/lib/kibana/__mocks__';
import { useKibana } from '../../../../common/lib/kibana';
@ -33,7 +30,7 @@ const mockedUseKibana = mockUseKibana();
const switchTabMock = jest.fn();
const { storage: storageMock } = createSecuritySolutionStorageMock();
const mockStore = createStore(mockGlobalState, SUB_PLUGINS_REDUCER, kibanaObservable, storageMock);
const mockStore = createMockStore(undefined, undefined, undefined, storageMock);
const TestComponent = (props: Partial<TimelineTourProps> = {}) => {
return (

View file

@ -6,15 +6,8 @@
*/
import { renderHook } from '@testing-library/react-hooks';
import {
mockGlobalState,
SUB_PLUGINS_REDUCER,
TestProviders,
kibanaObservable,
createSecuritySolutionStorageMock,
} from '../../common/mock';
import { mockGlobalState, TestProviders, createMockStore } from '../../common/mock';
import { useTimelineDataFilters } from './use_timeline_data_filters';
import { createStore } from '../../common/store';
import React from 'react';
import { SourcererScopeName } from '../../common/store/sourcerer/model';
@ -27,29 +20,23 @@ const defaultDataViewPattern = 'test-dataview-patterns';
const timelinePattern = 'test-timeline-patterns';
const alertsPagePatterns = '.siem-signals-spacename';
const pathname = '/alerts';
const { storage } = createSecuritySolutionStorageMock();
const store = createStore(
{
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
defaultDataView: {
...mockGlobalState.sourcerer.defaultDataView,
patternList: [defaultDataViewPattern],
},
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.timeline]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.timeline],
selectedPatterns: [timelinePattern],
},
const store = createMockStore({
...mockGlobalState,
sourcerer: {
...mockGlobalState.sourcerer,
defaultDataView: {
...mockGlobalState.sourcerer.defaultDataView,
patternList: [defaultDataViewPattern],
},
sourcererScopes: {
...mockGlobalState.sourcerer.sourcererScopes,
[SourcererScopeName.timeline]: {
...mockGlobalState.sourcerer.sourcererScopes[SourcererScopeName.timeline],
selectedPatterns: [timelinePattern],
},
},
},
SUB_PLUGINS_REDUCER,
kibanaObservable,
storage
);
});
const wrapper = ({ children }: { children: React.ReactNode }) => (
<TestProviders store={store}>{children}</TestProviders>

View file

@ -193,10 +193,6 @@ export interface PluginStart {
setOnboardingPageSettings: OnboardingPageService;
}
export interface AppObservableLibs {
kibana: CoreStart;
}
export type InspectResponse = Inspect & { response: string[] };
export const CASES_SUB_PLUGIN_KEY = 'cases';

View file

@ -7,17 +7,15 @@
import React from 'react';
import { RecursivePartial } from '@elastic/eui/src/components/common';
import { coreMock } from '@kbn/core/public/mocks';
import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public';
import { EuiTheme } from '@kbn/kibana-react-plugin/common';
import { CoreStart } from '@kbn/core/public';
export const mockGetCreateCaseFlyout = jest.fn();
export const mockGetAllCasesSelectorModal = jest.fn();
export const mockNavigateToApp = jest.fn();
const mockGetCreateCaseFlyout = jest.fn();
const mockGetAllCasesSelectorModal = jest.fn();
const mockNavigateToApp = jest.fn();
export const createStartServicesMock = (): CoreStart => {
const createStartServicesMock = (): CoreStart => {
const coreServices = coreMock.createStart();
return {
...coreServices,
@ -37,15 +35,6 @@ export const createStartServicesMock = (): CoreStart => {
} as unknown as CoreStart;
};
export const createWithKibanaMock = () => {
const services = createStartServicesMock();
// eslint-disable-next-line react/display-name
return (Component: unknown) => (props: unknown) => {
return React.createElement(Component as string, { ...(props as object), kibana: { services } });
};
};
export const createKibanaContextProviderMock = () => {
const services = createStartServicesMock();
@ -53,6 +42,3 @@ export const createKibanaContextProviderMock = () => {
return ({ children }: { children: React.ReactNode }) =>
React.createElement(KibanaContextProvider, { services }, children);
};
export const getMockTheme = (partialTheme: RecursivePartial<EuiTheme>): EuiTheme =>
partialTheme as EuiTheme;

View file

@ -11,11 +11,10 @@ import { I18nProvider } from '@kbn/i18n-react';
import React from 'react';
import { Provider as ReduxStoreProvider } from 'react-redux';
import { Store } from 'redux';
import { BehaviorSubject } from 'rxjs';
import { ThemeProvider } from 'styled-components';
import { configureStore } from '@reduxjs/toolkit';
import { createKibanaContextProviderMock, createStartServicesMock } from './kibana_react.mock';
import { createKibanaContextProviderMock } from './kibana_react.mock';
import { timelineReducer } from '../store/timeline/reducer';
interface Props {
@ -23,8 +22,6 @@ interface Props {
store?: Store;
}
export const kibanaObservable = new BehaviorSubject(createStartServicesMock());
interface State {
timelineById: Record<string, unknown>;
}