import React from 'react';
import { screen, within, act } from '@testing-library/react';
import App from 'components/App';
import { render } from 'lib/testHelpers';
import { clustersPayload } from 'redux/reducers/clusters/__test__/fixtures';
import userEvent from '@testing-library/user-event';
import fetchMock from 'fetch-mock';
describe('App', () => {
describe('initial state', () => {
beforeEach(() => {
render(, {
pathname: '/',
});
});
it('shows PageLoader until clusters are fulfilled', () => {
expect(screen.getByText('Dashboard')).toBeInTheDocument();
expect(screen.getByRole('progressbar')).toBeInTheDocument();
});
it('correctly renders header', () => {
const header = screen.getByLabelText('Page Header');
expect(header).toBeInTheDocument();
expect(
within(header).getByText('UI for Apache Kafka')
).toBeInTheDocument();
expect(within(header).getAllByRole('separator').length).toEqual(3);
expect(within(header).getByRole('button')).toBeInTheDocument();
});
it('handle burger click correctly', () => {
const header = screen.getByLabelText('Page Header');
const burger = within(header).getByRole('button');
const sidebar = screen.getByLabelText('Sidebar');
const overlay = screen.getByLabelText('Overlay');
expect(sidebar).toBeInTheDocument();
expect(overlay).toBeInTheDocument();
expect(overlay).toHaveStyleRule('visibility: hidden');
expect(burger).toHaveStyleRule('display: none');
userEvent.click(burger);
expect(overlay).toHaveStyleRule('visibility: visible');
});
});
describe('with clusters list fetched', () => {
it('shows Cluster list', async () => {
const mock = fetchMock.getOnce('/api/clusters', clustersPayload);
await act(() => {
render(, {
pathname: '/',
});
});
expect(mock.called()).toBeTruthy();
const menuContainer = screen.getByLabelText('Sidebar Menu');
expect(menuContainer).toBeInTheDocument();
expect(within(menuContainer).getByText('Dashboard')).toBeInTheDocument();
expect(
within(menuContainer).getByText(clustersPayload[0].name)
).toBeInTheDocument();
expect(
within(menuContainer).getByText(clustersPayload[1].name)
).toBeInTheDocument();
expect(screen.queryByRole('progressbar')).not.toBeInTheDocument();
});
});
});