brackt/app/lib/__tests__
Claude 75798d9711 Record final-placement points in the score-events ledger
qualifying_points (golf, tennis, CS2) and season_standings (F1) award all
of their points in one step at finalization, so they produce no per-match
deltas. recordMatchScoreEvents is bracket-only and fires from match
processing, which meant these sports were never written to
team_score_events at all and silently never appeared in Recent Scores.

Add recordFinalPlacementScoreEvents, called from finalizeQualifyingPoints
and processSeasonStandings. It writes one row per team at the ledger's
event-level grain, carrying that team's summed award and every
contributing participant, with points from calculatePickPoints so a tied
golfer contributes the same split award the standings show.

The row is anchored to a real scoring event rather than a null one: the
event-level unique index is (teamId, seasonId, scoringEventId) and
Postgres treats NULLs as distinct, so a null anchor would duplicate rows
on every re-finalization instead of upserting. When no anchor can be
resolved the ledger write is skipped, which leaves standings unaffected.

Adds regression coverage for the two screens that had diverged —
getTeamScoreBreakdown and computeCoronaStates — including an assertion
that the team page's actualPoints equals calculateTeamScore's totalPoints
for the same roster, and cases proving undrafted participants still count
toward a tie span.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019LZLF1PAfeKdpYog3NKtyz
2026-08-23 01:57:54 +00:00
..
bracket-layout.test.ts Only derive feeders where the halving rule actually holds 2026-08-21 18:18:05 +00:00
cloudinary-url.test.ts Add Cloudinary-backed avatar system (#385) 2026-05-06 14:47:37 -07:00
cloudinary.server.test.ts Add Cloudinary sports icon uploads (#393) 2026-05-07 16:07:34 -07:00
corona-states.test.ts Record final-placement points in the score-events ledger 2026-08-23 01:57:54 +00:00
date-utils.test.ts claude/practical-newton-4v041g (#98) 2026-06-18 02:33:05 +00:00
draft-eligibility.test.ts Show why a participant is ineligible to draft (#378) 2026-05-04 21:54:14 -07:00
draft-order.test.ts Fix draft order initialization for teams added mid-season (#449) 2026-05-19 18:22:47 -07:00
draft-timer.test.ts Extract chess clock presets to shared constant (#432) 2026-05-15 14:02:49 -07:00
email.server.test.ts Add branded dark-themed HTML email template (#402) 2026-05-10 11:18:57 -07:00
fifa-2026-bracket.test.ts Reflect group stage in World Cup sim; seed R32 from real 2026 bracket 2026-06-23 12:15:45 -07:00
flag-generator.test.ts Add Cloudinary-backed avatar system (#385) 2026-05-06 14:47:37 -07:00
normalize-team-name.test.ts Auto-populate & auto-score tennis Grand Slam brackets from Wikipedia 2026-06-26 21:48:00 -07:00
overnight-pause.test.ts Add overnight pause for draft timers (#335) 2026-04-26 22:31:52 -07:00
parse-results-text.test.ts feat: batch qualifying results entry (#290) 2026-04-12 14:52:22 -07:00
season-helpers.server.test.ts feat: add recharts library and implement PointProgressionChart component for historical views 2025-11-14 21:18:34 -08:00
sport-icon-url.test.ts Harden sport icon cleanup (#397) 2026-05-08 21:19:09 -07:00
standings-display.test.ts Show tied ranks with T prefix across standings and Discord (#239) 2026-03-27 20:45:15 -07:00
unmatched-team-reconciliation.test.ts Improve unmatched team reconciliation UX (#425) 2026-05-14 16:45:02 -07:00
utils.test.ts Fix oxlint warnings: no-shadow, consistent-function-scoping, no-non-null-assertion, and others (#196) 2026-03-21 10:59:51 -07:00