feat: test order view page render (#85)
This commit is contained in:
parent
f07f7aeba5
commit
251ea5184e
@ -41,6 +41,7 @@ export const OrderDetails: FC<OrderDetailsProps> = ({
|
||||
location,
|
||||
startWashTime,
|
||||
endWashTime,
|
||||
...props
|
||||
}) => {
|
||||
const { t } = useTranslation('~', {
|
||||
keyPrefix: 'dry-wash.order-view.details',
|
||||
@ -50,7 +51,7 @@ export const OrderDetails: FC<OrderDetailsProps> = ({
|
||||
});
|
||||
|
||||
return (
|
||||
<VStack p={4} alignItems='flex-start' gap={4}>
|
||||
<VStack p={4} alignItems='flex-start' gap={4} {...props}>
|
||||
<HStack
|
||||
width='full'
|
||||
flexWrap='wrap'
|
||||
|
235
src/pages/__tests__/__snapshots__/order-view.test.tsx.snap
Normal file
235
src/pages/__tests__/__snapshots__/order-view.test.tsx.snap
Normal file
@ -0,0 +1,235 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`Order View page, initial load shows order details 1`] = `
|
||||
<div>
|
||||
<div
|
||||
class="chakra-container css-3n6qh3"
|
||||
>
|
||||
<div
|
||||
class="chakra-stack css-oo194l"
|
||||
>
|
||||
<h2
|
||||
class="chakra-heading css-1c6lvb5"
|
||||
data-testid="heading"
|
||||
>
|
||||
Ваш заказ
|
||||
</h2>
|
||||
<div
|
||||
class="chakra-stack css-1n38vgh"
|
||||
created="2025-01-19T14:04:02.985Z"
|
||||
data-testid="order-details"
|
||||
>
|
||||
<div
|
||||
class="chakra-stack css-1ofajmr"
|
||||
>
|
||||
<h2
|
||||
class="chakra-heading css-1jb3vzl"
|
||||
>
|
||||
Заказ №{{number}}
|
||||
</h2>
|
||||
<span
|
||||
class="css-6jfsiv"
|
||||
>
|
||||
В ожидании
|
||||
</span>
|
||||
</div>
|
||||
<ul
|
||||
class="css-1laduhn"
|
||||
role="list"
|
||||
>
|
||||
<li
|
||||
class="css-0"
|
||||
>
|
||||
Владелец
|
||||
:
|
||||
|
||||
<span
|
||||
class="chakra-text css-1qxum2s"
|
||||
>
|
||||
+79876543210
|
||||
</span>
|
||||
</li>
|
||||
<li
|
||||
class="css-0"
|
||||
>
|
||||
Автомобиль
|
||||
:
|
||||
|
||||
<span
|
||||
class="chakra-text css-1qxum2s"
|
||||
>
|
||||
А123АА16, Хэтчбек, #ffffff
|
||||
</span>
|
||||
</li>
|
||||
<li
|
||||
class="css-0"
|
||||
>
|
||||
Где
|
||||
:
|
||||
|
||||
<span
|
||||
class="chakra-text css-1qxum2s"
|
||||
>
|
||||
55.793833888711006,49.19037910644527 Республика Татарстан (Татарстан), Казань, жилой район Седьмое Небо
|
||||
</span>
|
||||
</li>
|
||||
<li
|
||||
class="css-0"
|
||||
>
|
||||
Когда
|
||||
:
|
||||
|
||||
<span
|
||||
class="chakra-text css-1qxum2s"
|
||||
>
|
||||
17:03 19.01.2025 - 17:03 19.01.2025
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<div
|
||||
class="chakra-alert css-d7mf12"
|
||||
data-status="info"
|
||||
role="alert"
|
||||
>
|
||||
<span
|
||||
class="chakra-alert__icon css-14ogjxt"
|
||||
data-status="info"
|
||||
>
|
||||
<svg
|
||||
class="chakra-icon css-qk6lof"
|
||||
focusable="false"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
d="M12,0A12,12,0,1,0,24,12,12.013,12.013,0,0,0,12,0Zm.25,5a1.5,1.5,0,1,1-1.5,1.5A1.5,1.5,0,0,1,12.25,5ZM14.5,18.5h-4a1,1,0,0,1,0-2h.75a.25.25,0,0,0,.25-.25v-4.5a.25.25,0,0,0-.25-.25H10.5a1,1,0,0,1,0-2h1a2,2,0,0,1,2,2v4.75a.25.25,0,0,0,.25.25h.75a1,1,0,1,1,0,2Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
С вами свяжется оператор насчет оплаты по указанному номеру телефона
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span
|
||||
hidden=""
|
||||
id="__chakra_env"
|
||||
/>
|
||||
<span
|
||||
hidden=""
|
||||
id="__chakra_env"
|
||||
/>
|
||||
<span
|
||||
hidden=""
|
||||
id="__chakra_env"
|
||||
/>
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`Order View page, initial load shows order details loading 1`] = `
|
||||
<div>
|
||||
<div
|
||||
class="chakra-container css-3n6qh3"
|
||||
>
|
||||
<div
|
||||
class="chakra-stack css-oo194l"
|
||||
>
|
||||
<h2
|
||||
class="chakra-heading css-1c6lvb5"
|
||||
data-testid="heading"
|
||||
>
|
||||
Ваш заказ
|
||||
</h2>
|
||||
<div
|
||||
class="chakra-stack css-egjlgc"
|
||||
data-testid="loader"
|
||||
>
|
||||
<div
|
||||
class="chakra-spinner css-1j92705"
|
||||
>
|
||||
<span
|
||||
class="css-8b45rq"
|
||||
>
|
||||
Loading...
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span
|
||||
hidden=""
|
||||
id="__chakra_env"
|
||||
/>
|
||||
<span
|
||||
hidden=""
|
||||
id="__chakra_env"
|
||||
/>
|
||||
<span
|
||||
hidden=""
|
||||
id="__chakra_env"
|
||||
/>
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`Order View page, initial load shows order error 1`] = `
|
||||
<div>
|
||||
<div
|
||||
class="chakra-container css-3n6qh3"
|
||||
>
|
||||
<div
|
||||
class="chakra-stack css-oo194l"
|
||||
>
|
||||
<h2
|
||||
class="chakra-heading css-1c6lvb5"
|
||||
data-testid="heading"
|
||||
>
|
||||
Ваш заказ
|
||||
</h2>
|
||||
<div
|
||||
class="chakra-alert css-g4o1ra"
|
||||
data-status="error"
|
||||
data-testid="error"
|
||||
role="alert"
|
||||
>
|
||||
<span
|
||||
class="chakra-alert__icon css-14ogjxt"
|
||||
data-status="error"
|
||||
>
|
||||
<svg
|
||||
class="chakra-icon css-qk6lof"
|
||||
focusable="false"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
d="M11.983,0a12.206,12.206,0,0,0-8.51,3.653A11.8,11.8,0,0,0,0,12.207,11.779,11.779,0,0,0,11.8,24h.214A12.111,12.111,0,0,0,24,11.791h0A11.766,11.766,0,0,0,11.983,0ZM10.5,16.542a1.476,1.476,0,0,1,1.449-1.53h.027a1.527,1.527,0,0,1,1.523,1.47,1.475,1.475,0,0,1-1.449,1.53h-.027A1.529,1.529,0,0,1,10.5,16.542ZM11,12.5v-6a1,1,0,0,1,2,0v6a1,1,0,1,1-2,0Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
</svg>
|
||||
</span>
|
||||
<div
|
||||
class="css-0"
|
||||
>
|
||||
<div
|
||||
class="chakra-alert__title css-tidvy5"
|
||||
data-status="error"
|
||||
>
|
||||
Не удалось загрузить детали заказа
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<span
|
||||
hidden=""
|
||||
id="__chakra_env"
|
||||
/>
|
||||
<span
|
||||
hidden=""
|
||||
id="__chakra_env"
|
||||
/>
|
||||
<span
|
||||
hidden=""
|
||||
id="__chakra_env"
|
||||
/>
|
||||
</div>
|
||||
`;
|
77
src/pages/__tests__/order-view.test.tsx
Normal file
77
src/pages/__tests__/order-view.test.tsx
Normal file
@ -0,0 +1,77 @@
|
||||
import { render, screen, waitFor } from '@testing-library/react';
|
||||
import React from 'react';
|
||||
import { useParams } from 'react-router-dom';
|
||||
|
||||
import { AppContext } from '../../../__mocks__/app-context-mock';
|
||||
import Page from '../order-view';
|
||||
import { server } from '../../../__mocks__/server/server';
|
||||
|
||||
jest.mock('react-router-dom', () => ({
|
||||
...jest.requireActual('react-router-dom'),
|
||||
useParams: jest.fn(),
|
||||
}));
|
||||
|
||||
describe('Order View page, initial load', () => {
|
||||
beforeAll(() => server.listen());
|
||||
afterEach(() => server.resetHandlers());
|
||||
afterAll(() => server.close());
|
||||
|
||||
test('shows order details loading', () => {
|
||||
(useParams as jest.Mock).mockReturnValue({ orderId: 'id1' });
|
||||
|
||||
const { container } = render(
|
||||
<AppContext>
|
||||
<Page />
|
||||
</AppContext>,
|
||||
);
|
||||
|
||||
expect(screen.getByTestId('heading')).toBeInTheDocument();
|
||||
expect(screen.getByTestId('loader')).toBeInTheDocument();
|
||||
expect(screen.queryByTestId('order-details')).not.toBeInTheDocument();
|
||||
expect(screen.queryByTestId('error')).not.toBeInTheDocument();
|
||||
|
||||
expect(container).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('shows order details', async () => {
|
||||
(useParams as jest.Mock).mockReturnValue({ orderId: 'id1' });
|
||||
|
||||
const { container } = render(
|
||||
<AppContext>
|
||||
<Page />
|
||||
</AppContext>,
|
||||
);
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByTestId('heading')).toBeInTheDocument();
|
||||
expect(screen.queryByTestId('loader')).not.toBeInTheDocument();
|
||||
expect(screen.getByTestId('order-details')).toBeInTheDocument();
|
||||
expect(screen.queryByTestId('error')).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
expect(container).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('shows order error', async () => {
|
||||
(useParams as jest.Mock).mockReturnValue({ orderId: null });
|
||||
|
||||
const { container } = render(
|
||||
<AppContext>
|
||||
<Page />
|
||||
</AppContext>,
|
||||
);
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByTestId('heading')).toBeInTheDocument();
|
||||
expect(screen.queryByTestId('loader')).not.toBeInTheDocument();
|
||||
expect(screen.queryByTestId('order-details')).not.toBeInTheDocument();
|
||||
expect(screen.getByTestId('error')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
expect(container).toMatchSnapshot();
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
@ -58,11 +58,11 @@ const Page: FC = () => {
|
||||
centerContent
|
||||
>
|
||||
<VStack w='full' h='full' alignItems='stretch' flexGrow={1}>
|
||||
<Heading textAlign='center' mt={4}>
|
||||
<Heading textAlign='center' mt={4} data-testid='heading'>
|
||||
{t('title')}
|
||||
</Heading>
|
||||
{isLoading ? (
|
||||
<HStack width='full' justifyContent='center'>
|
||||
<HStack width='full' justifyContent='center' data-testid='loader'>
|
||||
<Spinner size='lg' />
|
||||
</HStack>
|
||||
) : (
|
||||
@ -80,12 +80,13 @@ const Page: FC = () => {
|
||||
startWashTime={order.startWashTime}
|
||||
endWashTime={order.endWashTime}
|
||||
created={order.created}
|
||||
data-testid='order-details'
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
<>
|
||||
{isError && (
|
||||
<Alert status='error' alignItems='flex-start'>
|
||||
<Alert status='error' alignItems='flex-start' data-testid='error'>
|
||||
<AlertIcon />
|
||||
<Box>
|
||||
<AlertTitle>
|
||||
|
Loading…
Reference in New Issue
Block a user