Skip to content

Commit

Permalink
Merge branch '8.16' into backport/8.16/pr-196322
Browse files Browse the repository at this point in the history
  • Loading branch information
sphilipse authored Oct 28, 2024
2 parents 2118144 + 495308d commit f3d4cfb
Show file tree
Hide file tree
Showing 32 changed files with 363 additions and 103 deletions.
2 changes: 1 addition & 1 deletion oas_docs/output/kibana.serverless.staging.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15012,7 +15012,7 @@ paths:
nullable: true
type: string
- in: query
name: userFilter
name: createdByFilter
schema:
nullable: true
type: string
Expand Down
2 changes: 1 addition & 1 deletion oas_docs/output/kibana.serverless.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15012,7 +15012,7 @@ paths:
nullable: true
type: string
- in: query
name: userFilter
name: createdByFilter
schema:
nullable: true
type: string
Expand Down
2 changes: 1 addition & 1 deletion oas_docs/output/kibana.staging.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18442,7 +18442,7 @@ paths:
nullable: true
type: string
- in: query
name: userFilter
name: createdByFilter
schema:
nullable: true
type: string
Expand Down
2 changes: 1 addition & 1 deletion oas_docs/output/kibana.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18442,7 +18442,7 @@ paths:
nullable: true
type: string
- in: query
name: userFilter
name: createdByFilter
schema:
nullable: true
type: string
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ import { euiThemeVars } from '@kbn/ui-theme';
export const statusColors = {
passed: euiThemeVars.euiColorSuccess,
failed: euiThemeVars.euiColorVis9,
unknown: euiThemeVars.euiColorLightShade,
};
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ export const ALERT_SUPPRESSION_RULE_DETAILS = i18n.translate(
);

