test: cover portfolio publish rollback and claim fence (WealthLedger/backend#105) #146

Merged
codex-bot merged 1 commits from test/105-portfolio-publish-rollback into develop 2026-10-28 21:10:51 +03:00
Owner

Summary

Integration-тесты на PortfolioRepository.publish: откат транзакции при сбое посреди записи и защита от устаревшей попытки (claimed fence). Сбой внедряется через jest.spyOn(prisma, '$transaction'), как решил владелец в Issue.

Linked Issue

Refs WealthLedger/backend#105

Changes

  • Только test/tbank-portfolio-publish.e2e-spec.ts; production-код не изменён.
  • Rollback: snapshot с RUB и USD; первая tbankPortfolioValuePoint.upsert проходит в БД, вторая падает. Проверяется по SQLite: snapshot, fetchedAt, dataRevision прежние, новых points нет, work остался running.
  • Claimed fence на реальной БД без spy: устаревший attemptId, work в complete, invalidToken: true → publish() === false, ничего не записано.
  • Фикстуры типизированы через satisfies PortfolioDto.

Verification

  • Мутанты (откачены): запись point до транзакции → rollback-тест падает; удалён if (!claimed.count) → claimed-тесты падают; удалён attemptId из CAS where → stale-тест падает.
  • Целевой суит 3 раза подряд (5/5); npm run test:e2e, npm run lint, npm run typecheck:test — зелёные.
  • Независимый review: замечания (ложная зелёность по points, claimed через spy) исправлены.
## Summary Integration-тесты на `PortfolioRepository.publish`: откат транзакции при сбое посреди записи и защита от устаревшей попытки (claimed fence). Сбой внедряется через `jest.spyOn(prisma, '$transaction')`, как решил владелец в Issue. ## Linked Issue Refs WealthLedger/backend#105 ## Changes - Только `test/tbank-portfolio-publish.e2e-spec.ts`; production-код не изменён. - Rollback: snapshot с RUB и USD; первая `tbankPortfolioValuePoint.upsert` проходит в БД, вторая падает. Проверяется по SQLite: snapshot, `fetchedAt`, `dataRevision` прежние, новых points нет, work остался `running`. - Claimed fence на реальной БД без spy: устаревший `attemptId`, work в `complete`, `invalidToken: true` → `publish() === false`, ничего не записано. - Фикстуры типизированы через `satisfies PortfolioDto`. ## Verification - Мутанты (откачены): запись point до транзакции → rollback-тест падает; удалён `if (!claimed.count)` → claimed-тесты падают; удалён `attemptId` из CAS `where` → stale-тест падает. - Целевой суит 3 раза подряд (5/5); `npm run test:e2e`, `npm run lint`, `npm run typecheck:test` — зелёные. - Независимый review: замечания (ложная зелёность по points, claimed через spy) исправлены.
ksv741 added 1 commit 2026-10-28 20:55:39 +03:00
test: cover portfolio publish rollback and claim fence (WealthLedger/backend#105)
Backend verify / commits (pull_request) Successful in 37s
Backend verify / security (pull_request) Successful in 11s
Backend verify / verify (pull_request) Successful in 5m28s
c1a78fc240
ksv741 force-pushed test/105-portfolio-publish-rollback from e7827dcac6 to c1a78fc240 2026-10-28 20:55:39 +03:00 Compare
codex-bot merged commit e350146749 into develop 2026-10-28 21:10:51 +03:00
codex-bot deleted branch test/105-portfolio-publish-rollback 2026-10-28 21:10:51 +03:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WealthLedger/backend#146