This moves the `clickBack`, `clickCancel`, `clickNext`, `getNextButton` and `verifyCancelButton` functions from the tests to `testUtils`.
174 lines
4.9 KiB
JavaScript
174 lines
4.9 KiB
JavaScript
import '@testing-library/jest-dom';
|
|
|
|
import { screen, waitFor } from '@testing-library/react';
|
|
import userEvent from '@testing-library/user-event';
|
|
import { rest } from 'msw';
|
|
|
|
import { PROVISIONING_API } from '../../../constants.js';
|
|
import { server } from '../../mocks/server.js';
|
|
import {
|
|
clickNext,
|
|
getNextButton,
|
|
renderWithReduxRouter,
|
|
} from '../../testUtils';
|
|
|
|
jest.mock('@redhat-cloud-services/frontend-components/useChrome', () => ({
|
|
useChrome: () => ({
|
|
auth: {
|
|
getUser: () => {
|
|
return {
|
|
identity: {
|
|
internal: {
|
|
org_id: 5,
|
|
},
|
|
},
|
|
};
|
|
},
|
|
},
|
|
isBeta: () => true,
|
|
isProd: () => true,
|
|
getEnvironment: () => 'prod',
|
|
}),
|
|
}));
|
|
|
|
describe('Step Upload to Azure', () => {
|
|
const getSourceDropdown = async () => {
|
|
const sourceDropdown = await screen.findByRole('textbox', {
|
|
name: /select source/i,
|
|
});
|
|
// Wait for isSuccess === true, dropdown is disabled while isSuccess === false
|
|
await waitFor(() => expect(sourceDropdown).toBeEnabled());
|
|
|
|
return sourceDropdown;
|
|
};
|
|
|
|
beforeAll(() => {
|
|
// scrollTo is not defined in jsdom
|
|
window.HTMLElement.prototype.scrollTo = function () {};
|
|
});
|
|
|
|
afterEach(() => {
|
|
jest.clearAllMocks();
|
|
});
|
|
|
|
const user = userEvent.setup();
|
|
const setUp = async () => {
|
|
renderWithReduxRouter('imagewizard', {});
|
|
// select aws as upload destination
|
|
const azureTile = screen.getByTestId('upload-azure');
|
|
azureTile.click();
|
|
|
|
await clickNext();
|
|
|
|
expect(screen.getByRole('heading', { level: 1 })).toHaveTextContent(
|
|
'Target environment - Microsoft Azure'
|
|
);
|
|
};
|
|
|
|
test('azure step basics works', async () => {
|
|
await setUp();
|
|
|
|
expect(await getNextButton()).toHaveClass('pf-m-disabled');
|
|
expect(screen.getByTestId('azure-radio-source')).toBeChecked();
|
|
|
|
await user.click(screen.getByTestId('azure-radio-manual'));
|
|
expect(screen.getByTestId('azure-radio-manual')).toBeChecked();
|
|
|
|
expect(await getNextButton()).toHaveClass('pf-m-disabled');
|
|
|
|
await user.type(
|
|
screen.getByTestId('azure-tenant-id-manual'),
|
|
'c983c2cd-94d7-44e1-9c6e-9cfa3a40995f'
|
|
);
|
|
await user.type(
|
|
screen.getByTestId('azure-subscription-id-manual'),
|
|
'f8f200aa-6234-4bfb-86c2-163d33dffc0c'
|
|
);
|
|
await user.type(
|
|
screen.getByTestId('azure-resource-group-manual'),
|
|
'testGroup'
|
|
);
|
|
|
|
expect(await getNextButton()).not.toHaveClass('pf-m-disabled');
|
|
|
|
screen.getByTestId('azure-radio-source').click();
|
|
|
|
expect(await getNextButton()).toHaveClass('pf-m-disabled');
|
|
|
|
const sourceDropdown = await getSourceDropdown();
|
|
|
|
// manual values should be cleared out
|
|
expect(screen.getByTestId('azure-tenant-id-source')).toHaveValue('');
|
|
expect(screen.getByTestId('azure-subscription-id-source')).toHaveValue('');
|
|
|
|
sourceDropdown.click();
|
|
|
|
const source = await screen.findByRole('option', {
|
|
name: /azureSource1/i,
|
|
});
|
|
source.click();
|
|
// wait for fetching the upload info
|
|
await waitFor(() =>
|
|
expect(screen.getByTestId('azure-tenant-id-source')).not.toHaveValue('')
|
|
);
|
|
|
|
const resourceGroupDropdown = screen.getByRole('textbox', {
|
|
name: /select resource group/i,
|
|
});
|
|
await user.click(resourceGroupDropdown);
|
|
const groups = screen.getAllByLabelText(/^Resource group/);
|
|
expect(groups).toHaveLength(2);
|
|
await user.click(screen.getByLabelText('Resource group myResourceGroup1'));
|
|
|
|
expect(await getNextButton()).not.toHaveClass('pf-m-disabled');
|
|
}, 10000);
|
|
|
|
test('handles change of selected Source', async () => {
|
|
setUp();
|
|
|
|
const sourceDropdown = await getSourceDropdown();
|
|
|
|
sourceDropdown.click();
|
|
const source = await screen.findByRole('option', {
|
|
name: /azureSource1/i,
|
|
});
|
|
source.click();
|
|
await waitFor(() =>
|
|
expect(screen.getByTestId('azure-tenant-id-source')).not.toHaveValue('')
|
|
);
|
|
|
|
sourceDropdown.click();
|
|
const source2 = await screen.findByRole('option', {
|
|
name: /azureSource2/i,
|
|
});
|
|
source2.click();
|
|
await waitFor(() =>
|
|
expect(screen.getByTestId('azure-tenant-id-source')).toHaveValue(
|
|
'73d5694c-7a28-417e-9fca-55840084f508'
|
|
)
|
|
);
|
|
|
|
const resourceGroupDropdown = screen.getByRole('textbox', {
|
|
name: /select resource group/i,
|
|
});
|
|
await user.click(resourceGroupDropdown);
|
|
const groups = screen.getByLabelText(/^Resource group/);
|
|
expect(groups).toBeInTheDocument();
|
|
expect(screen.getByLabelText('Resource group theirGroup2')).toBeVisible();
|
|
});
|
|
|
|
test('component renders error state correctly', async () => {
|
|
setUp();
|
|
server.use(
|
|
rest.get(`${PROVISIONING_API}/sources`, (req, res, ctx) =>
|
|
res(ctx.status(500))
|
|
)
|
|
);
|
|
|
|
await screen.findByText(
|
|
/Sources cannot be reached, try again later or enter an account info for upload manually\./i
|
|
);
|
|
//
|
|
});
|
|
// set test timeout on 10 seconds
|
|
}, 15000);
|