Wizard: Add 3rd Party Repositories

Adds support for 3rd party repositories using the Red Hat Insights
Repositories app on console.redhat.com.

The packages step has been refactored heavily to reduce the bug surface
area and improve its reusability (it is now used in two Wizard steps).

New features related to the Repositories app are currently only exposed
in stage. Because stage and production are quite divergent (they have
different steps, for instance) there are separate test suites for the
production and stage versions of the Wizard. When these features are
moved into production, the two test suites can be merged into one.
This commit is contained in:
lucasgarfield 2022-11-10 20:15:53 +01:00 committed by Lucas Garfield
parent 3cad570606
commit 5adc0e7d4a
16 changed files with 2227 additions and 342 deletions

File diff suppressed because it is too large Load diff

View file

@ -188,7 +188,10 @@ describe('Create Image Wizard', () => {
screen.getByRole('heading', { name: /Create image/ });
screen.getByRole('button', { name: 'Image output' });
screen.getByRole('button', { name: 'Additional packages' });
screen.getByRole('button', { name: 'Registration' });
screen.getByRole('button', { name: 'File system configuration' });
screen.getByRole('button', { name: 'Content' });
screen.getByRole('button', { name: 'Additional Red Hat packages' });
screen.getByRole('button', { name: 'Name image' });
screen.getByRole('button', { name: 'Review' });
});
@ -850,14 +853,10 @@ describe('Step Packages', () => {
await searchForAvailablePackages(searchbox, 'test');
expect(getPackages).toHaveBeenCalledTimes(1);
screen
.getByRole('option', { name: /testPkg test package summary/ })
.click();
screen.getByTestId('available-pkgs-testPkg').click();
screen.getByRole('button', { name: /Add selected/ }).click();
screen
.getByRole('option', { name: /testPkg test package summary/ })
.click();
screen.getByTestId('selected-pkgs-testPkg').click();
screen.getByRole('button', { name: /Remove selected/ }).click();
const availablePackagesList = screen.getByTestId('available-pkgs-list');
@ -913,9 +912,7 @@ describe('Step Packages', () => {
screen.getByRole('button', { name: /Add all/ }).click();
// remove a single package
screen
.getByRole('option', { name: /lib-test lib-test package summary/ })
.click();
screen.getByTestId('selected-pkgs-lib-test').click();
screen.getByRole('button', { name: /Remove selected/ }).click();
// skip name page
@ -1007,58 +1004,6 @@ describe('Step Packages', () => {
await searchForChosenPackages(searchboxChosen, '');
});
test('should filter chosen packages from available list', async () => {
await setUp();
const searchboxAvailable = screen.getAllByRole('textbox')[0];
const availablePackagesList = screen.getByTestId('available-pkgs-list');
const chosenPackagesList = screen.getByTestId('chosen-pkgs-list');
const getPackages = jest
.spyOn(api, 'getPackages')
.mockImplementation(() => Promise.resolve(mockPkgResult));
searchboxAvailable.click();
await searchForAvailablePackages(searchboxAvailable, 'test');
expect(getPackages).toHaveBeenCalledTimes(1);
let availablePackagesItems = within(availablePackagesList).getAllByRole(
'option'
);
expect(availablePackagesItems).toHaveLength(3);
screen
.getByRole('option', { name: /testPkg test package summary/ })
.click();
screen.getByRole('button', { name: /Add selected/ }).click();
availablePackagesItems = within(availablePackagesList).getAllByRole(
'option'
);
expect(availablePackagesItems).toHaveLength(2);
let chosenPackagesItems = within(chosenPackagesList).getAllByRole('option');
// Knowing if it is in document isn't enough. We want a specific length of 1 so ignore rule.
// eslint-disable-next-line jest-dom/prefer-in-document
expect(chosenPackagesItems).toHaveLength(1);
searchboxAvailable.click();
await searchForAvailablePackages(searchboxAvailable, 'test');
expect(getPackages).toHaveBeenCalledTimes(2);
availablePackagesItems = within(availablePackagesList).getAllByRole(
'option'
);
chosenPackagesItems = within(chosenPackagesList).getAllByRole('option');
expect(availablePackagesItems).toHaveLength(2);
// Knowing if it is in document isn't enough. We want a specific length of 1 so ignore rule.
// eslint-disable-next-line jest-dom/prefer-in-document
expect(chosenPackagesItems).toHaveLength(1);
within(chosenPackagesList).getByRole('option', {
name: /testPkg test package summary/,
});
});
test('should get all packages, regardless of api default limit', async () => {
await setUp();