diff --git a/driver-pwa/frontend/src/pages/HistoryPage.test.tsx b/driver-pwa/frontend/src/pages/HistoryPage.test.tsx new file mode 100644 index 0000000..f866132 --- /dev/null +++ b/driver-pwa/frontend/src/pages/HistoryPage.test.tsx @@ -0,0 +1,25 @@ +import { describe, it, expect, vi } from "vitest"; +import { render, screen } from "@testing-library/react"; +import { MemoryRouter } from "react-router-dom"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; + +vi.mock("@/api/driver", () => ({ + getPayments: vi.fn(async () => ({ payments: [ + { order_id: "o1", bucket: "Долг аренда", amount: 1000, commission: 52, method: "qr", status: "PAID", created_at: "2026-06-18T09:00:00Z", paid_at: "2026-06-18T09:01:00Z" }, + ] })), +})); +import { HistoryPage } from "./HistoryPage"; + +function wrap() { + const qc = new QueryClient(); + return render(); +} + +describe("HistoryPage", () => { + it("lists payments with amount + status", async () => { + wrap(); + expect(await screen.findByText("Долг аренда")).toBeInTheDocument(); + expect(screen.getByText("1 000 ₽")).toBeInTheDocument(); + expect(screen.getByText(/Оплачено/i)).toBeInTheDocument(); + }); +}); diff --git a/driver-pwa/frontend/src/pages/HistoryPage.tsx b/driver-pwa/frontend/src/pages/HistoryPage.tsx index e963843..39bcf11 100644 --- a/driver-pwa/frontend/src/pages/HistoryPage.tsx +++ b/driver-pwa/frontend/src/pages/HistoryPage.tsx @@ -1 +1,39 @@ -export function HistoryPage() { return null; } +import { useQuery } from "@tanstack/react-query"; +import { useNavigate } from "react-router-dom"; +import { getPayments } from "@/api/driver"; +import { formatMoney } from "@/lib/format"; +import { Spinner } from "@/components/Spinner"; + +const STATUS_RU: Record = { + PAID: "Оплачено", NEW: "Ожидает", FORM: "Ожидает", CONFIRMED: "Оплачено", REJECTED: "Отклонён", +}; + +export function HistoryPage() { + const nav = useNavigate(); + const { data, isLoading } = useQuery({ queryKey: ["payments"], queryFn: getPayments }); + const rows = data?.payments ?? []; + + return ( +
+ +

История пополнений

+ {isLoading ? ( +
+ ) : rows.length === 0 ? ( +

Пока нет пополнений

+ ) : ( + rows.map((p) => ( +
+
+

{p.bucket}

+

+ {p.created_at ? new Date(p.created_at).toLocaleDateString("ru-RU") : ""} · {STATUS_RU[p.status] ?? p.status} +

+
+ {formatMoney(p.amount)} +
+ )) + )} +
+ ); +}