Audit and fix 52 test correctness issues across 22 files

Systematic audit of 1,191 tests found tests written to pass rather than
verify correctness. Key fixes:

Infrastructure:
- TestClock: fixed timezone from .current to America/New_York (deterministic)
- TestFixtures: added 1.3x road routing factor to match production
- ItineraryTestHelpers: real per-city coordinates instead of hardcoded (40,-80)

Planning tests:
- Added missing Scenario E factory dispatch tests
- Tightened 12 loose assertions (>= 1 → == 8.0, > 0 → range checks)
- Fixed 4 no-op tests that accepted both success and failure
- Fixed wrong repeat-city invariant (was checking same-day, not different-day)
- Fixed tautological assertion in missing-stadium edge case

Services/Domain/Export tests:
- Replaced 4 placeholder tests (#expect(true)) with real assertions
- Fixed tautological assertions in POISearchServiceTests
- Fixed Chicago coordinate in RegionMapSelectorTests (-89 → -87.6553)
- Added sort order verification to ItineraryRowFlatteningTests

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Trey T
2026-04-04 23:00:46 -05:00
parent 9b622f8bbb
commit a6f538dfed
23 changed files with 265 additions and 109 deletions

View File

@@ -32,21 +32,19 @@ struct GameTests {
@Test("gameDate returns start of day for dateTime")
func gameDate_returnsStartOfDay() {
let calendar = TestClock.calendar
// Game at 7:05 PM
let dateTime = calendar.date(from: DateComponents(
year: 2026, month: 6, day: 15,
hour: 19, minute: 5, second: 0
))!
// Use TestFixtures.date which creates dates at 7:05 PM EST safely same
// calendar day in any US timezone when interpreted by Calendar.current.
let dateTime = TestFixtures.date(year: 2026, month: 6, day: 15, hour: 19, minute: 5)
let game = makeGame(dateTime: dateTime)
let expectedStart = calendar.startOfDay(for: dateTime)
// Production gameDate uses Calendar.current, so assert with the same calendar
let systemCalendar = Calendar.current
let expectedStart = systemCalendar.startOfDay(for: dateTime)
#expect(game.gameDate == expectedStart)
// Verify it's at midnight
let components = calendar.dateComponents([.hour, .minute, .second], from: game.gameDate)
// Verify it's at midnight in the system calendar
let components = systemCalendar.dateComponents([.hour, .minute, .second], from: game.gameDate)
#expect(components.hour == 0)
#expect(components.minute == 0)
#expect(components.second == 0)
@@ -166,16 +164,17 @@ struct GameTests {
@Test("Invariant: gameDate is always at midnight")
func invariant_gameDateAtMidnight() {
let calendar = TestClock.calendar
// Test various times throughout the day
let times = [0, 6, 12, 18, 23].map { hour in
calendar.date(from: DateComponents(year: 2026, month: 6, day: 15, hour: hour))!
// Production gameDate uses Calendar.current, so create dates and assert
// with Calendar.current to avoid cross-timezone mismatches.
// Use TestFixtures.date (7pm EST default) to ensure same calendar day in any US tz.
let times = [8, 12, 15, 19, 22].map { hour in
TestFixtures.date(year: 2026, month: 6, day: 15, hour: hour)
}
let systemCalendar = Calendar.current
for time in times {
let game = makeGame(dateTime: time)
let components = calendar.dateComponents([.hour, .minute, .second], from: game.gameDate)
let components = systemCalendar.dateComponents([.hour, .minute, .second], from: game.gameDate)
#expect(components.hour == 0, "gameDate hour should be 0")
#expect(components.minute == 0, "gameDate minute should be 0")
#expect(components.second == 0, "gameDate second should be 0")