mirror of
https://github.com/strapi/strapi.git
synced 2025-09-18 21:08:54 +00:00
Update the common layout tests
This commit is contained in:
parent
ab83c5d696
commit
b8fb837c4c
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { render, waitFor, waitForElementToBeRemoved, screen } from '@testing-library/react';
|
import { render, waitFor, waitForElementToBeRemoved, screen } from '@testing-library/react';
|
||||||
import { IntlProvider } from 'react-intl';
|
import { IntlProvider } from 'react-intl';
|
||||||
import userEvent from '@testing-library/user-event';
|
|
||||||
import { QueryClient, QueryClientProvider } from 'react-query';
|
import { QueryClient, QueryClientProvider } from 'react-query';
|
||||||
import { ThemeProvider, lightTheme } from '@strapi/design-system';
|
import { ThemeProvider, lightTheme } from '@strapi/design-system';
|
||||||
import { useTracking, useAppInfos } from '@strapi/helper-plugin';
|
import { useTracking, useAppInfos } from '@strapi/helper-plugin';
|
||||||
@ -55,40 +54,62 @@ const App = (
|
|||||||
</QueryClientProvider>
|
</QueryClientProvider>
|
||||||
);
|
);
|
||||||
|
|
||||||
describe('Marketplace page', () => {
|
const waitForReload = async () => {
|
||||||
|
await waitForElementToBeRemoved(() => screen.getByTestId('loader'));
|
||||||
|
await waitFor(() =>
|
||||||
|
expect(screen.getByRole('heading', { name: /marketplace/i })).toBeInTheDocument()
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
describe('Marketplace page - layout', () => {
|
||||||
beforeAll(() => server.listen());
|
beforeAll(() => server.listen());
|
||||||
|
|
||||||
afterEach(() => server.resetHandlers());
|
afterEach(() => server.resetHandlers());
|
||||||
|
|
||||||
afterAll(() => server.close());
|
afterAll(() => server.close());
|
||||||
|
|
||||||
it('renders and matches the snapshot', async () => {
|
it('redners the online layout', async () => {
|
||||||
// Check snapshot
|
|
||||||
const { container, getByTestId, getByRole } = render(App);
|
|
||||||
await waitForElementToBeRemoved(() => getByTestId('loader'));
|
|
||||||
await waitFor(() => expect(getByRole('heading', { name: /marketplace/i })).toBeInTheDocument());
|
|
||||||
|
|
||||||
expect(container.firstChild).toMatchSnapshot();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('sends a single tracking event when the user enters the marketplace', () => {
|
|
||||||
const trackUsage = jest.fn();
|
const trackUsage = jest.fn();
|
||||||
useTracking.mockImplementation(() => ({ trackUsage }));
|
useTracking.mockImplementation(() => ({ trackUsage }));
|
||||||
render(App);
|
|
||||||
|
|
||||||
|
const { container } = render(App);
|
||||||
|
await waitForReload();
|
||||||
|
// Check snapshot
|
||||||
|
expect(container.firstChild).toMatchSnapshot();
|
||||||
|
// Calls the tracking event
|
||||||
expect(trackUsage).toHaveBeenCalledWith('didGoToMarketplace');
|
expect(trackUsage).toHaveBeenCalledWith('didGoToMarketplace');
|
||||||
expect(trackUsage).toHaveBeenCalledTimes(1);
|
expect(trackUsage).toHaveBeenCalledTimes(1);
|
||||||
|
const offlineText = screen.queryByText('You are offline');
|
||||||
|
expect(offlineText).toEqual(null);
|
||||||
|
// Shows the sort button
|
||||||
|
const sortButton = screen.getByRole('button', { name: /Sort by/i });
|
||||||
|
expect(sortButton).toBeVisible();
|
||||||
|
// Shows the filters button
|
||||||
|
const filtersButton = screen.getByRole('button', { name: /filters/i });
|
||||||
|
expect(filtersButton).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('handles production environment', () => {
|
it('renders the offline layout', async () => {
|
||||||
|
useNavigatorOnLine.mockReturnValueOnce(false);
|
||||||
|
render(App);
|
||||||
|
|
||||||
|
const offlineText = screen.getByText('You are offline');
|
||||||
|
|
||||||
|
expect(offlineText).toBeVisible();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('handles production environment', async () => {
|
||||||
|
client.clear();
|
||||||
// Simulate production environment
|
// Simulate production environment
|
||||||
useAppInfos.mockImplementationOnce(() => ({
|
useAppInfos.mockImplementation(() => ({
|
||||||
autoReload: false,
|
autoReload: false,
|
||||||
dependencies: {},
|
dependencies: {},
|
||||||
useYarn: true,
|
useYarn: true,
|
||||||
}));
|
}));
|
||||||
const { queryByText } = render(App);
|
|
||||||
|
|
||||||
|
render(App);
|
||||||
|
|
||||||
|
await waitForReload();
|
||||||
// Should display notification
|
// Should display notification
|
||||||
expect(toggleNotification).toHaveBeenCalledWith({
|
expect(toggleNotification).toHaveBeenCalledWith({
|
||||||
type: 'info',
|
type: 'info',
|
||||||
@ -98,53 +119,8 @@ describe('Marketplace page', () => {
|
|||||||
},
|
},
|
||||||
blockTransition: true,
|
blockTransition: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(toggleNotification).toHaveBeenCalledTimes(1);
|
expect(toggleNotification).toHaveBeenCalledTimes(1);
|
||||||
|
|
||||||
// Should not show install buttons
|
// Should not show install buttons
|
||||||
expect(queryByText(/copy install command/i)).not.toBeInTheDocument();
|
expect(screen.queryByText(/copy install command/i)).not.toBeInTheDocument();
|
||||||
});
|
|
||||||
|
|
||||||
it('shows an online layout', () => {
|
|
||||||
render(App);
|
|
||||||
const offlineText = screen.queryByText('You are offline');
|
|
||||||
|
|
||||||
expect(offlineText).toEqual(null);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('shows the offline layout', () => {
|
|
||||||
useNavigatorOnLine.mockReturnValueOnce(false);
|
|
||||||
render(App);
|
|
||||||
const offlineText = screen.getByText('You are offline');
|
|
||||||
|
|
||||||
expect(offlineText).toBeVisible();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('shows the sort by menu', () => {
|
|
||||||
render(App);
|
|
||||||
const sortButton = screen.getByRole('button', { name: /Sort by/i });
|
|
||||||
expect(sortButton).toBeVisible();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('shows the correct options on sort select', () => {
|
|
||||||
render(App);
|
|
||||||
const sortButton = screen.getByRole('button', { name: /Sort by/i });
|
|
||||||
userEvent.click(sortButton);
|
|
||||||
|
|
||||||
const alphabeticalOption = screen.getByRole('option', { name: 'Alphabetical order' });
|
|
||||||
const newestOption = screen.getByRole('option', { name: 'Newest' });
|
|
||||||
|
|
||||||
expect(alphabeticalOption).toBeVisible();
|
|
||||||
expect(newestOption).toBeVisible();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('changes the url on sort option select', () => {
|
|
||||||
render(App);
|
|
||||||
const sortButton = screen.getByRole('button', { name: /Sort by/i });
|
|
||||||
userEvent.click(sortButton);
|
|
||||||
|
|
||||||
const newestOption = screen.getByRole('option', { name: 'Newest' });
|
|
||||||
userEvent.click(newestOption);
|
|
||||||
expect(history.location.search).toEqual('?sort=submissionDate:desc');
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -56,7 +56,7 @@ const waitForReload = async () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
describe('Plugins tab', () => {
|
describe('Marketplace page - plugins tab', () => {
|
||||||
let renderedContainer;
|
let renderedContainer;
|
||||||
let history;
|
let history;
|
||||||
|
|
||||||
@ -381,4 +381,24 @@ describe('Plugins tab', () => {
|
|||||||
userEvent.click(screen.getByRole('tab', { name: /plugins/i }));
|
userEvent.click(screen.getByRole('tab', { name: /plugins/i }));
|
||||||
expect(collectionCards.length).toBe(2);
|
expect(collectionCards.length).toBe(2);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('shows the correct options on sort select', () => {
|
||||||
|
const sortButton = screen.getByRole('button', { name: /Sort by/i });
|
||||||
|
userEvent.click(sortButton);
|
||||||
|
|
||||||
|
const alphabeticalOption = screen.getByRole('option', { name: 'Alphabetical order' });
|
||||||
|
const newestOption = screen.getByRole('option', { name: 'Newest' });
|
||||||
|
|
||||||
|
expect(alphabeticalOption).toBeVisible();
|
||||||
|
expect(newestOption).toBeVisible();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('changes the url on sort option select', () => {
|
||||||
|
const sortButton = screen.getByRole('button', { name: /Sort by/i });
|
||||||
|
userEvent.click(sortButton);
|
||||||
|
|
||||||
|
const newestOption = screen.getByRole('option', { name: 'Newest' });
|
||||||
|
userEvent.click(newestOption);
|
||||||
|
expect(history.location.search).toEqual('?sort=submissionDate:desc');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -277,4 +277,24 @@ describe('Providers tab', () => {
|
|||||||
userEvent.click(screen.getByRole('tab', { name: /providers/i }));
|
userEvent.click(screen.getByRole('tab', { name: /providers/i }));
|
||||||
expect(collectionCards.length).toBe(2);
|
expect(collectionCards.length).toBe(2);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('shows the correct options on sort select', () => {
|
||||||
|
const sortButton = screen.getByRole('button', { name: /Sort by/i });
|
||||||
|
userEvent.click(sortButton);
|
||||||
|
|
||||||
|
const alphabeticalOption = screen.getByRole('option', { name: 'Alphabetical order' });
|
||||||
|
const newestOption = screen.getByRole('option', { name: 'Newest' });
|
||||||
|
|
||||||
|
expect(alphabeticalOption).toBeVisible();
|
||||||
|
expect(newestOption).toBeVisible();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('changes the url on sort option select', () => {
|
||||||
|
const sortButton = screen.getByRole('button', { name: /Sort by/i });
|
||||||
|
userEvent.click(sortButton);
|
||||||
|
|
||||||
|
const newestOption = screen.getByRole('option', { name: 'Newest' });
|
||||||
|
userEvent.click(newestOption);
|
||||||
|
expect(history.location.search).toEqual('?npmPackageType=provider&sort=submissionDate:desc');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user