diff --git a/client/src/features/order-detail/ui/OrderDetailContent.tsx b/client/src/features/order-detail/ui/OrderDetailContent.tsx index 50dbe65..357cfc1 100644 --- a/client/src/features/order-detail/ui/OrderDetailContent.tsx +++ b/client/src/features/order-detail/ui/OrderDetailContent.tsx @@ -1,17 +1,13 @@ import { useMemo, useState } from 'react' -import { Link as RouterLink } from 'react-router-dom' import Alert from '@mui/material/Alert' import Box from '@mui/material/Box' import Button from '@mui/material/Button' -import FormControl from '@mui/material/FormControl' -import InputLabel from '@mui/material/InputLabel' import Link from '@mui/material/Link' -import MenuItem from '@mui/material/MenuItem' -import Select from '@mui/material/Select' import Stack from '@mui/material/Stack' import Typography from '@mui/material/Typography' import { useMutation, useQueryClient } from '@tanstack/react-query' import { useUnit } from 'effector-react' +import { Link as RouterLink } from 'react-router-dom' import { postAdminOrderMessage, setAdminOrderStatus } from '@/entities/order/api/admin-order-api' import type { AdminOrderDetailResponse } from '@/entities/order/api/admin-order-api' import { deliveryCarrierLabelRu } from '@/shared/constants/delivery-carrier' @@ -165,31 +161,34 @@ export function OrderDetailContent({ detail, orderId }: { detail: AdminOrderDeta )} - - - Сменить статус - - - + + + Быстрый переход статуса + + {statusMut.isError && Не удалось сменить статус} + {nextStatuses.length === 0 ? ( + + Статус финальный, смена недоступна + + ) : ( + + {nextStatuses.map((nextStatus) => { + const isCancelled = nextStatus === 'CANCELLED' + return ( + + ) + })} + + )} + diff --git a/client/src/features/order-detail/ui/__tests__/OrderDetailContent.test.tsx b/client/src/features/order-detail/ui/__tests__/OrderDetailContent.test.tsx new file mode 100644 index 0000000..b47f2a4 --- /dev/null +++ b/client/src/features/order-detail/ui/__tests__/OrderDetailContent.test.tsx @@ -0,0 +1,181 @@ +import { QueryClient, QueryClientProvider } from '@tanstack/react-query' +import { render, screen, waitFor } from '@testing-library/react' +import userEvent from '@testing-library/user-event' +import { useUnit } from 'effector-react' +import { MemoryRouter } from 'react-router-dom' +import { beforeEach, describe, expect, it, vi } from 'vitest' +import { setAdminOrderStatus } from '@/entities/order/api/admin-order-api' +import type { AdminOrderDetailResponse } from '@/entities/order/api/admin-order-api' +import { ORDER_STATUS_MAP } from '@/shared/lib/order-status-data' +import { OrderDetailContent } from '../OrderDetailContent' + +vi.mock('@/entities/order/api/admin-order-api', () => ({ + setAdminOrderStatus: vi.fn(), + postAdminOrderMessage: vi.fn(), +})) + +vi.mock('effector-react', () => ({ + useUnit: vi.fn(), +})) + +vi.mock('@/shared/ui/RichTextMessageEditor.lazy', () => ({ + RichTextMessageEditor: ({ + value, + onChange, + }: { + value: string + onChange: (next: string) => void + placeholder?: string + disabled?: boolean + }) =>