CreateImageWizard: Fix deselecting selected packages

Deselecting a selected set of package didn't change the state correctly.
This commit is contained in:
Sanne Raymaekers 2021-11-28 16:00:09 +01:00 committed by jkozol
parent 0d5ab8b86b
commit a16212ddc3
3 changed files with 43 additions and 6 deletions

View file

@ -139,14 +139,15 @@ const Packages = ({ defaultArch, ...props }) => {
if (fromAvailable) {
sortPackages(updatedSourcePackages);
setPackagesChosen([ ...destinationPackages ]);
setPackagesChosen(destinationPackages);
// set the steps field to the current chosen packages list
change(input.name, removePackagesDisplayFields(destinationPackages));
} else {
setPackagesChosen(updatedSourcePackages);
sortPackages([ ...destinationPackages ]);
sortPackages(packagesAvailable);
// set the steps field to the current chosen packages list
change(input.name, removePackagesDisplayFields(updatedSourcePackages));
}
// set the steps field to the current chosen packages list
change(input.name, removePackagesDisplayFields(packagesChosen));
};
// move all packages

View file

@ -141,7 +141,7 @@ const ReviewStep = () => {
<TextListItem component={ TextListItemVariants.dt }>
Chosen
</TextListItem>
<TextListItem component={ TextListItemVariants.dd }>
<TextListItem component={ TextListItemVariants.dd } data-testid='chosen-packages-count'>
{getState()?.values?.['selected-packages']?.length || 0}
</TextListItem>
</TextList>

View file

@ -522,6 +522,42 @@ describe('Step Packages', () => {
expect(secondItem).toHaveTextContent('testPkgtest package summary');
expect(thirdItem).toHaveTextContent('lib-testlib-test package summary');
});
test('removing a single package updates the state correctly', async () => {
const searchbox = screen.getAllByRole('textbox')[0]; // searching by id doesn't update the input ref
searchbox.click();
const getPackages = jest
.spyOn(api, 'getPackages')
.mockImplementation(() => Promise.resolve(mockPkgResult));
await searchForPackages(searchbox, 'test');
expect(getPackages).toHaveBeenCalledTimes(1);
screen.getByRole('button', { name: /Add all/ }).click();
// remove a single package
screen.getByRole('option', { name: /lib-test lib-test package summary/ }).click();
screen.getByRole('button', { name: /Remove selected/ }).click();
// review page
screen.getByRole('button', { name: /Next/ }).click();
// await screen.findByTestId('chosen-packages-count');
let chosen = await screen.findByTestId('chosen-packages-count');
expect(chosen).toHaveTextContent('2');
// remove another package
screen.getByRole('button', { name: /Back/ }).click();
await screen.findByTestId('search-available-pkgs-input');
screen.getByRole('option', { name: /summary for test package/ }).click();
screen.getByRole('button', { name: /Remove selected/ }).click();
// review page
screen.getByRole('button', { name: /Next/ }).click();
// await screen.findByTestId('chosen-packages-count');
chosen = await screen.findByTestId('chosen-packages-count');
expect(chosen).toHaveTextContent('1');
});
});
describe('Step Review', () => {