Skip to content

Commit 0c87aee

Browse files
mathieumousnierRomain Jamet
authored andcommitted
refactor(omks): use new region picker on secret creation
ref: #MANAGER-18827 Signed-off-by: Mathieu Mousnier <[email protected]>
1 parent 7d1d56e commit 0c87aee

File tree

7 files changed

+56
-89
lines changed

7 files changed

+56
-89
lines changed

packages/manager/apps/okms/src/common/components/regionPicker/RegionPicker.component.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { RadioCard } from '../RadioCard/RadioCard.component';
66
import { RegionTypeBadge } from '@/components/regionTypeBadge/RegionTypeBadge.component';
77
import { useOrderCatalogOkms } from '@/data/hooks/useOrderCatalogOkms';
88
import { useNotificationAddErrorOnce } from '@/hooks/useNotificationAddErrorOnce';
9+
import { REGION_PICKER_TEST_IDS } from './regionPicker.constants';
910

1011
type RegionPickerProps = {
1112
selectedRegion: string;
@@ -40,7 +41,7 @@ export const RegionPicker = ({
4041
if (isPending) {
4142
return (
4243
<div>
43-
<OdsSpinner size="md" />
44+
<OdsSpinner size="md" data-testid={REGION_PICKER_TEST_IDS.SPINNER} />
4445
</div>
4546
);
4647
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export const REGION_PICKER_TEST_IDS = {
2+
SPINNER: 'region-picker-spinner',
3+
};

packages/manager/apps/okms/src/modules/secret-manager/pages/createSecret/CreateSecret.page.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import React, { useState } from 'react';
22
import { Outlet } from 'react-router-dom';
3-
import { BaseLayout, Notifications } from '@ovh-ux/manager-react-components';
3+
import {
4+
BaseLayout,
5+
Notifications,
6+
useNotifications,
7+
} from '@ovh-ux/manager-react-components';
48
import { useTranslation } from 'react-i18next';
59
import { OdsBreadcrumb } from '@ovhcloud/ods-components/react';
610
import { RootBreadcrumbItem } from '@secret-manager/components/breadcrumb';
@@ -11,6 +15,7 @@ import { OrderOkmsModalProvider } from '@/common/pages/OrderOkmsModal/OrderOkmsM
1115

1216
export default function SecretCreatePage() {
1317
const { t } = useTranslation('secret-manager');
18+
const { notifications } = useNotifications();
1419

1520
const [selectedOkmsId, setSelectedOkmsId] = useState<string | undefined>();
1621

@@ -26,9 +31,9 @@ export default function SecretCreatePage() {
2631
<RootBreadcrumbItem />
2732
</OdsBreadcrumb>
2833
}
29-
message={<Notifications />}
34+
message={notifications.length > 0 ? <Notifications /> : null}
3035
>
31-
<div className="flex flex-col gap-8 max-w-screen-xxl">
36+
<div className="flex flex-col gap-8 max-w-2xl">
3237
<OkmsManagement
3338
selectedOkmsId={selectedOkmsId}
3439
setSelectedOkmsId={setSelectedOkmsId}

packages/manager/apps/okms/src/modules/secret-manager/pages/createSecret/OkmsManagement.component.spec.tsx

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { assertTextVisibility } from '@ovh-ux/manager-core-test-utils';
2323
import { waitFor } from '@testing-library/dom';
2424
import { act, render, screen } from '@testing-library/react';
2525
import { SECRET_ACTIVATE_OKMS_TEST_IDS } from '@secret-manager/pages/createSecret/ActivateRegion.contants';
26+
import { locationsMock } from '@secret-manager/mocks/locations/locations.mock';
2627
import { labels, initTestI18n } from '@/utils/tests/init.i18n';
2728
import { OkmsManagement } from './OkmsManagement.component';
2829
import { catalogMock } from '@/mocks/catalog/catalog.mock';
@@ -35,15 +36,26 @@ import {
3536
import { useOkmsList } from '@/data/hooks/useOkms';
3637
import { OKMS } from '@/types/okms.type';
3738
import { getOrderCatalogOKMS } from '@/data/api/orderCatalogOKMS';
39+
import * as locationApi from '@/common/data/api/location';
3840
import { ErrorResponse } from '@/types/api.type';
3941
import { OrderOkmsModalProvider } from '@/common/pages/OrderOkmsModal/OrderOkmsModalContext';
42+
import { REGION_PICKER_TEST_IDS } from '@/common/components/regionPicker/regionPicker.constants';
43+
import { createErrorResponseMock } from '@/utils/tests/testUtils';
44+
import { useNotificationAddErrorOnce } from '@/hooks/useNotificationAddErrorOnce';
4045

4146
let i18nValue: i18n;
4247

48+
const mockedGetOrderCatalogOKMS = vi.mocked(getOrderCatalogOKMS);
4349
vi.mock('@/data/api/orderCatalogOKMS', () => ({
4450
getOrderCatalogOKMS: vi.fn(),
4551
}));
4652

53+
vi.spyOn(locationApi, 'getLocations').mockResolvedValue(locationsMock);
54+
55+
vi.mock('@/hooks/useNotificationAddErrorOnce', () => ({
56+
useNotificationAddErrorOnce: vi.fn(),
57+
}));
58+
4759
vi.mock('react-router-dom', async (importOriginal) => {
4860
const module: typeof import('react-router-dom') = await importOriginal();
4961
return {
@@ -213,37 +225,32 @@ const selectRegion = async (user: UserEvent, region: string) => {
213225
describe('OKMS management test suite', () => {
214226
it('should display a spinner when loading', async () => {
215227
// GIVEN
216-
vi.mocked(getOrderCatalogOKMS).mockResolvedValueOnce(catalogMock);
228+
mockedGetOrderCatalogOKMS.mockResolvedValueOnce(catalogMock);
217229
// WHEN
218230
await renderOkmsManagement();
219231

220232
// THEN
221-
const regionsSpinner = screen.getByTestId('regionsSpinner');
233+
const regionsSpinner = screen.getByTestId(REGION_PICKER_TEST_IDS.SPINNER);
222234
expect(regionsSpinner).toBeVisible();
223235
});
224236

225237
it('should display a notification message when error on catalog api', async () => {
226238
// GIVEN
227-
const mockError: ErrorResponse = {
228-
response: { data: { message: 'errorCatalog' }, status: 500 },
229-
};
230-
vi.mocked(getOrderCatalogOKMS).mockRejectedValue(mockError);
239+
const mockError = createErrorResponseMock('errorCatalog');
240+
mockedGetOrderCatalogOKMS.mockRejectedValue(mockError);
231241

232242
// WHEN
233243
await renderOkmsManagement();
234244

235245
// THEN
236-
await assertTextVisibility(
237-
labels.common.error.error_message.replace(
238-
'{{message}}',
239-
mockError.response.data.message,
240-
),
241-
);
246+
await waitFor(() => {
247+
expect(useNotificationAddErrorOnce).toHaveBeenCalledWith(mockError);
248+
});
242249
});
243250

244251
it('should display the available region list', async () => {
245252
// GIVEN
246-
vi.mocked(getOrderCatalogOKMS).mockResolvedValueOnce(catalogMock);
253+
mockedGetOrderCatalogOKMS.mockResolvedValueOnce(catalogMock);
247254
// WHEN
248255
await renderOkmsManagement();
249256
await assertTextVisibility(
@@ -262,7 +269,7 @@ describe('OKMS management test suite', () => {
262269
it('should display a CTA', async () => {
263270
const user = userEvent.setup();
264271
// GIVEN
265-
vi.mocked(getOrderCatalogOKMS).mockResolvedValueOnce(catalogMock);
272+
mockedGetOrderCatalogOKMS.mockResolvedValueOnce(catalogMock);
266273

267274
await renderOkmsManagement();
268275
await assertTextVisibility(
@@ -284,7 +291,7 @@ describe('OKMS management test suite', () => {
284291
it('should display a loading state when an order is processing', async () => {
285292
const user = userEvent.setup();
286293
// GIVEN
287-
vi.mocked(getOrderCatalogOKMS).mockResolvedValueOnce(catalogMock);
294+
mockedGetOrderCatalogOKMS.mockResolvedValueOnce(catalogMock);
288295

289296
await renderOkmsManagement('rbx');
290297
await assertTextVisibility(
@@ -305,7 +312,7 @@ describe('OKMS management test suite', () => {
305312
it('should not display anything when there is exactly one okms', async () => {
306313
const user = userEvent.setup();
307314
// GIVEN
308-
vi.mocked(getOrderCatalogOKMS).mockResolvedValueOnce(catalogMock);
315+
mockedGetOrderCatalogOKMS.mockResolvedValueOnce(catalogMock);
309316

310317
await renderOkmsManagement();
311318
await assertTextVisibility(
@@ -329,7 +336,7 @@ describe('OKMS management test suite', () => {
329336
const user = userEvent.setup();
330337

331338
// GIVEN
332-
vi.mocked(getOrderCatalogOKMS).mockResolvedValueOnce(catalogMock);
339+
mockedGetOrderCatalogOKMS.mockResolvedValueOnce(catalogMock);
333340

334341
await renderOkmsManagement();
335342
await assertTextVisibility(
@@ -360,7 +367,7 @@ describe('OKMS management test suite', () => {
360367

361368
describe('When there is a okmsId search param', () => {
362369
beforeEach(() => {
363-
vi.mocked(getOrderCatalogOKMS).mockResolvedValueOnce(catalogMock);
370+
mockedGetOrderCatalogOKMS.mockResolvedValueOnce(catalogMock);
364371
});
365372
it('should pre-select the right region and okms', async () => {
366373
// GIVEN

packages/manager/apps/okms/src/modules/secret-manager/pages/createSecret/OkmsManagement.component.tsx

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ import {
1111
OdsText,
1212
} from '@ovhcloud/ods-components/react';
1313
import { useOkmsList } from '@/data/hooks/useOkms';
14-
import { useOrderCatalogOkms } from '@/data/hooks/useOrderCatalogOkms';
1514
import { OkmsSelector } from './OkmsSelector.component';
16-
import { RegionSelector } from './RegionSelector.component';
15+
import { RegionPicker } from '@/common/components/regionPicker/RegionPicker.component';
1716
import { useOrderOkmsModalContext } from '@/common/pages/OrderOkmsModal/OrderOkmsModalContext';
1817

1918
const OKMS_LIST_REFETCH_INTERVAL_DISABLE = 0;
@@ -30,13 +29,6 @@ export const OkmsManagement = ({
3029
}: OkmsManagementProps) => {
3130
const { t } = useTranslation(['secret-manager', NAMESPACES.ERROR]);
3231
const { addSuccess } = useNotifications();
33-
const {
34-
data: orderCatalogOKMS,
35-
error: orderCatalogError,
36-
isLoading: isLoadingOrderCatalog,
37-
} = useOrderCatalogOkms();
38-
39-
const regions = orderCatalogOKMS?.plans[0]?.configurations[0]?.values;
4032

4133
const [selectedRegion, setSelectedRegion] = useState<string | undefined>();
4234

@@ -122,34 +114,31 @@ export const OkmsManagement = ({
122114
setSelectedOkmsId(regionOkmsList[0].id);
123115
};
124116

125-
if (orderCatalogError || okmsError) {
126-
const message = orderCatalogError
127-
? orderCatalogError.response?.data?.message
128-
: okmsError.response?.data?.message;
129-
117+
if (okmsError) {
130118
return (
131119
<OdsMessage color="danger">
132120
{t(`${NAMESPACES.ERROR}:error_message`, {
133-
message,
121+
message: okmsError.response?.data?.message,
134122
})}
135123
</OdsMessage>
136124
);
137125
}
138126

139-
if (isLoadingOrderCatalog || isOkmsListLoading) {
127+
if (isOkmsListLoading) {
140128
return <OdsSpinner data-testid="regionsSpinner" />;
141129
}
142130

143131
return (
144-
<div className="flex flex-col gap-5">
145-
<OdsText preset="heading-2">
146-
{t('create_secret_form_region_section_title')}
147-
</OdsText>
148-
<RegionSelector
149-
regions={regions}
150-
selectedRegion={selectedRegion}
151-
setSelectedRegion={handleRegionSelection}
152-
/>
132+
<div className="space-y-10">
133+
<div className="space-y-5">
134+
<OdsText preset="heading-2">
135+
{t('create_secret_form_region_section_title')}
136+
</OdsText>
137+
<RegionPicker
138+
selectedRegion={selectedRegion}
139+
setSelectedRegion={handleRegionSelection}
140+
/>
141+
</div>
153142
<OkmsSelector
154143
okmsList={filterOkmsListByRegion(okmsList, selectedRegion)}
155144
selectedRegion={selectedRegion}

packages/manager/apps/okms/src/modules/secret-manager/pages/createSecret/OkmsSelector.component.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ export const OkmsSelector = ({
4242
}: OkmsSelectorProps) => {
4343
const { t } = useTranslation('secret-manager');
4444

45-
if (!selectedRegion || okmsList.length === 1) return null;
45+
if (!selectedRegion || okmsList.length === 1) {
46+
return null;
47+
}
4648

4749
if (okmsList.length === 0) {
4850
return (
@@ -58,7 +60,7 @@ export const OkmsSelector = ({
5860
<OdsText preset="heading-4">
5961
{t('create_secret_form_okms_selector_title')}
6062
</OdsText>
61-
<div className="grid sm:grid-cols-2 md:grid-cols-3 gap-3">
63+
<div className="space-y-3">
6264
{okmsList.map((okms) => (
6365
<RadioCard
6466
id={okms.id}

packages/manager/apps/okms/src/modules/secret-manager/pages/createSecret/RegionSelector.component.tsx

Lines changed: 0 additions & 40 deletions
This file was deleted.

0 commit comments

Comments
 (0)