fix: согласовать resource envelopes страницы счёта с backend-контрактом #72

Closed
opened 2026-10-13 14:22:46 +03:00 by codex-bot · 1 comment
Owner

После фиксов списков счетов, операций и портфеля AccountPage падает в toRecentEvents на events.data?.events.slice: backend возвращает {data,meta}, а frontend использует устаревшие плоские типы и fixtures. Та же страница запрашивает income-summary; проверить его контракт вместе с events. Acceptance criteria: запросы страницы счёта читают опубликованный response shape, data:null не маскируется пустыми событиями/доходами; для списка событий и всех потребителей query используются корректные данные, регрессионные сценарии ловят прежний crash; generated types получены из предоставленного backend OpenAPI snapshot, frontend verify зелёный. Preserve existing uncommitted work.

После фиксов списков счетов, операций и портфеля AccountPage падает в toRecentEvents на events.data?.events.slice: backend возвращает {data,meta}, а frontend использует устаревшие плоские типы и fixtures. Та же страница запрашивает income-summary; проверить его контракт вместе с events. Acceptance criteria: запросы страницы счёта читают опубликованный response shape, data:null не маскируется пустыми событиями/доходами; для списка событий и всех потребителей query используются корректные данные, регрессионные сценарии ловят прежний crash; generated types получены из предоставленного backend OpenAPI snapshot, frontend verify зелёный. Preserve existing uncommitted work.
Author
Owner

Поведенческая часть уже на develop, недостающие регрессионные тесты добавлены: PR #79.

  • Запросы событий и дохода читают опубликованный response shape: useBrokerageEvents, useIncomeSummary, useIncomeAnalytics идут через useResourceQuery (проекция data/meta, src/shared/api/resource-query.ts:130), типы — из snapshot; openapi:check зелёный, generated types не правились вручную.
  • data:null не маскируется пустыми событиями/доходами: AccountEventsPage.vm:34 и AccountIncomePage.vm:29 возвращают loading/error до разыменования, toRecentEvents/toIncomeSummary (src/pages/account/model/previews.ts) — loading, а не empty.
  • Фикстуры событий/дохода уже в {data, meta} (src/test/handlers.ts).
  • В PR #79: три теста — AccountPage (events + income-summary resource(null) → превью в загрузке, прежний краш events.data?.events.slice не воспроизводится), AccountEventsPage (data:null → загрузка, не пустой период), AccountIncomePage (resource(null) → загрузка, не пустой отчёт).

Mutation-проверка: отказ проекции data валит 25 тестов, включая новые. Проверки: typecheck, eslint, 429 тестов — зелёные.

Поведенческая часть уже на `develop`, недостающие регрессионные тесты добавлены: PR #79. - Запросы событий и дохода читают опубликованный response shape: `useBrokerageEvents`, `useIncomeSummary`, `useIncomeAnalytics` идут через `useResourceQuery` (проекция `data`/`meta`, src/shared/api/resource-query.ts:130), типы — из snapshot; `openapi:check` зелёный, generated types не правились вручную. - `data:null` не маскируется пустыми событиями/доходами: `AccountEventsPage.vm:34` и `AccountIncomePage.vm:29` возвращают loading/error до разыменования, `toRecentEvents`/`toIncomeSummary` (src/pages/account/model/previews.ts) — loading, а не empty. - Фикстуры событий/дохода уже в `{data, meta}` (`src/test/handlers.ts`). - В PR #79: три теста — AccountPage (events + income-summary `resource(null)` → превью в загрузке, прежний краш `events.data?.events.slice` не воспроизводится), AccountEventsPage (`data:null` → загрузка, не пустой период), AccountIncomePage (`resource(null)` → загрузка, не пустой отчёт). Mutation-проверка: отказ проекции `data` валит 25 тестов, включая новые. Проверки: `typecheck`, `eslint`, 429 тестов — зелёные.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WealthLedger/frontend#72