debian-image-builder-frontend/src/test/Components/CreateImageWizard/CreateImageWizard.test.tsx
regexowl fe3257c0d9 Wizard: Replace deprecated selects on Azure step
This replaces deprecated selects on the Azure step for non-deprecated ones.
2025-03-19 11:39:23 +01:00

190 lines
5.9 KiB
TypeScript

import { screen, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { clickNext, renderCreateMode } from './wizardTestUtils';
const getAwsSourceDropdown = async () => {
const sourceDropdown = await screen.findByRole('textbox', {
name: /select source/i,
});
await waitFor(() => expect(sourceDropdown).toBeEnabled());
return sourceDropdown;
};
const getAzureSourceDropdown = async () => {
const sourceDropdown = await screen.findByPlaceholderText(/select source/i);
await waitFor(() => expect(sourceDropdown).toBeEnabled());
return sourceDropdown;
};
const selectAllEnvironments = async () => {
const user = userEvent.setup();
await waitFor(() => user.click(screen.getByTestId('upload-aws')));
await waitFor(() => user.click(screen.getByTestId('upload-google')));
await waitFor(() => user.click(screen.getByTestId('upload-azure')));
await waitFor(() => user.click(screen.getByTestId('checkbox-guest-image')));
};
const testTile = async (tile: HTMLElement) => {
const user = userEvent.setup();
tile.focus();
await waitFor(() => user.keyboard(' '));
expect(tile).toHaveClass('pf-m-selected');
await waitFor(() => user.keyboard(' '));
expect(tile).not.toHaveClass('pf-m-selected');
};
describe('Create Image Wizard', () => {
beforeEach(() => {
vi.clearAllMocks();
});
test('renders component', async () => {
await renderCreateMode();
// check heading
await screen.findByRole('heading', { name: /Images/ });
// check navigation
await screen.findByRole('button', { name: 'Image output' });
await screen.findByRole('button', { name: 'Optional steps' });
await screen.findByRole('button', { name: 'File system configuration' });
await screen.findByRole('button', { name: 'Additional packages' });
await screen.findByRole('button', { name: 'Users' });
await screen.findByRole('button', { name: 'Timezone' });
await screen.findByRole('button', { name: 'Locale' });
await screen.findByRole('button', { name: 'Hostname' });
await screen.findByRole('button', { name: 'Kernel' });
await screen.findByRole('button', { name: 'Firewall' });
await screen.findByRole('button', { name: 'Systemd services' });
await screen.findByRole('button', { name: 'Details' });
await screen.findByRole('button', { name: 'Review' });
if (!process.env.IS_ON_PREMISE) {
await screen.findByRole('button', { name: 'Register' });
await screen.findByRole('button', { name: 'OpenSCAP' });
await screen.findByRole('button', { name: 'Repository snapshot' });
await screen.findByRole('button', { name: 'Custom repositories' });
await screen.findByRole('button', {
name: 'First boot script configuration',
});
}
});
});
describe('Keyboard accessibility', () => {
beforeEach(() => {
vi.clearAllMocks();
});
const user = userEvent.setup();
test('autofocus on each step first input element', async () => {
await renderCreateMode();
// Image output
await selectAllEnvironments();
await clickNext();
// Target environment aws
expect(
await screen.findByRole('radio', {
name: /use an account configured from sources\./i,
})
).toHaveFocus();
const awsSourceDropdown = await getAwsSourceDropdown();
await waitFor(() => user.click(awsSourceDropdown));
const awsSource = await screen.findByRole('option', {
name: /my_source/i,
});
await waitFor(() => user.click(awsSource));
await clickNext();
// Target environment google
expect(
await screen.findByRole('radio', {
name: /share image with a google account/i,
})
).toHaveFocus();
await waitFor(async () =>
user.type(
await screen.findByRole('textbox', { name: /google principal/i }),
'test@test.com'
)
);
await clickNext();
// Target environment azure
expect(
await screen.findByRole('radio', {
name: /use an account configured from sources\./i,
})
).toHaveFocus();
const azureSourceDropdown = await getAzureSourceDropdown();
await waitFor(() => user.click(azureSourceDropdown));
const azureSource = await screen.findByRole('option', {
name: /azureSource1/i,
});
await waitFor(() => user.click(azureSource));
const resourceGroupDropdown = await screen.findByPlaceholderText(
/select resource group/i
);
await waitFor(() => user.click(resourceGroupDropdown));
await waitFor(async () =>
user.click(
await screen.findByLabelText('Resource group myResourceGroup1')
)
);
await clickNext();
// Registration
await screen.findByText(
'Automatically register and enable advanced capabilities'
);
const registrationCheckbox = await screen.findByTestId(
'automatically-register-checkbox'
);
expect(registrationCheckbox).toHaveFocus();
await screen.findByRole('textbox', {
name: 'Select activation key',
});
await clickNext();
// TODO: Focus on textbox on OpenSCAP step
await clickNext();
//File system configuration
await clickNext();
// TODO: Focus on textbox on Custom Repos step
await clickNext();
// TODO: Focus on textbox on Packages step
await clickNext();
await clickNext();
// TODO: Focus on textbox on Details step
await clickNext();
});
test('pressing Enter does not advance the wizard', async () => {
await renderCreateMode();
user.click(await screen.findByTestId('upload-aws'));
user.keyboard('{enter}');
await screen.findByRole('heading', {
name: /image output/i,
});
});
test('target environment tiles are keyboard selectable', async () => {
await renderCreateMode();
await testTile(await screen.findByTestId('upload-aws'));
await testTile(await screen.findByTestId('upload-google'));
await testTile(await screen.findByTestId('upload-azure'));
});
});