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,
|
location,
|
||||||
startWashTime,
|
startWashTime,
|
||||||
endWashTime,
|
endWashTime,
|
||||||
|
...props
|
||||||
}) => {
|
}) => {
|
||||||
const { t } = useTranslation('~', {
|
const { t } = useTranslation('~', {
|
||||||
keyPrefix: 'dry-wash.order-view.details',
|
keyPrefix: 'dry-wash.order-view.details',
|
||||||
@ -50,7 +51,7 @@ export const OrderDetails: FC<OrderDetailsProps> = ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<VStack p={4} alignItems='flex-start' gap={4}>
|
<VStack p={4} alignItems='flex-start' gap={4} {...props}>
|
||||||
<HStack
|
<HStack
|
||||||
width='full'
|
width='full'
|
||||||
flexWrap='wrap'
|
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
|
centerContent
|
||||||
>
|
>
|
||||||
<VStack w='full' h='full' alignItems='stretch' flexGrow={1}>
|
<VStack w='full' h='full' alignItems='stretch' flexGrow={1}>
|
||||||
<Heading textAlign='center' mt={4}>
|
<Heading textAlign='center' mt={4} data-testid='heading'>
|
||||||
{t('title')}
|
{t('title')}
|
||||||
</Heading>
|
</Heading>
|
||||||
{isLoading ? (
|
{isLoading ? (
|
||||||
<HStack width='full' justifyContent='center'>
|
<HStack width='full' justifyContent='center' data-testid='loader'>
|
||||||
<Spinner size='lg' />
|
<Spinner size='lg' />
|
||||||
</HStack>
|
</HStack>
|
||||||
) : (
|
) : (
|
||||||
@ -80,12 +80,13 @@ const Page: FC = () => {
|
|||||||
startWashTime={order.startWashTime}
|
startWashTime={order.startWashTime}
|
||||||
endWashTime={order.endWashTime}
|
endWashTime={order.endWashTime}
|
||||||
created={order.created}
|
created={order.created}
|
||||||
|
data-testid='order-details'
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
<>
|
<>
|
||||||
{isError && (
|
{isError && (
|
||||||
<Alert status='error' alignItems='flex-start'>
|
<Alert status='error' alignItems='flex-start' data-testid='error'>
|
||||||
<AlertIcon />
|
<AlertIcon />
|
||||||
<Box>
|
<Box>
|
||||||
<AlertTitle>
|
<AlertTitle>
|
||||||
|
Loading…
Reference in New Issue
Block a user