Merge pull request #15825 from strapi/chore/ee-seats-test

Add component tests for admin seat infos
This commit is contained in:
ivanThePleasant 2023-02-19 21:10:50 +02:00 committed by GitHub
commit d456156ac1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 1499 additions and 1338 deletions

View File

@ -8,7 +8,7 @@ const CreateAction = ({ onClick }) => {
const { formatMessage } = useIntl();
return (
<Button data-testid="create-user-button" onClick={onClick} startIcon={<Envelop />} size="S">
<Button onClick={onClick} startIcon={<Envelop />} size="S">
{formatMessage({
id: 'Settings.permissions.users.create',
defaultMessage: 'Invite new user',

View File

@ -0,0 +1,36 @@
import React from 'react';
import { render, fireEvent } from '@testing-library/react';
import { IntlProvider } from 'react-intl';
import { ThemeProvider, lightTheme } from '@strapi/design-system';
import CreateAction from '..';
const onClickSpy = jest.fn();
const ComponentFixture = (props) => (
<ThemeProvider theme={lightTheme}>
<IntlProvider locale="en" messages={{}}>
<CreateAction onClick={onClickSpy} {...props} />
</IntlProvider>
</ThemeProvider>
);
function setup(props) {
return render(<ComponentFixture {...props} />);
}
describe('<CreateAction />', () => {
test('Does render', () => {
const { queryByText } = setup();
expect(queryByText('Invite new user')).toBeInTheDocument();
});
test('Calls onClick callback', () => {
const { getByRole } = setup();
fireEvent.click(getByRole('button'));
expect(onClickSpy).toBeCalledTimes(1);
});
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,124 @@
import React from 'react';
import { render } from '@testing-library/react';
import { IntlProvider } from 'react-intl';
import { ThemeProvider, lightTheme } from '@strapi/design-system';
import { useLicenseLimits } from '../../../../../../../hooks';
import AdminSeatInfo from '..';
const LICENSE_MOCK = {
license: {
data: {
enforcementUserCount: 10,
licenseLimitStatus: '',
permittedSeats: 100,
isHostedOnStrapiCloud: false,
},
},
};
const withMarkup = (query) => (text) =>
query((content, node) => {
const hasText = (node) => node.textContent === text;
const childrenDontHaveText = Array.from(node.children).every((child) => !hasText(child));
return hasText(node) && childrenDontHaveText;
});
jest.mock('../../../../../../../hooks', () => ({
...jest.requireActual('../../../../../../../hooks'),
useLicenseLimits: jest.fn(),
}));
const ComponentFixture = (props) => (
<ThemeProvider theme={lightTheme}>
<IntlProvider locale="en" messages={{}}>
<AdminSeatInfo {...props} />
</IntlProvider>
</ThemeProvider>
);
function setup(props) {
return render(<ComponentFixture {...props} />);
}
describe('<AdminSeatInfo />', () => {
beforeEach(() => {
jest.clearAllMocks();
useLicenseLimits.mockReturnValue(LICENSE_MOCK);
});
test('Do not render anything, when permittedSeats is falsy', () => {
useLicenseLimits.mockReturnValue({
...LICENSE_MOCK,
license: {
...LICENSE_MOCK.license,
data: {
...LICENSE_MOCK.license.data,
permittedSeats: null,
},
},
});
const { queryByText } = setup();
expect(queryByText('Admin seats')).not.toBeInTheDocument();
});
test('Render seat info', () => {
const { getByText } = setup();
const getByTextWithMarkup = withMarkup(getByText);
expect(getByText('Admin seats')).toBeInTheDocument();
expect(getByTextWithMarkup('10/100')).toBeInTheDocument();
});
test('Render billing link (not on strapi cloud)', () => {
const { getByText } = setup();
expect(getByText('Contact sales')).toBeInTheDocument();
expect(getByText('Contact sales').closest('a')).toHaveAttribute(
'href',
'https://share.hsforms.com/1WhxtbTkJSUmfqqEuv4pwuA43qp4'
);
});
test('Render billing link (on strapi cloud)', () => {
useLicenseLimits.mockReturnValue({
...LICENSE_MOCK,
license: {
...LICENSE_MOCK.license,
data: {
...LICENSE_MOCK.license.data,
isHostedOnStrapiCloud: true,
},
},
});
const { getByText } = setup();
expect(getByText('Add seats')).toBeInTheDocument();
expect(getByText('Add seats').closest('a')).toHaveAttribute(
'href',
'https://cloud.strapi.io/profile/billing'
);
});
test('Render OVER_LIMIT icon', () => {
useLicenseLimits.mockReturnValue({
...LICENSE_MOCK,
license: {
...LICENSE_MOCK.license,
data: {
...LICENSE_MOCK.license.data,
licenseLimitStatus: 'OVER_LIMIT',
},
},
});
const { getByText } = setup();
expect(getByText('At limit: add seats to invite more users')).toBeInTheDocument();
});
});