65 lines
1.7 KiB
JavaScript
65 lines
1.7 KiB
JavaScript
import { render, screen } from '@testing-library/react';
|
|
import { RestaurantList } from './RestaurantList';
|
|
|
|
let loadRestaurants;
|
|
|
|
const restaurants = [
|
|
{ id: 1, name: 'Sushi Place' },
|
|
{ id: 2, name: 'Pizza Place' }
|
|
];
|
|
|
|
function renderComponent(propsOverride = {})
|
|
{
|
|
const props = {
|
|
loadRestaurants: jest.fn().mockName('loadRestaurnats'),
|
|
restaurants,
|
|
loading: false,
|
|
...propsOverride,
|
|
};
|
|
loadRestaurants = props.loadRestaurants;
|
|
|
|
render(<RestaurantList {...props} />);
|
|
}
|
|
|
|
describe('When Loading Succeeds', () =>
|
|
{
|
|
it('loads restaurants on first render', () =>
|
|
{
|
|
renderComponent();
|
|
expect(loadRestaurants).toHaveBeenCalled();
|
|
});
|
|
|
|
it('does not display the error message', () =>
|
|
{
|
|
renderComponent();
|
|
expect(screen.queryByText('Restautants could not be loaded.')).not.toBeInTheDocument();
|
|
});
|
|
|
|
it('displays the restaurants', () =>
|
|
{
|
|
renderComponent();
|
|
expect(screen.getByText('Sushi Place')).toBeInTheDocument();
|
|
expect(screen.getByText('Pizza Place')).toBeInTheDocument();
|
|
});
|
|
|
|
it('displays the loading indicator while loading', () =>
|
|
{
|
|
renderComponent({ loading: true });
|
|
expect(screen.getByRole('progressbar')).toBeInTheDocument();
|
|
});
|
|
|
|
it('does not display the loading indicator while not loading', () =>
|
|
{
|
|
renderComponent();
|
|
expect(screen.queryByRole('progressbar')).not.toBeInTheDocument();
|
|
});
|
|
});
|
|
describe('When Loading Fails', () =>
|
|
{
|
|
it('displays the error message', () =>
|
|
{
|
|
renderComponent({ loadError: true });
|
|
expect(screen.getByText('Restaurants could not be loaded.'),).toBeInTheDocument();
|
|
});
|
|
});
|