Skip to content

Commit

Permalink
adds and consolidates tests
Browse files Browse the repository at this point in the history
  • Loading branch information
dplumlee committed Aug 11, 2023
1 parent a1e064c commit 3dec737
Show file tree
Hide file tree
Showing 7 changed files with 133 additions and 95 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

import type { CoverageOverviewFilter } from './coverage_overview_route';
import {
CoverageOverviewRuleSource,
CoverageOverviewRuleActivity,
} from './coverage_overview_route';

export const getCoverageOverviewFilterMock = (): CoverageOverviewFilter => ({
search_term: 'test query',
activity: [CoverageOverviewRuleActivity.Enabled],
source: [CoverageOverviewRuleSource.Prebuilt],
});
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ import { DashboardFilterButtonComponent } from './shared_components/dashboard_fi
import { CoverageOverviewLegend } from './shared_components/dashboard_legend';
import {
formatRuleFilterOptions,
getInitialRuleStatusFilter,
getInitialRuleTypeFilter,
getInitialRuleStatusFilterOptions,
getInitialRuleTypeFilterOptions,
} from './helpers';
import * as i18n from './translations';
import { ruleStatusFilterDefaultOptions, ruleTypeFilterDefaultOptions } from './constants';
Expand Down Expand Up @@ -85,8 +85,14 @@ const CoverageOverviewFiltersPanelComponent = ({
const handleExpandCellsFilterClick = () => setShowExpandedCells(true);
const handleCollapseCellsFilterClick = () => setShowExpandedCells(false);

const ruleStatusFilterInitalValue = useMemo(() => getInitialRuleStatusFilter(filter), [filter]);
const ruleTypeFilterInitalValue = useMemo(() => getInitialRuleTypeFilter(filter), [filter]);
const ruleStatusFilterInitalValue = useMemo(
() => getInitialRuleStatusFilterOptions(filter),
[filter]
);
const ruleTypeFilterInitalValue = useMemo(
() => getInitialRuleTypeFilterOptions(filter),
[filter]
);

const [ruleStatusFilterOptions, setRuleStatusFilterOptions] = useState(
ruleStatusFilterInitalValue
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,23 @@
* 2.0.
*/

import { getCoverageOverviewFilterMock } from '../../../../../common/api/detection_engine/rule_management/coverage_overview/coverage_overview_route.mock';
import {
getMockCoverageOverviewMitreSubTechnique,
getMockCoverageOverviewMitreTactic,
getMockCoverageOverviewMitreTechnique,
} from '../../../rule_management/model/coverage_overview/__mocks__';
import { getNumOfCoveredSubtechniques, getNumOfCoveredTechniques } from './helpers';
import { ruleStatusFilterDefaultOptions, ruleTypeFilterDefaultOptions } from './constants';
import {
formatRuleFilterOptions,
getInitialRuleStatusFilterOptions,
getInitialRuleTypeFilterOptions,
getNumOfCoveredSubtechniques,
getNumOfCoveredTechniques,
} from './helpers';

describe('helpers', () => {
describe('getCoveredTechniques', () => {
describe('getNumOfCoveredTechniques', () => {
it('returns 0 when no techniques are present', () => {
const payload = getMockCoverageOverviewMitreTactic();
expect(getNumOfCoveredTechniques(payload)).toEqual(0);
Expand All @@ -31,7 +39,7 @@ describe('helpers', () => {
});
});

describe('getCoveredSubtechniques', () => {
describe('getNumOfCoveredSubtechniques', () => {
it('returns 0 when no subtechniques are present', () => {
const payload = getMockCoverageOverviewMitreTechnique();
expect(getNumOfCoveredSubtechniques(payload)).toEqual(0);
Expand All @@ -48,4 +56,71 @@ describe('helpers', () => {
expect(getNumOfCoveredSubtechniques(payload)).toEqual(2);
});
});

describe('formatRuleFilterOptions', () => {
it('returns empty array when no options are checked', () => {
const payload = ruleStatusFilterDefaultOptions;
expect(formatRuleFilterOptions(payload)).toEqual([]);
});

it('returns checked options when present', () => {
const payload = [
...ruleStatusFilterDefaultOptions,
{ ...ruleStatusFilterDefaultOptions[0], checked: 'on' },
];
expect(formatRuleFilterOptions(payload)).toEqual([ruleStatusFilterDefaultOptions[0].key]);
});
});

describe('getInitialRuleStatusFilterOptions', () => {
it('returns default status options when no filter is present', () => {
const payload = {};
expect(getInitialRuleStatusFilterOptions(payload)).toEqual(ruleStatusFilterDefaultOptions);
});

it('returns correct options checked when present in filter', () => {
const payload = getCoverageOverviewFilterMock();
expect(getInitialRuleStatusFilterOptions(payload)).toMatchInlineSnapshot(`
Array [
Object {
"checked": "on",
"key": "enabled",
"label": "Enabled rules",
},
Object {
"key": "disabled",
"label": "Disabled rules",
},
]
`);
});
});

describe('getInitialRuleTypeFilterOptions', () => {
it('returns default type options when no filter is present', () => {
const payload = {};
expect(getInitialRuleTypeFilterOptions(payload)).toEqual(ruleTypeFilterDefaultOptions);
});

it('returns correct options checked when present in filter', () => {
const payload = getCoverageOverviewFilterMock();
expect(getInitialRuleTypeFilterOptions(payload)).toMatchInlineSnapshot(`
Array [
Object {
"checked": "on",
"key": "prebuilt",
"label": "Elastic rules",
},
Object {
"key": "customized",
"label": "Elastic customized rules",
},
Object {
"key": "custom",
"label": "Custom rules",
},
]
`);
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -36,20 +36,24 @@ export const getCardBackgroundColor = (value: number) => {
export const formatRuleFilterOptions = <
T extends CoverageOverviewRuleSource | CoverageOverviewRuleActivity
>(
options: Array<{ checked: string; key: T }>
options: Array<{ checked?: string; key: T }>
): T[] => {
return options.filter((option) => option.checked === 'on').map((option) => option.key);
};

export const getInitialRuleStatusFilter = (filter: CoverageOverviewFilter): EuiSelectableOption[] =>
export const getInitialRuleStatusFilterOptions = (
filter: CoverageOverviewFilter
): EuiSelectableOption[] =>
ruleStatusFilterDefaultOptions.map((option) => {
if (filter.activity?.includes(option.key)) {
return { ...option, checked: 'on' };
}
return option;
});

export const getInitialRuleTypeFilter = (filter: CoverageOverviewFilter): EuiSelectableOption[] =>
export const getInitialRuleTypeFilterOptions = (
filter: CoverageOverviewFilter
): EuiSelectableOption[] =>
ruleTypeFilterDefaultOptions.map((option) => {
if (filter.source?.includes(option.key)) {
return { ...option, checked: 'on' };
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,36 @@ const mockExecuteBulkAction = jest.fn();
});

const renderTechniquePanelPopover = (
technique: CoverageOverviewMitreTechnique = getMockCoverageOverviewMitreTechnique()
technique: CoverageOverviewMitreTechnique = getMockCoverageOverviewMitreTechnique(),
state = initialState
) => {
return render(
<TestProviders>
<CoverageOverviewDashboardContext.Provider
value={{ state: initialState, dispatch: () => {} }}
>
<CoverageOverviewDashboardContext.Provider value={{ state, dispatch: () => {} }}>
<CoverageOverviewMitreTechniquePanelPopover technique={technique} />
</CoverageOverviewDashboardContext.Provider>
</TestProviders>
);
};

describe('CoverageOverviewMitreTechniquePanelPopover', () => {
test('it renders panel with collapsed view', () => {
const wrapper = renderTechniquePanelPopover();

expect(wrapper.getByTestId('coverageOverviewTechniquePanel')).toBeInTheDocument();
expect(wrapper.queryByTestId('coverageOverviewPanelMetadata')).not.toBeInTheDocument();
});

test('it renders panel with expanded view', () => {
const wrapper = renderTechniquePanelPopover(getMockCoverageOverviewMitreTechnique(), {
...initialState,
showExpandedCells: true,
});

expect(wrapper.getByTestId('coverageOverviewTechniquePanel')).toBeInTheDocument();
expect(wrapper.getByTestId('coverageOverviewPanelMetadata')).toBeInTheDocument();
});

test('it renders all rules in correct areas', () => {
const wrapper = renderTechniquePanelPopover();

Expand Down

0 comments on commit 3dec737

Please sign in to comment.