From a9f579f1d96dacfc187a71e2878525056f62a21f Mon Sep 17 00:00:00 2001 From: Thomas Heartman Date: Wed, 5 Jun 2024 11:58:33 +0200 Subject: [PATCH] chore: add name validation tests in RTL style --- .../CreateFeature/CreateFeature.test.tsx | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 frontend/src/component/feature/CreateFeature/CreateFeature.test.tsx diff --git a/frontend/src/component/feature/CreateFeature/CreateFeature.test.tsx b/frontend/src/component/feature/CreateFeature/CreateFeature.test.tsx new file mode 100644 index 0000000000..34b4cb0478 --- /dev/null +++ b/frontend/src/component/feature/CreateFeature/CreateFeature.test.tsx @@ -0,0 +1,100 @@ +import { Route, Routes } from 'react-router-dom'; +import { testServerRoute, testServerSetup } from 'utils/testServer'; +import { screen, fireEvent } from '@testing-library/react'; +import { render } from 'utils/testRenderer'; +import CreateFeature from './CreateFeature'; +import userEvent from '@testing-library/user-event'; + +const server = testServerSetup(); + +describe('flag name validation', () => { + test('it gives an error if a flag name is not URL-friendly', async () => { + const user = userEvent.setup(); + const unfriendlyName = 'unfriendlyName####$#//'; + const error = { + id: 'de15e702-e7c7-4083-9f31-384dea4da2e9', + name: 'BadDataError', + message: + 'Request validation failed: your request body or params contain invalid data. Refer to the `details` list for more information.', + details: [ + { + message: `"name" must be URL friendly. You provided "${unfriendlyName}".`, + }, + ], + }; + testServerRoute( + server, + '/api/admin/features/validate', + error, + 'post', + 400, + ); + render( + + } + /> + , + { + route: '/projects/default/create-toggle', + }, + ); + + const nameInput = await screen.findByLabelText(/name/i); + fireEvent.change(nameInput, { + target: { value: unfriendlyName }, + }); + + user.tab(); + + expect( + await screen.findByTestId('INPUT_ERROR_TEXT'), + ).toBeInTheDocument(); + }); + + test('it gives an error if a flag with that name already exists', async () => { + const user = userEvent.setup(); + const error = { + id: '07716b38-076c-4ab0-94c9-1a73663fec94', + name: 'NameExistsError', + message: 'A flag with that name already exists', + details: [ + { + message: 'A flag with that name already exists', + }, + ], + }; + + testServerRoute( + server, + '/api/admin/features/validate', + error, + 'post', + 400, + ); + + render( + + } + /> + , + { + route: '/projects/default/create-toggle', + }, + ); + + const nameInput = await screen.findByLabelText(/name/i); + fireEvent.change(nameInput, { + target: { value: 'preExistingFlag' }, + }); + + user.tab(); + + expect( + await screen.findByTestId('INPUT_ERROR_TEXT'), + ).toBeInTheDocument(); + }); +});