diff --git a/src/Components/CreateImageWizard/validators.ts b/src/Components/CreateImageWizard/validators.ts index c2525d79..8a581f7c 100644 --- a/src/Components/CreateImageWizard/validators.ts +++ b/src/Components/CreateImageWizard/validators.ts @@ -92,14 +92,14 @@ export const isNtpServerValid = (ntpServer: string) => { }; export const isHostnameValid = (hostname: string) => { - switch (true) { - case hostname.length > 63: - return false; - case hostname !== '': - return /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$/.test( - hostname - ); - default: - return true; + if (!hostname) { + return true; } + + return ( + hostname.length < 65 && + /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$/.test( + hostname + ) + ); }; diff --git a/src/test/Components/CreateImageWizard/steps/Hostname/Hostname.test.tsx b/src/test/Components/CreateImageWizard/steps/Hostname/Hostname.test.tsx index 0e6c6e07..906e1741 100644 --- a/src/test/Components/CreateImageWizard/steps/Hostname/Hostname.test.tsx +++ b/src/test/Components/CreateImageWizard/steps/Hostname/Hostname.test.tsx @@ -44,7 +44,7 @@ const goToReviewStep = async () => { }; const enterHostname = async (hostname: string) => { - const user = userEvent.setup(); + const user = userEvent.setup({ delay: null }); const hostnameInput = await screen.findByPlaceholderText(/Add a hostname/i); await waitFor(() => user.type(hostnameInput, hostname)); }; @@ -113,6 +113,21 @@ describe('Step Hostname', () => { expect(screen.queryByText(/Invalid hostname/)).not.toBeInTheDocument(); }); + test('hostname is invalid for more than 64 chars', async () => { + await renderCreateMode(); + await goToHostnameStep(); + const nextButton = await getNextButton(); + + // enter invalid hostname + const invalidHostname = 'a'.repeat(65); + await enterHostname(invalidHostname); + expect(nextButton).toBeDisabled(); + + // enter valid hostname + await clearHostname(); + expect(nextButton).toBeEnabled(); + }); + test('revisit step button on Review works', async () => { await renderCreateMode(); await goToHostnameStep();