// ── Format & Time Blindness Tests ────────────────────────────── import XCTest @testable import ChronoMind final class FormatTests: XCTestCase { // MARK: - Format Duration func testFormatDurationZero() { XCTAssertEqual(formatDuration(0), "00:00") XCTAssertEqual(formatDuration(-5), "00:00") } func testFormatDurationSeconds() { XCTAssertEqual(formatDuration(30), "00:30") XCTAssertEqual(formatDuration(59), "00:59") } func testFormatDurationMinutes() { XCTAssertEqual(formatDuration(60), "01:00") XCTAssertEqual(formatDuration(90), "01:30") XCTAssertEqual(formatDuration(600), "10:00") XCTAssertEqual(formatDuration(1500), "25:00") } func testFormatDurationHours() { XCTAssertEqual(formatDuration(3600), "01:00:00") XCTAssertEqual(formatDuration(5400), "01:30:00") XCTAssertEqual(formatDuration(7200), "02:00:00") } // MARK: - Format Duration Compact func testFormatDurationCompactZero() { XCTAssertEqual(formatDurationCompact(0), "0s") XCTAssertEqual(formatDurationCompact(-1), "0s") } func testFormatDurationCompactSeconds() { XCTAssertEqual(formatDurationCompact(30), "30s") XCTAssertEqual(formatDurationCompact(59), "59s") } func testFormatDurationCompactMinutes() { XCTAssertEqual(formatDurationCompact(60), "1m") XCTAssertEqual(formatDurationCompact(150), "2m 30s") XCTAssertEqual(formatDurationCompact(600), "10m") XCTAssertEqual(formatDurationCompact(1500), "25m") } func testFormatDurationCompactHours() { XCTAssertEqual(formatDurationCompact(3600), "1h") XCTAssertEqual(formatDurationCompact(5400), "1h 30m") XCTAssertEqual(formatDurationCompact(7200), "2h") } // MARK: - Format Relative Time func testFormatRelativeTimeNow() { let now = Date() XCTAssertEqual(formatRelativeTime(now, now: now), "now") XCTAssertEqual(formatRelativeTime(now.addingTimeInterval(10), now: now), "now") } func testFormatRelativeTimeFuture() { let now = Date() let result = formatRelativeTime(now.addingTimeInterval(300), now: now) // 5 min XCTAssertTrue(result.hasPrefix("in ")) } func testFormatRelativeTimePast() { let now = Date() let result = formatRelativeTime(now.addingTimeInterval(-300), now: now) // 5 min ago XCTAssertTrue(result.hasSuffix(" ago")) } // MARK: - Time Blindness func testTimeReferenceZero() { XCTAssertNil(getTimeReference(minutes: 0)) XCTAssertNil(getTimeReference(minutes: -1)) } func testTimeReferenceShort() { let ref = getTimeReference(minutes: 1) XCTAssertNotNil(ref) XCTAssertTrue(ref!.contains("deep breath")) } func testTimeReferencePomodoro() { let ref = getTimeReference(minutes: 25) XCTAssertNotNil(ref) XCTAssertTrue(ref!.contains("Pomodoro")) } func testTimeReferenceLong() { let ref = getTimeReference(minutes: 90) XCTAssertNotNil(ref) XCTAssertTrue(ref!.contains("movie")) } func testTimeReferenceTooLong() { XCTAssertNil(getTimeReference(minutes: 1000)) } func testTimeReferenceFromSeconds() { let ref = getTimeReference(seconds: 1500) // 25 min XCTAssertNotNil(ref) XCTAssertTrue(ref!.contains("Pomodoro")) } }