Christopher Hotchkiss Christopher Hotchkiss
Login

Code

remindwall / RWPureSwift / Tests / AppTypesTests / ReminderPartTests.swift

Back to remindwall — Current RemindWall

Download this file

import AppTypes
import Foundation
import Testing

@Test("Gen Early Late", arguments: [
    (ReminderPart(weekDay: .Sunday, hour: 0, minute: 0), ReminderPart(weekDay: .Saturday, hour: 22, minute: 0), ReminderPart(weekDay: .Sunday, hour: 4, minute: 0)),
    (ReminderPart(weekDay:.Sunday, hour: 12, minute: 0), ReminderPart(weekDay: .Sunday, hour: 10, minute: 0), ReminderPart(weekDay: .Sunday, hour: 16, minute: 0)),
    (ReminderPart(weekDay: .Saturday, hour: 23, minute: 55), ReminderPart(weekDay: .Saturday, hour: 21, minute: 55), ReminderPart(weekDay: .Sunday, hour: 3, minute: 55))
])
func generateEarlyLate(rt: ReminderPart, early: ReminderPart, late: ReminderPart){
    #expect(rt.earlyScan() == early)
    #expect(rt.lateReminder() == late)
}

@Test("Scan Window Tests", arguments: [
    //Simple Examples
    ("2025-11-15T21:30:00Z", ReminderPart(weekDay: .Sunday, hour: 0, minute: 0), false, false),
    ("2025-11-15T22:30:00Z", ReminderPart(weekDay: .Sunday, hour: 0, minute: 0), true, false),
    ("2025-11-15T23:30:00Z", ReminderPart(weekDay: .Sunday, hour: 0, minute: 0), true, false),
    ("2025-11-16T00:30:00Z", ReminderPart(weekDay: .Sunday, hour: 0, minute: 0), true, true),
    ("2025-11-16T01:30:00Z", ReminderPart(weekDay: .Sunday, hour: 0, minute: 0), true, true),
    ("2025-11-16T02:30:00Z", ReminderPart(weekDay: .Sunday, hour: 0, minute: 0), true, true),
    ("2025-11-16T03:30:00Z", ReminderPart(weekDay: .Sunday, hour: 0, minute: 0), true, true),
    ("2025-11-16T04:30:00Z", ReminderPart(weekDay: .Sunday, hour: 0, minute: 0), false, false),
    
    //Edge Cases
    ("2025-11-15T21:59:59Z", ReminderPart(weekDay: .Sunday, hour: 0, minute: 0), false, false),
    ("2025-11-15T22:00:00Z", ReminderPart(weekDay: .Sunday, hour: 0, minute: 0), true, false),
    ("2025-11-15T23:59:59Z", ReminderPart(weekDay: .Sunday, hour: 0, minute: 0), true, false),
    ("2025-11-16T00:00:00Z", ReminderPart(weekDay: .Sunday, hour: 0, minute: 0), true, true),
    ("2025-11-16T03:59:59Z", ReminderPart(weekDay: .Sunday, hour: 0, minute: 0), true, true),
    ("2025-11-16T04:00:00Z", ReminderPart(weekDay: .Sunday, hour: 0, minute: 0), false, false),
    ("2025-11-16T04:01:0Z", ReminderPart(weekDay: .Sunday, hour: 0, minute: 0), false, false),
])
func testScanWindows(timestamp: String, rt: ReminderPart, inScanWindow: Bool, inLateWindow: Bool) {
    let referenceDate = ISO8601DateFormatter().date(from: timestamp)!;
    var cal = Calendar(identifier: .gregorian)
    
    cal.timeZone = .gmt;
    #expect(rt.inScanWindow(asOf: referenceDate, calendar: cal) == inScanWindow)
    #expect(rt.inLateWindow(asOf: referenceDate, calendar: cal) == inLateWindow)
}