125 lines
4.0 KiB
Swift
125 lines
4.0 KiB
Swift
//
|
|
// TimerConfigurationTests.swift
|
|
// GazeTests
|
|
//
|
|
// Created by Mike Freno on 1/8/26.
|
|
//
|
|
|
|
import XCTest
|
|
@testable import Gaze
|
|
|
|
final class TimerConfigurationTests: XCTestCase {
|
|
|
|
func testInitialization() {
|
|
let config = TimerConfiguration(enabled: true, intervalSeconds: 1200)
|
|
|
|
XCTAssertTrue(config.enabled)
|
|
XCTAssertEqual(config.intervalSeconds, 1200)
|
|
}
|
|
|
|
func testInitializationDisabled() {
|
|
let config = TimerConfiguration(enabled: false, intervalSeconds: 600)
|
|
|
|
XCTAssertFalse(config.enabled)
|
|
XCTAssertEqual(config.intervalSeconds, 600)
|
|
}
|
|
|
|
func testIntervalMinutesGetter() {
|
|
let config = TimerConfiguration(enabled: true, intervalSeconds: 1200)
|
|
XCTAssertEqual(config.intervalMinutes, 20)
|
|
}
|
|
|
|
func testIntervalMinutesSetter() {
|
|
var config = TimerConfiguration(enabled: true, intervalSeconds: 0)
|
|
config.intervalMinutes = 15
|
|
|
|
XCTAssertEqual(config.intervalMinutes, 15)
|
|
XCTAssertEqual(config.intervalSeconds, 900)
|
|
}
|
|
|
|
func testIntervalMinutesConversion() {
|
|
var config = TimerConfiguration(enabled: true, intervalSeconds: 0)
|
|
|
|
config.intervalMinutes = 1
|
|
XCTAssertEqual(config.intervalSeconds, 60)
|
|
|
|
config.intervalMinutes = 60
|
|
XCTAssertEqual(config.intervalSeconds, 3600)
|
|
|
|
config.intervalMinutes = 0
|
|
XCTAssertEqual(config.intervalSeconds, 0)
|
|
}
|
|
|
|
func testEquality() {
|
|
let config1 = TimerConfiguration(enabled: true, intervalSeconds: 1200)
|
|
let config2 = TimerConfiguration(enabled: true, intervalSeconds: 1200)
|
|
let config3 = TimerConfiguration(enabled: false, intervalSeconds: 1200)
|
|
let config4 = TimerConfiguration(enabled: true, intervalSeconds: 600)
|
|
|
|
XCTAssertEqual(config1, config2)
|
|
XCTAssertNotEqual(config1, config3)
|
|
XCTAssertNotEqual(config1, config4)
|
|
}
|
|
|
|
func testCodableEncoding() throws {
|
|
let config = TimerConfiguration(enabled: true, intervalSeconds: 1200)
|
|
let encoder = JSONEncoder()
|
|
let data = try encoder.encode(config)
|
|
|
|
XCTAssertNotNil(data)
|
|
XCTAssertGreaterThan(data.count, 0)
|
|
}
|
|
|
|
func testCodableDecoding() throws {
|
|
let config = TimerConfiguration(enabled: true, intervalSeconds: 1200)
|
|
let encoder = JSONEncoder()
|
|
let data = try encoder.encode(config)
|
|
|
|
let decoder = JSONDecoder()
|
|
let decoded = try decoder.decode(TimerConfiguration.self, from: data)
|
|
|
|
XCTAssertEqual(decoded, config)
|
|
}
|
|
|
|
func testCodableRoundTrip() throws {
|
|
let configs = [
|
|
TimerConfiguration(enabled: true, intervalSeconds: 300),
|
|
TimerConfiguration(enabled: false, intervalSeconds: 1200),
|
|
TimerConfiguration(enabled: true, intervalSeconds: 1800),
|
|
TimerConfiguration(enabled: false, intervalSeconds: 0)
|
|
]
|
|
|
|
let encoder = JSONEncoder()
|
|
let decoder = JSONDecoder()
|
|
|
|
for config in configs {
|
|
let data = try encoder.encode(config)
|
|
let decoded = try decoder.decode(TimerConfiguration.self, from: data)
|
|
XCTAssertEqual(decoded, config)
|
|
}
|
|
}
|
|
|
|
func testMutability() {
|
|
var config = TimerConfiguration(enabled: true, intervalSeconds: 1200)
|
|
|
|
config.enabled = false
|
|
XCTAssertFalse(config.enabled)
|
|
|
|
config.intervalSeconds = 600
|
|
XCTAssertEqual(config.intervalSeconds, 600)
|
|
XCTAssertEqual(config.intervalMinutes, 10)
|
|
}
|
|
|
|
func testZeroInterval() {
|
|
let config = TimerConfiguration(enabled: true, intervalSeconds: 0)
|
|
XCTAssertEqual(config.intervalSeconds, 0)
|
|
XCTAssertEqual(config.intervalMinutes, 0)
|
|
}
|
|
|
|
func testLargeInterval() {
|
|
let config = TimerConfiguration(enabled: true, intervalSeconds: 86400)
|
|
XCTAssertEqual(config.intervalSeconds, 86400)
|
|
XCTAssertEqual(config.intervalMinutes, 1440)
|
|
}
|
|
}
|