Skip to content

Commit bdc41aa

Browse files
test(okms): update impacted tests by the new key/value editor
ref: #MANAGER-18318 Signed-off-by: Mathieu Mousnier <[email protected]>
1 parent f413ab5 commit bdc41aa

File tree

4 files changed

+104
-52
lines changed

4 files changed

+104
-52
lines changed

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,26 @@ import userEvent, { UserEvent } from '@testing-library/user-event';
1414
import { assertBreadcrumbItems } from '@secret-manager/utils/tests/breadcrumb';
1515
import { createSecretErrorMessage } from '@secret-manager/mocks/secrets/secrets.handler';
1616
import { SECRET_MANAGER_ROUTES_URLS } from '@secret-manager/routes/routes.constants';
17+
import { SECRET_VALUE_TOGGLE_TEST_IDS } from '@secret-manager/components/secretValueToggle/secretValueToggle.constants';
1718
import { renderTestApp } from '@/utils/tests/renderTestApp';
1819
import { labels } from '@/utils/tests/init.i18n';
1920
import { catalogMock } from '@/mocks/catalog/catalog.mock';
2021

2122
/* TEST UTILS */
2223
const firstRegion = catalogMock.plans[0].configurations[0].values[0];
2324

25+
/**
26+
* Selects the first region
27+
*/
2428
const selectRegion = async (user: UserEvent) => {
2529
const firstRegionRadioCard = screen.getByTestId(firstRegion);
2630

2731
await act(() => user.click(firstRegionRadioCard));
2832
};
2933

34+
/**
35+
* Fills the required fields
36+
*/
3037
const fillRequiredFields = () => {
3138
const inputPath = screen.getByTestId(SECRET_FORM_TEST_IDS.INPUT_PATH);
3239
const inputData = screen.getByTestId(SECRET_FORM_FIELD_TEST_IDS.INPUT_DATA);
@@ -42,6 +49,16 @@ const fillRequiredFields = () => {
4249
});
4350
};
4451

