Skip to content

Commit a65ddbf

Browse files
subdavissonartech
authored andcommitted
SCA-1216 Risk Reports on Project Overview Page (#3952)
GitOrigin-RevId: 549e0b1d70c2fe23fdb9b24db2be99f4d8497d6c
1 parent c4f12bf commit a65ddbf

File tree

5 files changed

+65
-30
lines changed

5 files changed

+65
-30
lines changed

libs/sq-server-commons/src/components/controls/ComponentReportActions.tsx renamed to apps/sq-server/src/main/js/app/components/controls/ComponentReportActions.tsx

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,19 @@
1919
*/
2020

2121
import { ComponentQualifier } from '~shared/types/component';
22-
import withAppStateContext from '../../context/app-state/withAppStateContext';
23-
import withCurrentUserContext from '../../context/current-user/withCurrentUserContext';
22+
import withAppStateContext from '~sq-server-commons/context/app-state/withAppStateContext';
23+
import { useAvailableFeatures } from '~sq-server-commons/context/available-features/withAvailableFeatures';
24+
import withCurrentUserContext from '~sq-server-commons/context/current-user/withCurrentUserContext';
2425
import {
2526
useGetReportStatusQuery,
2627
useSubscribeToEmailReportMutation,
2728
useUnsubscribeFromEmailReportMutation,
28-
} from '../../queries/subscriptions';
29-
import { AppState } from '../../types/appstate';
30-
import { Branch } from '../../types/branch-like';
31-
import { Component } from '../../types/types';
32-
import { CurrentUser, isLoggedIn } from '../../types/users';
29+
} from '~sq-server-commons/queries/subscriptions';
30+
import { AppState } from '~sq-server-commons/types/appstate';
31+
import { Branch } from '~sq-server-commons/types/branch-like';
32+
import { Feature } from '~sq-server-commons/types/features';
33+
import { Component } from '~sq-server-commons/types/types';
34+
import { CurrentUser, isLoggedIn } from '~sq-server-commons/types/users';
3335
import ComponentReportActionsRenderer from './ComponentReportActionsRenderer';
3436

