This adds unit tests for package recommendations to the `Packages.test.tsx`, testing the happy path for: - adding single recommendation - adding all recommendations - removing a recommendation
213 lines
6 KiB
TypeScript
213 lines
6 KiB
TypeScript
import { screen } from '@testing-library/react';
|
|
import { userEvent } from '@testing-library/user-event';
|
|
|
|
import { CREATE_BLUEPRINT } from '../../../../../constants';
|
|
import { CreateBlueprintRequest } from '../../../../../store/imageBuilderApi';
|
|
import { clickNext } from '../../../../testUtils';
|
|
import {
|
|
blueprintRequest,
|
|
clickRegisterLater,
|
|
enterBlueprintName,
|
|
interceptBlueprintRequest,
|
|
render,
|
|
} from '../../wizardTestUtils';
|
|
|
|
jest.mock('@redhat-cloud-services/frontend-components/useChrome', () => ({
|
|
useChrome: () => ({
|
|
auth: {
|
|
getUser: () => {
|
|
return {
|
|
identity: {
|
|
internal: {
|
|
org_id: 5,
|
|
},
|
|
},
|
|
};
|
|
},
|
|
},
|
|
isBeta: () => true,
|
|
isProd: () => true,
|
|
getEnvironment: () => 'prod',
|
|
}),
|
|
}));
|
|
|
|
const goToPackagesStep = async () => {
|
|
const bareMetalCheckBox = await screen.findByRole('checkbox', {
|
|
name: /bare metal installer checkbox/i,
|
|
});
|
|
await userEvent.click(bareMetalCheckBox);
|
|
await clickNext(); // Registration
|
|
await clickRegisterLater();
|
|
await clickNext(); // OpenSCAP
|
|
await clickNext(); // File System
|
|
await clickNext(); // Custom repositories
|
|
await clickNext(); // Additional packages
|
|
};
|
|
|
|
const goToReviewStep = async () => {
|
|
await clickNext(); // Details
|
|
await enterBlueprintName();
|
|
await clickNext(); // Review
|
|
};
|
|
|
|
const searchForPackage = async () => {
|
|
const searchBox = await screen.findByRole('textbox', {
|
|
name: /search packages/i,
|
|
});
|
|
await userEvent.type(searchBox, 'test');
|
|
};
|
|
|
|
const selectFirstPackage = async () => {
|
|
await userEvent.click(
|
|
await screen.findByRole('checkbox', { name: /select row 0/i })
|
|
);
|
|
};
|
|
|
|
const deselectFirstPackage = async () => {
|
|
await userEvent.click(
|
|
await screen.findByRole('checkbox', { name: /select row 0/i })
|
|
);
|
|
};
|
|
|
|
const openRecommendationsExpandable = async () => {
|
|
await userEvent.click(
|
|
await screen.findByRole('button', { name: /recommended red hat packages/i })
|
|
);
|
|
};
|
|
|
|
const addSingleRecommendation = async () => {
|
|
const addPackageButtons = await screen.findAllByText(/add package/i);
|
|
await userEvent.click(addPackageButtons[0]);
|
|
};
|
|
|
|
const addAllRecommendations = async () => {
|
|
await userEvent.click(await screen.findByText(/add all packages/i));
|
|
};
|
|
|
|
const switchToSelected = async () => {
|
|
await userEvent.click(
|
|
await screen.findByRole('button', { name: /selected \(\d*\)/i })
|
|
);
|
|
};
|
|
|
|
const deselectRecommendation = async () => {
|
|
await userEvent.click(
|
|
await screen.findByRole('checkbox', { name: /select row 1/i })
|
|
);
|
|
};
|
|
|
|
describe('packages request generated correctly', () => {
|
|
const expectedPackages: string[] = ['test'];
|
|
|
|
test('with custom packages', async () => {
|
|
await render();
|
|
await goToPackagesStep();
|
|
await searchForPackage();
|
|
await selectFirstPackage();
|
|
await goToReviewStep();
|
|
const receivedRequest = await interceptBlueprintRequest(CREATE_BLUEPRINT);
|
|
|
|
const expectedRequest: CreateBlueprintRequest = {
|
|
...blueprintRequest,
|
|
customizations: {
|
|
packages: expectedPackages,
|
|
},
|
|
};
|
|
|
|
expect(receivedRequest).toEqual(expectedRequest);
|
|
});
|
|
|
|
test('deselecting a package removes it from the request', async () => {
|
|
await render();
|
|
await goToPackagesStep();
|
|
await searchForPackage();
|
|
await selectFirstPackage();
|
|
await deselectFirstPackage();
|
|
await goToReviewStep();
|
|
const receivedRequest = await interceptBlueprintRequest(CREATE_BLUEPRINT);
|
|
|
|
const expectedRequest = blueprintRequest;
|
|
|
|
expect(receivedRequest).toEqual(expectedRequest);
|
|
});
|
|
});
|
|
|
|
describe('package recommendations', () => {
|
|
const expectedSinglePackageRecommendation: string[] = [
|
|
'test', // recommendations are generated only when some packages have been selected
|
|
'recommendedPackage1',
|
|
];
|
|
|
|
const expectedAllPackageRecommendations: string[] = [
|
|
'test', // recommendations are generated only when some packages have been selected
|
|
'recommendedPackage1',
|
|
'recommendedPackage2',
|
|
'recommendedPackage3',
|
|
'recommendedPackage4',
|
|
'recommendedPackage5',
|
|
];
|
|
|
|
const expectedPackagesWithoutRecommendations: string[] = ['test'];
|
|
|
|
test('selecting single recommendation adds it to the request', async () => {
|
|
await render();
|
|
await goToPackagesStep();
|
|
await searchForPackage();
|
|
await selectFirstPackage();
|
|
await openRecommendationsExpandable();
|
|
await addSingleRecommendation();
|
|
await goToReviewStep();
|
|
const receivedRequest = await interceptBlueprintRequest(CREATE_BLUEPRINT);
|
|
|
|
const expectedRequest: CreateBlueprintRequest = {
|
|
...blueprintRequest,
|
|
customizations: {
|
|
packages: expectedSinglePackageRecommendation,
|
|
},
|
|
};
|
|
|
|
expect(receivedRequest).toEqual(expectedRequest);
|
|
});
|
|
|
|
test('clicking "Add all packages" adds all recommendations to the request', async () => {
|
|
await render();
|
|
await goToPackagesStep();
|
|
await searchForPackage();
|
|
await selectFirstPackage();
|
|
await openRecommendationsExpandable();
|
|
await addAllRecommendations();
|
|
await goToReviewStep();
|
|
const receivedRequest = await interceptBlueprintRequest(CREATE_BLUEPRINT);
|
|
|
|
const expectedRequest: CreateBlueprintRequest = {
|
|
...blueprintRequest,
|
|
customizations: {
|
|
packages: expectedAllPackageRecommendations,
|
|
},
|
|
};
|
|
|
|
expect(receivedRequest).toEqual(expectedRequest);
|
|
});
|
|
|
|
test('deselecting a package recommendation removes it from the request', async () => {
|
|
await render();
|
|
await goToPackagesStep();
|
|
await searchForPackage();
|
|
await selectFirstPackage();
|
|
await openRecommendationsExpandable();
|
|
await addSingleRecommendation();
|
|
await switchToSelected();
|
|
await deselectRecommendation();
|
|
await goToReviewStep();
|
|
const receivedRequest = await interceptBlueprintRequest(CREATE_BLUEPRINT);
|
|
|
|
const expectedRequest: CreateBlueprintRequest = {
|
|
...blueprintRequest,
|
|
customizations: {
|
|
packages: expectedPackagesWithoutRecommendations,
|
|
},
|
|
};
|
|
|
|
expect(receivedRequest).toEqual(expectedRequest);
|
|
});
|
|
});
|