export const UPGRADE_NOTES_MANAGEMENT_USER_FILTER = (requiredLicense: string) =>
i18n.translate('securitySolutionPackages.noteManagement.userFilter.upsell', {
defaultMessage: 'Upgrade to {requiredLicense} to make use of user filters',
i18n.translate('securitySolutionPackages.noteManagement.createdByFilter.upsell', {
defaultMessage: 'Upgrade to {requiredLicense} to make use of createdBy filter',
values: {
requiredLicense,
},
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* 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 { render, screen } from '@testing-library/react';
import { ComplianceScoreBar } from './compliance_score_bar';
import {
COMPLIANCE_SCORE_BAR_UNKNOWN,
COMPLIANCE_SCORE_BAR_PASSED,
COMPLIANCE_SCORE_BAR_FAILED,
} from './test_subjects';

describe('<ComplianceScoreBar />', () => {
it('should display 0% compliance score with status unknown when both passed and failed are 0', () => {
render(<ComplianceScoreBar totalPassed={0} totalFailed={0} />);
expect(screen.getByText('0%')).toBeInTheDocument();
expect(screen.queryByTestId(COMPLIANCE_SCORE_BAR_UNKNOWN)).not.toBeNull();
expect(screen.queryByTestId(COMPLIANCE_SCORE_BAR_FAILED)).toBeNull();
expect(screen.queryByTestId(COMPLIANCE_SCORE_BAR_PASSED)).toBeNull();
});

it('should display 100% compliance score when passed is greater than 0 and failed is 0', () => {
render(<ComplianceScoreBar totalPassed={10} totalFailed={0} />);
expect(screen.getByText('100%')).toBeInTheDocument();
expect(screen.queryByTestId(COMPLIANCE_SCORE_BAR_PASSED)).not.toBeNull();
expect(screen.queryByTestId(COMPLIANCE_SCORE_BAR_FAILED)).toBeNull();
expect(screen.queryByTestId(COMPLIANCE_SCORE_BAR_UNKNOWN)).toBeNull();
});

it('should display 0% compliance score when passed is 0 and failed is greater than 0', () => {
render(<ComplianceScoreBar totalPassed={0} totalFailed={10} />);
expect(screen.getByText('0%')).toBeInTheDocument();
expect(screen.queryByTestId(COMPLIANCE_SCORE_BAR_FAILED)).not.toBeNull();
expect(screen.queryByTestId(COMPLIANCE_SCORE_BAR_PASSED)).toBeNull();
expect(screen.queryByTestId(COMPLIANCE_SCORE_BAR_UNKNOWN)).toBeNull();
});

it('should display 50% compliance score when passed is equal to failed', () => {
render(<ComplianceScoreBar totalPassed={5} totalFailed={5} />);
expect(screen.getByText('50%')).toBeInTheDocument();
expect(screen.queryByTestId(COMPLIANCE_SCORE_BAR_FAILED)).not.toBeNull();
expect(screen.queryByTestId(COMPLIANCE_SCORE_BAR_PASSED)).not.toBeNull();
expect(screen.queryByTestId(COMPLIANCE_SCORE_BAR_UNKNOWN)).toBeNull();
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,12 @@ import { i18n } from '@kbn/i18n';
import React from 'react';
import { statusColors } from '@kbn/cloud-security-posture';
import { calculatePostureScore } from '../../common/utils/helpers';
import { CSP_FINDINGS_COMPLIANCE_SCORE } from './test_subjects';
import {
CSP_FINDINGS_COMPLIANCE_SCORE,
COMPLIANCE_SCORE_BAR_UNKNOWN,
COMPLIANCE_SCORE_BAR_FAILED,
COMPLIANCE_SCORE_BAR_PASSED,
} from './test_subjects';

/**
* This component will take 100% of the width set by the parent
Expand Down Expand Up @@ -59,12 +64,22 @@ export const ComplianceScoreBar = ({
gap: 1px;
`}
>
{!totalPassed && !totalFailed && (
<EuiFlexItem
css={css`
flex: 1;
background: ${statusColors.unknown};
`}
data-test-subj={COMPLIANCE_SCORE_BAR_UNKNOWN}
/>
)}
{!!totalPassed && (
<EuiFlexItem
css={css`
flex: ${totalPassed};
background: ${statusColors.passed};
`}
data-test-subj={COMPLIANCE_SCORE_BAR_PASSED}
/>
)}
{!!totalFailed && (
Expand All @@ -73,6 +88,7 @@ export const ComplianceScoreBar = ({
flex: ${totalFailed};
background: ${statusColors.failed};
`}
data-test-subj={COMPLIANCE_SCORE_BAR_FAILED}
/>
)}
</EuiFlexGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,3 +92,7 @@ export const CIS_GCP_INPUT_FIELDS_TEST_SUBJECTS = {
};

export const SUBSCRIPTION_NOT_ALLOWED_TEST_SUBJECT = 'cloud_posture_page_subscription_not_allowed';

export const COMPLIANCE_SCORE_BAR_UNKNOWN = 'complianceScoreBarUnknown';
export const COMPLIANCE_SCORE_BAR_FAILED = 'complianceScoreBarFailed';
export const COMPLIANCE_SCORE_BAR_PASSED = 'complianceScoreBarPassed';
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
/*
* 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 { render } from '@testing-library/react';
import { useEuiTheme } from '@elastic/eui';
import { ComplianceBarComponent } from './latest_findings_group_renderer';
import { RawBucket } from '@kbn/grouping/src';
import { FindingsGroupingAggregation } from './use_grouped_findings';
import { ComplianceScoreBar } from '../../../components/compliance_score_bar';

jest.mock('@elastic/eui', () => {
const actual = jest.requireActual('@elastic/eui');
return {
...actual,
useEuiTheme: jest.fn(),
};
});

jest.mock('../../../components/compliance_score_bar', () => ({
ComplianceScoreBar: jest.fn(() => null),
}));

jest.mock('../../../components/cloud_security_grouping');

describe('<ComplianceBarComponent />', () => {
beforeEach(() => {
(useEuiTheme as jest.Mock).mockReturnValue({ euiTheme: { size: { s: 's' } } });
(ComplianceScoreBar as jest.Mock).mockClear();
});

it('renders ComplianceScoreBar with correct totalFailed and totalPassed, when total = failed+passed', () => {
const bucket = {
doc_count: 10,
failedFindings: {
doc_count: 4,
},
passedFindings: {
doc_count: 6,
},
} as RawBucket<FindingsGroupingAggregation>;

render(<ComplianceBarComponent bucket={bucket} />);

expect(ComplianceScoreBar).toHaveBeenCalledWith(
expect.objectContaining({
totalFailed: 4,
totalPassed: 6,
}),
{}
);
});

it('renders ComplianceScoreBar with correct totalFailed and totalPassed, when there are unknown findings', () => {
const bucket = {
doc_count: 10,
failedFindings: {
doc_count: 3,
},
passedFindings: {
doc_count: 6,
},
} as RawBucket<FindingsGroupingAggregation>;

render(<ComplianceBarComponent bucket={bucket} />);

expect(ComplianceScoreBar).toHaveBeenCalledWith(
expect.objectContaining({
totalFailed: 3,
totalPassed: 6,
}),
{}
);
});

it('renders ComplianceScoreBar with correct totalFailed and totalPassed, when there are no findings', () => {
const bucket = {
doc_count: 10,
failedFindings: {
doc_count: 0,
},
passedFindings: {
doc_count: 0,
},
} as RawBucket<FindingsGroupingAggregation>;

render(<ComplianceBarComponent bucket={bucket} />);

expect(ComplianceScoreBar).toHaveBeenCalledWith(
expect.objectContaining({
totalFailed: 0,
totalPassed: 0,
}),
{}
);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -198,11 +198,15 @@ const FindingsCountComponent = ({ bucket }: { bucket: RawBucket<FindingsGrouping

const FindingsCount = React.memo(FindingsCountComponent);

const ComplianceBarComponent = ({ bucket }: { bucket: RawBucket<FindingsGroupingAggregation> }) => {
export const ComplianceBarComponent = ({
bucket,
}: {
bucket: RawBucket<FindingsGroupingAggregation>;
}) => {
const { euiTheme } = useEuiTheme();

const totalFailed = bucket.failedFindings?.doc_count || 0;
const totalPassed = bucket.doc_count - totalFailed;
const totalPassed = bucket.passedFindings?.doc_count || 0;
return (
<ComplianceScoreBar
size="l"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ export const GetNotesRequestQuery = z.object({
sortField: z.string().nullable().optional(),
sortOrder: z.string().nullable().optional(),
filter: z.string().nullable().optional(),
userFilter: z.string().nullable().optional(),
createdByFilter: z.string().nullable().optional(),
associatedFilter: AssociatedFilterType.optional(),
});
export type GetNotesRequestQueryInput = z.input<typeof GetNotesRequestQuery>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ paths:
type: string
nullable: true
- in: query
name: userFilter
name: createdByFilter
schema:
nullable: true
type: string
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ paths:
nullable: true
type: string
- in: query
name: userFilter
name: createdByFilter
schema:
nullable: true
type: string
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ paths:
nullable: true
type: string
- in: query
name: userFilter
name: createdByFilter
schema:
nullable: true
type: string
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,12 @@ import { EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiText, useEuiTheme, EuiTitle }
import { FormattedMessage } from '@kbn/i18n-react';
import { DistributionBar } from '@kbn/security-solution-distribution-bar';
import { useMisconfigurationPreview } from '@kbn/cloud-security-posture/src/hooks/use_misconfiguration_preview';
import { euiThemeVars } from '@kbn/ui-theme';
import { i18n } from '@kbn/i18n';
import { ExpandablePanel } from '@kbn/security-solution-common';
import { buildEntityFlyoutPreviewQuery } from '@kbn/cloud-security-posture-common';
import { useExpandableFlyoutApi } from '@kbn/expandable-flyout';
import { useVulnerabilitiesPreview } from '@kbn/cloud-security-posture/src/hooks/use_vulnerabilities_preview';
import { hasVulnerabilitiesData } from '@kbn/cloud-security-posture';
import { hasVulnerabilitiesData, statusColors } from '@kbn/cloud-security-posture';
import { METRIC_TYPE } from '@kbn/analytics';
import {
ENTITY_FLYOUT_WITH_MISCONFIGURATION_VISIT,
Expand Down Expand Up @@ -51,7 +50,7 @@ export const getFindingsStats = (passedFindingsStats: number, failedFindingsStat
}
),
count: passedFindingsStats,
color: euiThemeVars.euiColorSuccess,
color: statusColors.passed,
},
{
key: i18n.translate(
Expand All @@ -61,7 +60,7 @@ export const getFindingsStats = (passedFindingsStats: number, failedFindingsStat
}
),
count: failedFindingsStats,
color: euiThemeVars.euiColorVis9,
color: statusColors.failed,
},
];
};
Expand All @@ -70,14 +69,10 @@ const MisconfigurationPreviewScore = ({
passedFindings,
failedFindings,
euiTheme,
numberOfPassedFindings,
numberOfFailedFindings,
}: {
passedFindings: number;
failedFindings: number;
euiTheme: EuiThemeComputed<{}>;
numberOfPassedFindings?: number;
numberOfFailedFindings?: number;
}) => {
return (
<EuiFlexItem>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -550,7 +550,7 @@ export const mockGlobalState: State = {
direction: 'desc' as const,
},
filter: '',
userFilter: '',
createdByFilter: '',
associatedFilter: AssociatedFilter.all,
search: '',
selectedIds: [],
Expand Down
6 changes: 3 additions & 3 deletions x-pack/plugins/security_solution/public/notes/api/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export const fetchNotes = async ({
sortField,
sortOrder,
filter,
userFilter,
createdByFilter,
associatedFilter,
search,
}: {
Expand All @@ -52,7 +52,7 @@ export const fetchNotes = async ({
sortField: string;
sortOrder: string;
filter: string;
userFilter: string;
createdByFilter: string;
associatedFilter: AssociatedFilter;
search: string;
}) => {
Expand All @@ -63,7 +63,7 @@ export const fetchNotes = async ({
sortField,
sortOrder,
filter,
userFilter,
createdByFilter,
associatedFilter,
search,
},
Expand Down
Loading

0 comments on commit f3d4cfb

Please sign in to comment.