[CL-COVTESTS2] test(api): branch-покрытие webhook/worker/buyback (batch 2) #434
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/claude-cl-branch-coverage2-20260607"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что сделано
Batch 2 branch-coverage hunt (lane #3, продолжение PR #416). Только тесты — production-код не тронут.
api/src/services/premiumSubscription.webhook.service.tsapi/src/workers/recurring-invest.worker.tsapi/src/services/buyback.service.tsИтого +90 branches на Stripe-webhook / recurring-worker / buyback money путях.
premiumSubscription.webhook.service.ts (нет webhook-теста был)
Все 5 Stripe event cases:
checkout.session.completed(mode/product filter, missing-metadata, subscription/customer string vs object, periodEnd null),customer.subscription.updated(determinePlan price-id BASIC/PRO + unit_amount fallback + FREE, status-map hit/default, cancel_at_period_end),customer.subscription.deleted,invoice.payment_failed(parentSub string/object/null, sub-not-found), default unhandled. Env price-id константы выставлены вvi.hoistedдо импорта модуля.recurring-invest.worker.ts
guard-skips (room not found, risk not acked, sharePrice<=0, shares<=0, no record, advanced.count===0), WEEKLY vs MONTHLY schedule, non-balance rethrow (без audit), failed-handler (transient/DLQ/Sentry/alert/DLQ-throw/not-exhausted), error handler.
buyback.service.ts
sellToPlatforminput guards + tx guards (locked, no-shares, room-not-found, orphaned-room, frozen, zero-price, insufficient-liquidity, happy settlement+burn),validateBuybackQuote(missing/mismatch/valid),getBuybackQuote(room/frozen/insufficient/happy).$transactionmock с SQL-routed$queryRaw(по содержимому SQL, не порядку вызова).Зачем
Продолжение coverage-hunt из PR #416 (audit residual #3, branch 70.88%). Coverage-summary.json выявил эти файлы как настоящие низко-покрытые financial-модули. Непокрытые webhook/worker/tx-guard ветки = регрессии в idempotency/error/race не ловятся до прода.
План тестирования
npx vitest run— 9894 passed, 0 регрессий.npx tsc --noEmitclean;npx eslint src --max-warnings 0на изменённых clean.Где могу ошибаться
|| ''defaults в premium (5 веток, env-misconfig only), recurring line 224 + buyback line 251 (fire-and-forget.catchcallbacks). Low-value safety-края.onmock + SQL-routed$queryRaw— robust к порядку, но завязаны на текущий набор SQL-запросов в buyback (при добавлении нового FOR UPDATE с 'balance::text'/'share_ownerships' router нужно обновить).admin-merge reason: solo-dev (Rule 103.1)
local-review: Agent(code-reviewer) — 0 CRITICAL, 2 HIGH + 3 MED + 3 LOW, ключевые findings addressed в
1b9721495(price-id non-fallback unit_amount, rethrow logAudit-not-called assert, MONTHLY month assert, orphaned-room test, FAR_FUTURE анти-flake)copilot-review: бот отсутствует на Forgejo → fallback на local code-reviewer (Rule 103.1)
scope: test-only, production-код не тронут
evidence: GitNexus context sellToPlatform (buyback.service.ts:70-272) + full suite 9894 passed