52+
/**
53+
* Clicks on the JSON toggle
54+
*/
55+
const clickJsonEditorToggle = async (user: UserEvent) => {
56+
const jsonToggle = screen.getByTestId(
57+
SECRET_VALUE_TOGGLE_TEST_IDS.jsonToggle,
58+
);
59+
await act(() => user.click(jsonToggle));
60+
};
61+
4562
/* CREATE PAGE TEST SUITE */
4663
describe('Create secret page test suite', () => {
4764
it('should display the form sections', async () => {
@@ -66,6 +83,7 @@ describe('Create secret page test suite', () => {
6683
await assertTextVisibility(firstRegion);
6784

6885
await selectRegion(user);
86+
await clickJsonEditorToggle(user);
6987
fillRequiredFields();
7088

7189
const submitButton = screen.getByTestId(SECRET_FORM_TEST_IDS.SUBMIT_BUTTON);
@@ -97,6 +115,7 @@ describe('Create secret page test suite', () => {
97115
await assertTextVisibility(firstRegion);
98116

99117
await selectRegion(user);
118+
await clickJsonEditorToggle(user);
100119
fillRequiredFields();
101120

102121
const submitButton = screen.getByTestId(SECRET_FORM_TEST_IDS.SUBMIT_BUTTON);

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

Lines changed: 41 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ import { useSearchParams } from 'react-router-dom';
55
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
66
import { vi } from 'vitest';
77
import { assertTextVisibility } from '@ovh-ux/manager-core-test-utils';
8-
import { waitFor } from '@testing-library/dom';
98
import {
109
MOCK_DATA_VALID_JSON,
1110
MOCK_PATH_VALID,
1211
} from '@secret-manager/utils/tests/secret.constants';
1312
import { SECRET_FORM_TEST_IDS } from '@secret-manager/pages/createSecret/SecretForm.constants';
1413
import { SECRET_FORM_FIELD_TEST_IDS } from '@secret-manager/components/form/form.constants';
15-
import { render, screen } from '@testing-library/react';
14+
import { render, screen, waitFor, act } from '@testing-library/react';
15+
import { SECRET_VALUE_TOGGLE_TEST_IDS } from '@secret-manager/components/secretValueToggle/secretValueToggle.constants';
16+
import userEvent, { UserEvent } from '@testing-library/user-event';
1617
import { labels, initTestI18n } from '@/utils/tests/init.i18n';
1718
import { SecretForm } from './SecretForm.component';
1819
import { SECRET_DATA_TEMPLATE } from './SecretForm.constants';
@@ -32,38 +33,37 @@ vi.mock('react-router-dom', async (importOriginal) => {
3233

3334
// Mocking ODS Input component
3435
vi.mock('@ovhcloud/ods-components/react', async () => {
36+
const {
37+
odsInputMock,
38+
odsTextareaMock,
39+
odsSwitchMock,
40+
odsSwitchItemMock,
41+
} = await import('@/utils/tests/odsMocks');
3542
const original = await vi.importActual('@ovhcloud/ods-components/react');
3643
return {
3744
...original,
38-
OdsInput: vi.fn(
39-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
40-
({ className, onOdsChange, onOdsBlur, ...rest }) => (
41-
<input
42-
data-testid={rest['data-testid']}
43-
className={className}
44-
onChange={(e) => onOdsChange && onOdsChange(e.target.value)}
45-
onBlur={(e) => onOdsBlur && onOdsBlur(e.target.value)}
46-
{...rest}
47-
/>
48-
),
49-
),
50-
OdsTextarea: vi.fn(
51-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
52-
({ className, onOdsChange, onOdsBlur, isResizable, ...rest }) => (
53-
<textarea
54-
data-testid={rest['data-testid']}
55-
className={className}
56-
onChange={(e) => onOdsChange && onOdsChange(e.target.value)}
57-
onBlur={() => onOdsBlur && onOdsBlur()}
58-
{...rest}
59-
/>
60-
),
61-
),
45+
OdsInput: vi.fn(odsInputMock),
46+
OdsTextarea: vi.fn(odsTextareaMock),
47+
OdsSwitch: vi.fn(odsSwitchMock),
48+
OdsSwitchItem: vi.fn(odsSwitchItemMock),
6249
};
6350
});
6451

6552
vi.mocked(useSearchParams).mockReturnValue([new URLSearchParams(), vi.fn()]);
6653

54+
/**
55+
* Clicks on the JSON toggle
56+
*/
57+
const clickJsonEditorToggle = async (user: UserEvent) => {
58+
const jsonToggle = screen.getByTestId(
59+
SECRET_VALUE_TOGGLE_TEST_IDS.jsonToggle,
60+
);
61+
await act(() => user.click(jsonToggle));
62+
};
63+
64+
/**
65+
* Renders the secret form
66+
*/
6767
const renderSecretForm = async (okmsId?: string) => {
6868
const queryClient = new QueryClient();
6969
if (!i18nValue) {
@@ -111,22 +111,31 @@ describe('Secrets creation form test suite', () => {
111111
'should check the form validity for data: $data, path: $path and a selectedOkms: $selectedOkmsId ',
112112
async ({ data, path, selectedOkmsId, shouldButtonBeDisabled }) => {
113113
// GIVEN
114+
const user = userEvent.setup();
114115
await renderSecretForm(selectedOkmsId);
115116
await assertTextVisibility(
116117
labels.secretManager.create_secret_form_secret_section_title,
117118
);
118119

120+
// WHEN
121+
await clickJsonEditorToggle(user);
122+
119123
if (path) {
120124
await changeOdsInputValueByTestId(
121125
SECRET_FORM_TEST_IDS.INPUT_PATH,
122126
path,
123127
);
124128
}
125129
if (data) {
126-
await changeOdsInputValueByTestId(
130+
const input = await screen.findByTestId(
127131
SECRET_FORM_FIELD_TEST_IDS.INPUT_DATA,
128-
data,
129132
);
133+
134+
// clean first the input
135+
await act(() => user.clear(input));
136+
// then type the new value
137+
const escaped = data.replace(/{/g, '{{');
138+
await act(() => user.type(input, escaped));
130139
}
131140

132141
// THEN
@@ -145,7 +154,11 @@ describe('Secrets creation form test suite', () => {
145154

146155
it('should display the template in the data input', async () => {
147156
// GIVEN
157+
const user = userEvent.setup();
148158
await renderSecretForm(MOCK_OKMS_ID);
159+
160+
// WHEN
161+
await clickJsonEditorToggle(user);
149162
const inputData = screen.getByTestId(SECRET_FORM_FIELD_TEST_IDS.INPUT_DATA);
150163
expect(inputData).toBeInTheDocument();
151164

packages/manager/apps/okms/src/modules/secret-manager/pages/drawers/createVersionDrawer/CreateVersionDrawer.page.spec.tsx

Lines changed: 43 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
import React from 'react';
21
import { vi } from 'vitest';
32
import { SECRET_MANAGER_ROUTES_URLS } from '@secret-manager/routes/routes.constants';
43
import { mockSecret1 } from '@secret-manager/mocks/secrets/secrets.mock';
54
import { screen, act, waitFor } from '@testing-library/react';
6-
import userEvent from '@testing-library/user-event';
7-
import { MOCK_DATA_VALID_JSON } from '@secret-manager/utils/tests/secret.constants';
5+
import userEvent, { UserEvent } from '@testing-library/user-event';
86
import { SECRET_FORM_FIELD_TEST_IDS } from '@secret-manager/components/form/form.constants';
97
import {
108
assertTextVisibility,
@@ -13,10 +11,10 @@ import {
1311
} from '@ovh-ux/manager-core-test-utils';
1412
import * as secretVersionsApi from '@secret-manager/data/api/secretVersions';
1513
import { getSecretMockWithData } from '@secret-manager/mocks/secrets/secretsMock.utils';
14+
import { SECRET_VALUE_TOGGLE_TEST_IDS } from '@secret-manager/components/secretValueToggle/secretValueToggle.constants';
1615
import { okmsRoubaix1Mock } from '@/mocks/kms/okms.mock';
1716
import { renderTestApp } from '@/utils/tests/renderTestApp';
1817
import { labels } from '@/utils/tests/init.i18n';
19-
import { changeOdsInputValueByTestId } from '@/utils/tests/uiTestHelpers';
2018
import { CREATE_VERSION_DRAWER_TEST_IDS } from './CreateVersionDrawer.constants';
2119

2220
const mockOkmsId = okmsRoubaix1Mock.id;
@@ -26,26 +24,27 @@ const mockPageUrl = SECRET_MANAGER_ROUTES_URLS.versionListCreateVersionDrawer(
2624
mockedSecret.path,
2725
);
2826

29-
// Mocking ODS Input component
27+
// Mocking ODS components
3028
vi.mock('@ovhcloud/ods-components/react', async () => {
29+
const {
30+
odsInputMock,
31+
odsTextareaMock,
32+
odsSwitchMock,
33+
odsSwitchItemMock,
34+
} = await import('@/utils/tests/odsMocks');
3135
const original = await vi.importActual('@ovhcloud/ods-components/react');
3236
return {
3337
...original,
34-
OdsTextarea: vi.fn(
35-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
36-
({ className, onOdsChange, onOdsBlur, isResizable, ...rest }) => (
37-
<textarea
38-
data-testid={rest['data-testid']}
39-
className={className}
40-
onChange={(e) => onOdsChange && onOdsChange(e.target.value)}
41-
onBlur={() => onOdsBlur && onOdsBlur()}
42-
{...rest}
43-
/>
44-
),
45-
),
38+
OdsInput: vi.fn(odsInputMock),
39+
OdsTextarea: vi.fn(odsTextareaMock),
40+
OdsSwitch: vi.fn(odsSwitchMock),
41+
OdsSwitchItem: vi.fn(odsSwitchItemMock),
4642
};
4743
});
4844

45+
/**
46+
* Renders the create version drawer page
47+
*/
4948
const renderPage = async ({ url = mockPageUrl }: { url?: string } = {}) => {
5049
const user = userEvent.setup();
5150
const { container } = await renderTestApp(url);
@@ -61,11 +60,21 @@ const renderPage = async ({ url = mockPageUrl }: { url?: string } = {}) => {
6160

6261
// wait for the content to be displayed
6362
await assertTextVisibility(labels.secretManager.add_new_version);
64-
await assertTextVisibility(labels.secretManager.editor);
63+
await assertTextVisibility(labels.secretManager.key_value);
6564

6665
return { user, container };
6766
};
6867

68+
/**
69+
* Clicks on the JSON toggle
70+
*/
71+
const clickJsonToggle = async (user: UserEvent) => {
72+
const jsonToggle = screen.getByTestId(
73+
SECRET_VALUE_TOGGLE_TEST_IDS.jsonToggle,
74+
);
75+
await act(() => user.click(jsonToggle));
76+
};
77+
6978
describe('Secret create version drawer page test suite', () => {
7079
it('should display the create version drawer', async () => {
7180
const { container } = await renderPage();
@@ -79,11 +88,13 @@ describe('Secret create version drawer page test suite', () => {
7988
});
8089

8190
it('should display the current secret value', async () => {
82-
await renderPage();
91+
const { user } = await renderPage();
8392

84-
const dataInput = screen.getByTestId(SECRET_FORM_FIELD_TEST_IDS.INPUT_DATA);
93+
// Click on the JSON toggle to switch to the JSON editor
94+
await clickJsonToggle(user);
8595

8696
// Check if the data input contains the secret value
97+
const dataInput = screen.getByTestId(SECRET_FORM_FIELD_TEST_IDS.INPUT_DATA);
8798
expect(dataInput).toBeInTheDocument();
8899
expect(dataInput).toHaveValue(
89100
JSON.stringify(getSecretMockWithData(mockedSecret).version.data),
@@ -96,12 +107,21 @@ describe('Secret create version drawer page test suite', () => {
96107
getSecretMockWithData(mockedSecret).version,
97108
);
98109

110+
// Click on the JSON toggle to switch to the JSON editor
111+
await clickJsonToggle(user);
112+
113+
const MOCK_NEW_DATA = '{"key1":"value1","key2":"value2"}';
99114
// Change the data input value
100-
await changeOdsInputValueByTestId(
115+
const input = await screen.findByTestId(
101116
SECRET_FORM_FIELD_TEST_IDS.INPUT_DATA,
102-
MOCK_DATA_VALID_JSON,
103117
);
104118

119+
// clean first the input
120+
await act(() => user.clear(input));
121+
// then type the new value
122+
const escaped = MOCK_NEW_DATA.replace(/{/g, '{{');
123+
await act(() => user.type(input, escaped));
124+
105125
// Submit the form
106126
// Button should be enabled after input change
107127
const submitButton = await getOdsButtonByLabel({
@@ -117,7 +137,7 @@ describe('Secret create version drawer page test suite', () => {
117137
expect(secretVersionsApi.createSecretVersion).toHaveBeenCalledWith({
118138
okmsId: mockOkmsId,
119139
path: mockedSecret.path,
120-
data: JSON.parse(MOCK_DATA_VALID_JSON),
140+
data: JSON.parse(MOCK_NEW_DATA),
121141
cas: mockedSecret.metadata.currentVersion,
122142
});
123143
});

packages/manager/apps/okms/src/modules/secret-manager/pages/secret/Secret.page.spec.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ describe('Secret page test suite', () => {
155155
},
156156
{
157157
actionLabel: labels.secretManager.add_new_version,
158-
assertion: () => assertTextVisibility(labels.secretManager.editor),
158+
assertion: () => assertTextVisibility(labels.secretManager.key_value),
159159
},
160160
{
161161
actionLabel: labels.secretManager.delete_secret,

0 commit comments

Comments
 (0)