Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Soc dashboard - UI #128087

Merged
merged 65 commits into from
Apr 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
bf25737
init pie chart
angorayc Mar 18, 2022
b9c7392
styling
angorayc Mar 21, 2022
186970d
donut card
angorayc Mar 23, 2022
b86f210
styling
angorayc Mar 24, 2022
7d80354
parser
angorayc Mar 29, 2022
0fcf327
wording
angorayc Mar 29, 2022
85cc50a
unit tests
angorayc Mar 30, 2022
7b53767
disable detectionResponse feature flag
angorayc Mar 31, 2022
8ca320f
Merge branch 'main' of github.com:elastic/kibana into soc_dashboard
angorayc Mar 31, 2022
a5049b4
rename props
angorayc Mar 31, 2022
ae8ad87
add detection_response folder
angorayc Mar 31, 2022
47994d9
add query hook
angorayc Mar 31, 2022
8e9c14e
disable detectionResponse
angorayc Apr 4, 2022
dc564d0
Merge branch 'main' of github.com:elastic/kibana into soc_dashboard
angorayc Apr 4, 2022
bf11089
alerts button and count
angorayc Apr 4, 2022
6d37914
toggle query
angorayc Apr 5, 2022
afff3cb
fix unit tests
angorayc Apr 5, 2022
b6c517a
disable dashboard
angorayc Apr 5, 2022
3dadfc8
fillColor
angorayc Apr 5, 2022
c9a6c86
disable dashboard
angorayc Apr 5, 2022
bd9a301
fix legends
angorayc Apr 6, 2022
1d9d22b
detectionResponseEnabled
angorayc Apr 6, 2022
a1a4a30
Merge branch 'main' of github.com:elastic/kibana into soc_dashboard
angorayc Apr 6, 2022
596a8df
review
angorayc Apr 6, 2022
9a30d13
rm old tests
angorayc Apr 6, 2022
f6360f6
review
angorayc Apr 7, 2022
d05c355
fix types
angorayc Apr 7, 2022
4e7c994
legend
angorayc Apr 7, 2022
a179368
rename
angorayc Apr 7, 2022
3d721f6
rm i18n keys
angorayc Apr 7, 2022
2c1c703
unit tests
angorayc Apr 11, 2022
2d1ebf6
Merge branch 'main' of github.com:elastic/kibana into soc_dashboard
angorayc Apr 11, 2022
e11d488
update i18n keys
angorayc Apr 11, 2022
e1db5db
add unit tests
angorayc Apr 11, 2022
7eea263
fix unit tests
angorayc Apr 11, 2022
6409979
Merge branch 'main' of github.com:elastic/kibana into soc_dashboard
angorayc Apr 12, 2022
033f540
Merge branch 'main' into soc_dashboard
kibanamachine Apr 13, 2022
eb2fdbb
Merge branch 'main' into soc_dashboard
kibanamachine Apr 13, 2022
46abdb6
review
angorayc Apr 13, 2022
992cafb
Merge branch 'soc_dashboard' of github.com:angorayc/kibana into soc_d…
angorayc Apr 13, 2022
c93eb14
Merge branch 'main' of github.com:elastic/kibana into soc_dashboard
angorayc Apr 14, 2022
46a1b19
review
angorayc Apr 14, 2022
6516108
styling
angorayc Apr 15, 2022
76c44d5
Merge branch 'main' of github.com:elastic/kibana into soc_dashboard
angorayc Apr 15, 2022
7fd8eb5
Merge branch 'main' into soc_dashboard
kibanamachine Apr 19, 2022
3f5da1d
[CI] Auto-commit changed files from 'node scripts/eslint --no-cache -…
kibanamachine Apr 19, 2022
c92459d
styling
angorayc Apr 19, 2022
9db5499
Merge branch 'soc_dashboard' of github.com:angorayc/kibana into soc_d…
angorayc Apr 19, 2022
aaabc6d
styling
angorayc Apr 19, 2022
62eaa1f
useEuiTheme
angorayc Apr 19, 2022
fd13d07
useEuiTheme
angorayc Apr 19, 2022
c0bcef1
enable feature flag
angorayc Apr 20, 2022
f066400
disable flag
angorayc Apr 20, 2022
5ef2346
enable dashboard
angorayc Apr 20, 2022
813f740
disable dashboard
angorayc Apr 20, 2022
0628f80
Update x-pack/plugins/security_solution/public/common/components/char…
angorayc Apr 20, 2022
283dae7
styling
angorayc Apr 20, 2022
544aafe
styling
angorayc Apr 21, 2022
c61287f
Merge branch 'main' into soc_dashboard
kibanamachine Apr 21, 2022
c5e3e88
unit tests
angorayc Apr 21, 2022
014356d
unit tests
angorayc Apr 21, 2022
4e6947e
Merge branch 'soc_dashboard' of github.com:angorayc/kibana into soc_d…
angorayc Apr 21, 2022
e9c3bf3
unit test
angorayc Apr 21, 2022
d1a3ada
unit tests
angorayc Apr 21, 2022
bb3683f
Merge branch 'main' into soc_dashboard
kibanamachine Apr 21, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
/*
* 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 { Severity } from '@kbn/securitysolution-io-ts-alerting-types';
import { Partition, Settings } from '@elastic/charts';
import { parsedMockAlertsData } from '../../../overview/components/detection_response/alerts_by_status/mock_data';
import { render } from '@testing-library/react';
import { DonutChart, DonutChartProps } from './donutchart';
import { DraggableLegend } from './draggable_legend';
import { ChartLabel } from '../../../overview/components/detection_response/alerts_by_status/chart_label';
import { escapeDataProviderId } from '../drag_and_drop/helpers';
import uuid from 'uuid';

jest.mock('@elastic/charts', () => {
const actual = jest.requireActual('@elastic/charts');
return {
...actual,
Chart: jest.fn(({ children, ...props }) => (
<div data-test-subj="es-chart" {...props}>
{children}
</div>
)),
Partition: jest.fn((props) => <div data-test-subj="es-chart-partition" {...props} />),
Settings: jest.fn((props) => <div data-test-subj="es-chart-settings" {...props} />),
};
});

jest.mock('uuid', () => {
const actual = jest.requireActual('uuid');

return {
...actual,
v4: jest.fn().mockReturnValue('test-uuid'),
};
});

jest.mock('../../../overview/components/detection_response/alerts_by_status/chart_label', () => {
return {
ChartLabel: jest.fn((props) => <span data-test-subj="chart-label" {...props} />),
};
});

jest.mock('./draggable_legend', () => {
return {
DraggableLegend: jest.fn((props) => <span data-test-subj="draggable-legend" {...props} />),
};
});

jest.mock('./common', () => {
return {
useTheme: jest.fn(() => ({
eui: {
euiScrollBar: 0,
euiColorDarkShade: '#fff',
euiScrollBarCorner: '#ccc',
},
})),
};
});

const testColors = {
critical: '#EF6550',
high: '#EE9266',
medium: '#F3B689',
low: '#F8D9B2',
};

describe('DonutChart', () => {
const props: DonutChartProps = {
data: parsedMockAlertsData?.open?.severities,
label: 'Open',
link: null,
title: <ChartLabel count={parsedMockAlertsData?.open?.total} />,
fillColor: jest.fn(() => '#ccc'),
totalCount: parsedMockAlertsData?.open?.total,
legendItems: (['critical', 'high', 'medium', 'low'] as Severity[]).map((d) => ({
color: testColors[d],
dataProviderId: escapeDataProviderId(`draggable-legend-item-${uuid.v4()}-${d}`),
timelineId: undefined,
field: 'kibana.alert.severity',
value: d,
})),
};

beforeEach(() => {
jest.clearAllMocks();
});
test('should render Chart', () => {
const { container } = render(<DonutChart {...props} />);
expect(container.querySelector(`[data-test-subj="es-chart"]`)).toBeInTheDocument();
});

test('should render chart Settings', () => {
const { container } = render(<DonutChart {...props} />);
expect(container.querySelector(`[data-test-subj="es-chart-settings"]`)).toBeInTheDocument();

expect((Settings as jest.Mock).mock.calls[0][0]).toEqual({
baseTheme: {
eui: {
euiColorDarkShade: '#fff',
euiScrollBar: 0,
euiScrollBarCorner: '#ccc',
},
},
theme: {
chartMargins: { bottom: 0, left: 0, right: 0, top: 0 },
partition: {
circlePadding: 4,
emptySizeRatio: 0.8,
idealFontSizeJump: 1.1,
outerSizeRatio: 1,
},
},
});
});

test('should render an empty chart', () => {
const testProps = {
...props,
data: parsedMockAlertsData?.acknowledged?.severities,
label: 'Acknowledged',
title: <ChartLabel count={parsedMockAlertsData?.acknowledged?.total} />,
totalCount: parsedMockAlertsData?.acknowledged?.total,
};
const { container } = render(<DonutChart {...testProps} />);
expect(container.querySelector(`[data-test-subj="empty-donut"]`)).toBeInTheDocument();
});

test('should render chart Partition', () => {
const { container } = render(<DonutChart {...props} />);
expect(container.querySelector(`[data-test-subj="es-chart-partition"]`)).toBeInTheDocument();
expect((Partition as jest.Mock).mock.calls[0][0].data).toEqual(
parsedMockAlertsData?.open?.severities
);
expect((Partition as jest.Mock).mock.calls[0][0].layout).toEqual('sunburst');
});

test('should render chart legend', () => {
const { container } = render(<DonutChart {...props} />);
expect(container.querySelector(`[data-test-subj="draggable-legend"]`)).toBeInTheDocument();
expect((DraggableLegend as unknown as jest.Mock).mock.calls[0][0].legendItems).toEqual([
{
color: '#EF6550',
dataProviderId: 'draggable-legend-item-test-uuid-critical',
field: 'kibana.alert.severity',
timelineId: undefined,
value: 'critical',
},
{
color: '#EE9266',
dataProviderId: 'draggable-legend-item-test-uuid-high',
field: 'kibana.alert.severity',
timelineId: undefined,
value: 'high',
},
{
color: '#F3B689',
dataProviderId: 'draggable-legend-item-test-uuid-medium',
field: 'kibana.alert.severity',
timelineId: undefined,
value: 'medium',
},
{
color: '#F8D9B2',
dataProviderId: 'draggable-legend-item-test-uuid-low',
field: 'kibana.alert.severity',
timelineId: undefined,
value: 'low',
},
]);
});

test('should NOT render chart legend if showLegend is false', () => {
const testProps = {
...props,
legendItems: null,
};
const { container } = render(<DonutChart {...testProps} />);
expect(container.querySelector(`[data-test-subj="legend"]`)).not.toBeInTheDocument();
});
});
Loading