Skip to content

Commit

Permalink
update kbn grouping tests and create unit tests for useLatestFindings…
Browse files Browse the repository at this point in the history
…Grouping hook
  • Loading branch information
alexreal1314 committed Jan 21, 2025
1 parent ff5eb9e commit b6a42d6
Show file tree
Hide file tree
Showing 3 changed files with 147 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,9 @@ export const mockGroupingProps = {
unitsCountWithoutNull: {
value: 14,
},
nullGroupItems: {
doc_count: 1,
},
},
groupingId: 'test-grouping-id',
isLoading: false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,5 +223,32 @@ describe('Grouping', () => {
expect(customGroupsUnit).toHaveBeenCalledWith(3, testProps.selectedGroup, true);
expect(screen.getByTestId('group-count').textContent).toBe('3 custom units');
});

it('calls custom groupsUnit callback with hasNullGroup = false', () => {
const customGroupsUnit = jest.fn(
(n, parentSelectedGroup, hasNullGroup) => `${n} custom units`
);

const customProps = {
...testProps,
groupsUnit: customGroupsUnit,
data: {
...testProps.data,
nullGroupItems: {
...testProps.data.nullGroupItems,
doc_count: 0,
},
},
};

render(
<I18nProvider>
<Grouping {...customProps} />
</I18nProvider>
);

expect(customGroupsUnit).toHaveBeenCalledWith(3, testProps.selectedGroup, false);
expect(screen.getByTestId('group-count').textContent).toBe('3 custom units');
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
/*
* 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 React from 'react';
import { renderHook } from '@testing-library/react';
import { useLatestFindingsGrouping } from './use_latest_findings_grouping';
import { useCloudSecurityGrouping } from '../../../components/cloud_security_grouping';
import { useDataViewContext } from '../../../common/contexts/data_view_context';
import { useGetCspBenchmarkRulesStatesApi } from '@kbn/cloud-security-posture/src/hooks/use_get_benchmark_rules_state_api';
import { getGroupingQuery } from '@kbn/grouping';
import { useGroupedFindings } from './use_grouped_findings';

jest.mock('../../../components/cloud_security_grouping');
jest.mock('../../../common/contexts/data_view_context');
jest.mock('@kbn/cloud-security-posture/src/hooks/use_get_benchmark_rules_state_api');
jest.mock('@kbn/grouping', () => ({
getGroupingQuery: jest.fn().mockImplementation((params) => {
return {
query: { bool: {} },
};
}),
parseGroupingQuery: jest.fn().mockReturnValue({}),
}));
jest.mock('./use_grouped_findings');

describe('useLatestFindingsGrouping', () => {
const mockGroupPanelRenderer = <div>Mock Group Panel Renderer</div>;
const mockGetGroupStats = jest.fn();

beforeEach(() => {
(useCloudSecurityGrouping as jest.Mock).mockReturnValue({
grouping: { selectedGroups: ['cloud.account.id'] },
});
(useDataViewContext as jest.Mock).mockReturnValue({ dataView: {} });
(useGetCspBenchmarkRulesStatesApi as jest.Mock).mockReturnValue({ data: {} });
(useGroupedFindings as jest.Mock).mockReturnValue({
data: {},
isFetching: false,
});
});

it('calls getGroupingQuery with correct rootAggregations', () => {
renderHook(() =>
useLatestFindingsGrouping({
groupPanelRenderer: mockGroupPanelRenderer,
getGroupStats: mockGetGroupStats,
groupingLevel: 0,
groupFilters: [],
selectedGroup: 'cloud.account.id',
})
);

expect(getGroupingQuery).toHaveBeenCalledWith(
expect.objectContaining({
rootAggregations: [
{
failedFindings: {
filter: {
term: {
'result.evaluation': { value: 'failed' },
},
},
},
passedFindings: {
filter: {
term: {
'result.evaluation': { value: 'passed' },
},
},
},
nullGroupItems: {
missing: { field: 'cloud.account.id' },
},
},
],
})
);
});

it('calls getGroupingQuery without nullGroupItems when selectedGroup is "none"', () => {
renderHook(() =>
useLatestFindingsGrouping({
groupPanelRenderer: mockGroupPanelRenderer,
getGroupStats: mockGetGroupStats,
groupingLevel: 0,
groupFilters: [],
selectedGroup: 'none',
})
);

expect(getGroupingQuery).toHaveBeenCalledWith(
expect.objectContaining({
rootAggregations: [
{
failedFindings: {
filter: {
term: {
'result.evaluation': { value: 'failed' },
},
},
},
passedFindings: {
filter: {
term: {
'result.evaluation': { value: 'passed' },
},
},
},
},
],
})
);
});
});

0 comments on commit b6a42d6

Please sign in to comment.