// // DateResolverTests.swift // PocheTests // // Author: Simon-Pierre Boucher // Contact: contact@spboucher.ai // import Foundation import Testing @testable import Poche struct DateResolverTests { private let now = Date(timeIntervalSince1970: 1_754_900_000) // 2025-08-11 ~08:13 UTC @Test func resolvesFutureISODateTime() throws { let date = try DateResolver.resolve(iso: "2030-05-10T14:30:00", now: now) let components = Calendar.current.dateComponents([.year, .hour, .minute], from: date) #expect(components.year == 2030) #expect(components.hour == 14) #expect(components.minute == 30) } @Test func bareDateDefaultsToNineLocal() throws { let date = try DateResolver.resolve(iso: "2030-05-10", now: now) let components = Calendar.current.dateComponents([.hour, .minute], from: date) #expect(components.hour == 9) #expect(components.minute == 0) } @Test func rejectsPastDate() { #expect(throws: DateResolutionError.self) { try DateResolver.resolve(iso: "2020-01-01T10:00:00", now: now) } } @Test func rejectsGarbage() { #expect(throws: DateResolutionError.self) { try DateResolver.resolve(iso: "mardi prochain", now: now) } } @Test func rejectsHostileInput() { #expect(throws: DateResolutionError.self) { try DateResolver.resolve(iso: "'; DROP TABLE reminders; --", now: now) } } @Test func rejectsUnreasonablyFarDate() { #expect(throws: DateResolutionError.self) { try DateResolver.resolve(iso: "2099-01-01T10:00:00", now: now) } } }