3537
interface Props {
@@ -41,6 +43,7 @@ interface Props {
4143

4244
export function ComponentReportActions(props: Readonly<Props>) {
4345
const { appState, branch, component, currentUser } = props;
46+
const scaEnabled = useAvailableFeatures().hasFeature(Feature.Sca);
4447
const { data: status, isLoading } = useGetReportStatusQuery(
4548
{
4649
componentKey: component.key,
@@ -81,6 +84,7 @@ export function ComponentReportActions(props: Readonly<Props>) {
8184
frequency={status.componentFrequency || status.globalFrequency}
8285
handleSubscription={handleSubscribe}
8386
handleUnsubscription={handleUnsubscribe}
87+
scaEnabled={scaEnabled}
8488
subscribed={status.subscribed}
8589
/>
8690
);

libs/sq-server-commons/src/components/controls/ComponentReportActionsRenderer.tsx renamed to apps/sq-server/src/main/js/app/components/controls/ComponentReportActionsRenderer.tsx

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,14 @@ import {
3030
} from '@sonarsource/echoes-react';
3131
import { useIntl } from 'react-intl';
3232
import { isApplication } from '~shared/helpers/component';
33-
import { getReportUrl } from '../../api/component-report';
34-
import { getRegulatoryReportUrl } from '../../api/regulatory-report';
35-
import { DocLink } from '../../helpers/doc-links';
36-
import { translate, translateWithParameters } from '../../helpers/l10n';
37-
import { Branch } from '../../types/branch-like';
38-
import { Component } from '../../types/types';
39-
import DocumentationLink from '../common/DocumentationLink';
33+
import { addons } from '~sq-server-addons/index';
34+
import { getReportUrl } from '~sq-server-commons/api/component-report';
35+
import { getRegulatoryReportUrl } from '~sq-server-commons/api/regulatory-report';
36+
import DocumentationLink from '~sq-server-commons/components/common/DocumentationLink';
37+
import { DocLink } from '~sq-server-commons/helpers/doc-links';
38+
import { translate, translateWithParameters } from '~sq-server-commons/helpers/l10n';
39+
import { Branch } from '~sq-server-commons/types/branch-like';
40+
import { Component } from '~sq-server-commons/types/types';
4041

4142
export interface ComponentReportActionsRendererProps {
4243
branch?: Branch;
@@ -46,6 +47,7 @@ export interface ComponentReportActionsRendererProps {
4647
frequency: string;
4748
handleSubscription: () => void;
4849
handleUnsubscription: () => void;
50+
scaEnabled: boolean;
4951
subscribed: boolean;
5052
}
5153

@@ -65,6 +67,7 @@ export default function ComponentReportActionsRenderer(
6567
props: Readonly<ComponentReportActionsRendererProps>,
6668
) {
6769
const {
70+
scaEnabled,
6871
branch,
6972
component,
7073
frequency,
@@ -132,6 +135,17 @@ export default function ComponentReportActionsRenderer(
132135
})}
133136
</DropdownMenu.ItemButton>
134137

138+
{scaEnabled && addons.sca && (
139+
<>
140+
<DropdownMenu.Separator />
141+
<addons.sca.ScaReportOverviewOptions
142+
branch={branch?.name}
143+
component={component.key}
144+
componentName={component.name}
145+
/>
146+
</>
147+
)}
148+
135149
{!isApplication(component.qualifier) && (
136150
<>
137151
<DropdownMenu.Separator />

libs/sq-server-commons/src/components/controls/__tests__/ComponentReportActions-test.tsx renamed to apps/sq-server/src/main/js/app/components/controls/__tests__/ComponentReportActions-test.tsx

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,33 +25,39 @@ import {
2525
getReportStatus,
2626
subscribeToEmailReport,
2727
unsubscribeFromEmailReport,
28-
} from '../../../api/component-report';
29-
import { addGlobalSuccessMessage } from '../../../design-system';
30-
import { mockBranch } from '../../../helpers/mocks/branch-like';
31-
import { mockComponent } from '../../../helpers/mocks/component';
32-
import { mockComponentReportStatus } from '../../../helpers/mocks/component-report';
33-
import { mockAppState, mockCurrentUser, mockLoggedInUser } from '../../../helpers/testMocks';
34-
import { renderApp } from '../../../helpers/testReactTestingUtils';
28+
} from '~sq-server-commons/api/component-report';
29+
import { addGlobalSuccessMessage } from '~sq-server-commons/design-system';
30+
import { mockBranch } from '~sq-server-commons/helpers/mocks/branch-like';
31+
import { mockComponent } from '~sq-server-commons/helpers/mocks/component';
32+
import { mockComponentReportStatus } from '~sq-server-commons/helpers/mocks/component-report';
33+
import {
34+
mockAppState,
35+
mockCurrentUser,
36+
mockLoggedInUser,
37+
} from '~sq-server-commons/helpers/testMocks';
38+
import { renderApp } from '~sq-server-commons/helpers/testReactTestingUtils';
3539
import { ComponentReportActions } from '../ComponentReportActions';
3640

37-
jest.mock('../../../design-system', () => ({
38-
...jest.requireActual('../../../design-system'),
41+
jest.mock('~sq-server-commons/design-system', () => ({
42+
...jest.requireActual('~sq-server-commons/design-system'),
3943
addGlobalSuccessMessage: jest.fn(),
4044
}));
4145

42-
jest.mock('../../../api/component-report', () => ({
43-
...jest.requireActual('../../../api/component-report'),
46+
jest.mock('~sq-server-commons/api/component-report', () => ({
47+
...jest.requireActual('~sq-server-commons/api/component-report'),
4448
getReportStatus: jest
4549
.fn()
4650
.mockResolvedValue(
47-
jest.requireActual('../../../helpers/mocks/component-report').mockComponentReportStatus(),
51+
jest
52+
.requireActual('~sq-server-commons/helpers/mocks/component-report')
53+
.mockComponentReportStatus(),
4854
),
4955
subscribeToEmailReport: jest.fn().mockResolvedValue(undefined),
5056
unsubscribeFromEmailReport: jest.fn().mockResolvedValue(undefined),
5157
}));
5258

53-
jest.mock('../../../helpers/system', () => ({
54-
...jest.requireActual('../../../helpers/system'),
59+
jest.mock('~sq-server-commons/helpers/system', () => ({
60+
...jest.requireActual('~sq-server-commons/helpers/system'),
5561
getBaseUrl: jest.fn().mockReturnValue('baseUrl'),
5662
}));
5763

apps/sq-server/src/main/js/apps/overview/branches/BranchMetaTopBar.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import { Badge, SeparatorCircleIcon } from '~design-system';
2424
import { ComponentQualifier } from '~shared/types/component';
2525
import { MeasureEnhanced } from '~shared/types/measures';
2626
import { MetricKey, MetricType } from '~shared/types/metrics';
27-
import ComponentReportActions from '~sq-server-commons/components/controls/ComponentReportActions';
2827
import HomePageSelect from '~sq-server-commons/components/controls/HomePageSelect';
2928
import Tooltip from '~sq-server-commons/components/controls/Tooltip';
3029
import { useAvailableFeatures } from '~sq-server-commons/context/available-features/withAvailableFeatures';
@@ -36,6 +35,7 @@ import { Branch } from '~sq-server-commons/types/branch-like';
3635
import { Feature } from '~sq-server-commons/types/features';
3736
import { Component } from '~sq-server-commons/types/types';
3837
import { HomePage } from '~sq-server-commons/types/users';
38+
import ComponentReportActions from '../../../app/components/controls/ComponentReportActions';
3939
import { getCurrentPage } from '../../../app/components/nav/component/utils';
4040

4141
interface Props {

libs/sq-server-commons/src/l10n/default.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ export const defaultMessages = {
9595
created_on: 'Created on',
9696
criteria: 'Criteria',
9797
critical: 'Critical',
98+
csv: 'CSV',
9899
current: 'current',
99100
current_noun: 'Current',
100101
customize: 'Customize',
@@ -151,6 +152,7 @@ export const defaultMessages = {
151152
inheritance: 'Inheritance',
152153
internal: 'internal',
153154
inventory: 'Inventory',
155+
json: 'JSON',
154156
key: 'Key',
155157
later: 'Later',
156158
language: 'Language',
@@ -1610,7 +1612,6 @@ export const defaultMessages = {
16101612
'dependencies.list.export_as_sbom.type.spdx_23': 'SPDX v2.3',
16111613
'dependencies.list.export_as_sbom.type.spdx_30': 'SPDX v3.0',
16121614
'dependencies.list.export_as_sbom.format.xml': 'XML',
1613-
'dependencies.list.export_as_sbom.format.json': 'JSON',
16141615
'dependencies.risk.header.risk_severity': 'Severity of impact',
16151616
'dependencies.risk.header.risk_severity.intro': 'How is the severity impact calculated?',
16161617
'dependencies.risk.header.first_detected': 'First detected',
@@ -1991,6 +1992,16 @@ export const defaultMessages = {
19911992
'sca.quality_gates.metric.sca_count_licensing': 'Prohibited license dependency risks',
19921993
'sca.quality_gates.metric.sca_severity_licensing.description':
19931994
"All prohibited license risks are classified as high severity by Sonar. Therefore, this condition will cause the quality gate to fail if any of a project's dependencies use a license that is prohibited by the project's License Profile.",
1995+
1996+
//------------------------------------------------------------------------------
1997+
//
1998+
// SCA REPORT PAGE
1999+
//
2000+
//------------------------------------------------------------------------------
2001+
'sca.sbom.report': 'Software Bill of Materials (SBOM)',
2002+
'sca.risk.report': 'Advanced Security Dependency Risks Report',
2003+
'sca.risk.report.name': 'Dependency Risks Report',
2004+
19942005
//------------------------------------------------------------------------------
19952006
//
19962007
// ARCHITECTURE PAGE

0 commit comments

Comments
 (0)