190 lines
5.9 KiB
TypeScript
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'));
|
|
});
|
|
});
|