BillTracker/tests
null 543e94288e refactor(routes): throw-pattern for payments + subscriptions
Standards-unification batch 2. All inline 4xx bodies and try/catch-500
wrappers converted to thrown ApiError factories; validation helpers
(parseYearMonth, getAutopaySuggestionContext, rejectTransactionLinkedPayment)
now throw. Client-visible codes preserved (TRANSACTION_PAYMENT_LOCKED,
NOT_AUTO_MATCH, NO_TRANSACTION, RECLASSIFY_ONLY_SYNC, DUPLICATE_ERROR,
NO_DEBTS). Kills five more err.message-on-500 leaks in subscriptions.cts
(search/decline/catalog/descriptor wrappers).

Two deliberate exceptions, documented inline:
- payments POST / keeps the hand-rolled DUPLICATE_SUSPECTED 409 (carries the
  'existing' payment payload the client's add-anyway flow reads)
- subscriptions /recommendations/create keeps 400-parity pass-through of
  service validation messages via an ApiError wrap

Test harnesses (paymentsRoute, transactionMatchService) mirror the terminal
handler for thrown errors. Server suite 252/252.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 16:53:20 -05:00
..
amountSuggestionService.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
analyticsService.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
authLoginWebauthnRoute.test.js fix(auth): handle requires_webauthn in POST /login — was a 500 self-lockout 2026-07-10 16:29:08 -05:00
authService.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
backupAndCleanup.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
bankSyncService.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
billMerchantRuleService.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
billReorder.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
billsDeletedRoute.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
billsService.test.js refactor(server): migrate billsService + notificationService to TypeScript (.cts) 2026-07-06 11:12:06 -05:00
calendarFeedService.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
categoryGroups.test.js refactor(routes): categories → uniform Express-5 throw pattern (Pillar B template) 2026-07-06 14:46:32 -05:00
categoryReorder.test.js refactor(routes): categories → uniform Express-5 throw pattern (Pillar B template) 2026-07-06 14:46:32 -05:00
csvTransactionImportService.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
encryptionService.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
eraseUserData.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
exportImportRoundTrip.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
exportRicher.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
kyselyPoc.test.js feat(db): Kysely typed-SQL POC — sync builder, proven parity (Pillar E) 2026-07-06 16:23:50 -05:00
logger.test.js feat(logging): redacted, level-gated logger; migrate all server console.* (Pillar D) 2026-07-06 16:05:18 -05:00
migrationModules.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
money.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
moneyProperties.test.js test(money): property-based proof of cent-exact invariants (fast-check, Pillar F) 2026-07-06 16:08:50 -05:00
notificationDelivery.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
notificationLeadTime.test.js refactor(server): migrate billsService + notificationService to TypeScript (.cts) 2026-07-06 11:12:06 -05:00
ofxImportService.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
paymentAccountingService.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
paymentValidation.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
paymentsQuickRoute.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
paymentsRoute.test.js refactor(routes): throw-pattern for payments + subscriptions 2026-07-10 16:53:20 -05:00
profileRoute.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
reconciliation.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
safeToSpend.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
securityCoverage.test.js feat(security): CI secret-scan + dep-audit, SECURITY.md, auth-coverage test (Pillar C) 2026-07-06 14:40:17 -05:00
seedDemoData.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
snowballMath.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
snowballPlanRoute.test.js refactor(routes): throw-pattern for summary, matches, snowball, dataSources 2026-07-10 16:44:19 -05:00
spendingService.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
spendingSummary.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
statusService.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
subscriptionService.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
summaryBankTracking.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
summarySkipOverride.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
totpService.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
trackerService.test.js refactor(routes): analytics + tracker → throw pattern (batch 1) 2026-07-06 14:59:29 -05:00
transactionMatchService.test.js refactor(routes): throw-pattern for payments + subscriptions 2026-07-10 16:53:20 -05:00
transactionMatchState.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
updateCheckOptOut.test.js style: apply Prettier across client + server (no behavior change) 2026-07-06 14:23:53 -05:00
versionSync.test.js fix(version): sync package.json to v0.41.0 + guard against future drift 2026-07-10 16:30:41 -05:00