fix(pwa): в штрафах только факт и сумма, без кухни расчётов

С карточки убраны строки про номинал постановления, скидку и «в ГИБДД
постановление закрыто», из списка — абзац о том, кто и как платит ГИБДД.
Остаётся то, ради чего экран делался: фотография нарушения, статья, место,
скорость, начисленная сумма и погашен ли долг.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-18 17:42:59 +10:00
co-authored by Claude Opus 5
parent eac59b823c
commit 3bf26d3650
4 changed files with 22 additions and 41 deletions
@@ -9,9 +9,8 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
const FINE = {
id: 12, number: "18810525260813035846", date: "2026-08-12",
article: "12.09.2 - Превышение скорости", address: "Владивосток, Некрасовская, 90",
car_number: "А947УТ125", amount: 618.75, billed: true, fine_amount: 750,
discount_amount: 375, discount_until: "2026-09-01",
settled: "owed" as const, closed_with_gibdd: true, cancelled: false, has_photo: true,
car_number: "А947УТ125", amount: 618.75,
settled: "owed" as const, cancelled: false, has_photo: true,
};
vi.mock("@/api/driver", () => ({
@@ -89,15 +88,24 @@ describe("карточка штрафа", () => {
expect(img.closest("a")).toHaveAttribute("target", "_blank");
});
it("объясняет, почему начислено меньше номинала постановления", async () => {
it("показывает начисленную сумму, скорость и постановление", async () => {
wrap("/fines/12");
expect(await screen.findByText("618,75 ₽")).toBeInTheDocument();
expect(screen.getByText(/Постановление — 750 ₽/)).toBeInTheDocument();
expect(screen.getByText(/В ГИБДД постановление закрыто/)).toBeInTheDocument();
expect(screen.getByText(/63 км\/ч при разрешённых 40/)).toBeInTheDocument();
expect(screen.getByText("18810525260813035846")).toBeInTheDocument();
});
it("расчёты парка с ГИБДД водителю не показываются", async () => {
// Решение владельца: без номинала, скидки и «парк уже оплатил». В начисление
// заложена комиссия парка, и любая из этих строк рядом требует объяснений.
wrap("/fines/12");
await screen.findByText("618,75 ₽");
expect(screen.queryByText(/750/)).not.toBeInTheDocument();
expect(screen.queryByText(/скидк/i)).not.toBeInTheDocument();
expect(screen.queryByText(/ГИБДД/)).not.toBeInTheDocument();
expect(screen.queryByText(/парк/i)).not.toBeInTheDocument();
});
it("неоплаченный штраф ведёт к оплате штрафов", async () => {
wrap("/fines/12");
await userEvent.click(await screen.findByRole("button", { name: /Оплатить штрафы/ }));