176 lines
5.6 KiB
Swift
176 lines
5.6 KiB
Swift
//
|
|
// AppSettingsTests.swift
|
|
// GazeTests
|
|
//
|
|
// Created by Mike Freno on 1/8/26.
|
|
//
|
|
|
|
import XCTest
|
|
@testable import Gaze
|
|
|
|
final class AppSettingsTests: XCTestCase {
|
|
|
|
func testDefaultSettings() {
|
|
let settings = AppSettings.defaults
|
|
|
|
XCTAssertTrue(settings.lookAwayTimer.enabled)
|
|
XCTAssertEqual(settings.lookAwayTimer.intervalSeconds, 20 * 60)
|
|
XCTAssertEqual(settings.lookAwayCountdownSeconds, 20)
|
|
|
|
XCTAssertFalse(settings.blinkTimer.enabled)
|
|
XCTAssertEqual(settings.blinkTimer.intervalSeconds, 7 * 60)
|
|
|
|
XCTAssertTrue(settings.postureTimer.enabled)
|
|
XCTAssertEqual(settings.postureTimer.intervalSeconds, 30 * 60)
|
|
|
|
XCTAssertFalse(settings.hasCompletedOnboarding)
|
|
XCTAssertFalse(settings.launchAtLogin)
|
|
XCTAssertTrue(settings.playSounds)
|
|
}
|
|
|
|
func testEquality() {
|
|
let settings1 = AppSettings.defaults
|
|
let settings2 = AppSettings.defaults
|
|
|
|
XCTAssertEqual(settings1, settings2)
|
|
}
|
|
|
|
func testInequalityWhenLookAwayTimerDiffers() {
|
|
var settings1 = AppSettings.defaults
|
|
var settings2 = AppSettings.defaults
|
|
|
|
settings2.lookAwayTimer.enabled = false
|
|
XCTAssertNotEqual(settings1, settings2)
|
|
|
|
settings2.lookAwayTimer.enabled = true
|
|
settings2.lookAwayTimer.intervalSeconds = 10 * 60
|
|
XCTAssertNotEqual(settings1, settings2)
|
|
}
|
|
|
|
func testInequalityWhenCountdownDiffers() {
|
|
var settings1 = AppSettings.defaults
|
|
var settings2 = AppSettings.defaults
|
|
|
|
settings2.lookAwayCountdownSeconds = 30
|
|
XCTAssertNotEqual(settings1, settings2)
|
|
}
|
|
|
|
func testInequalityWhenBlinkTimerDiffers() {
|
|
var settings1 = AppSettings.defaults
|
|
var settings2 = AppSettings.defaults
|
|
|
|
settings2.blinkTimer.enabled = true
|
|
XCTAssertNotEqual(settings1, settings2)
|
|
}
|
|
|
|
func testInequalityWhenPostureTimerDiffers() {
|
|
var settings1 = AppSettings.defaults
|
|
var settings2 = AppSettings.defaults
|
|
|
|
settings2.postureTimer.intervalSeconds = 60 * 60
|
|
XCTAssertNotEqual(settings1, settings2)
|
|
}
|
|
|
|
func testInequalityWhenOnboardingDiffers() {
|
|
var settings1 = AppSettings.defaults
|
|
var settings2 = AppSettings.defaults
|
|
|
|
settings2.hasCompletedOnboarding = true
|
|
XCTAssertNotEqual(settings1, settings2)
|
|
}
|
|
|
|
func testInequalityWhenLaunchAtLoginDiffers() {
|
|
var settings1 = AppSettings.defaults
|
|
var settings2 = AppSettings.defaults
|
|
|
|
settings2.launchAtLogin = true
|
|
XCTAssertNotEqual(settings1, settings2)
|
|
}
|
|
|
|
func testInequalityWhenPlaySoundsDiffers() {
|
|
var settings1 = AppSettings.defaults
|
|
var settings2 = AppSettings.defaults
|
|
|
|
settings2.playSounds = false
|
|
XCTAssertNotEqual(settings1, settings2)
|
|
}
|
|
|
|
func testCodableEncoding() throws {
|
|
let settings = AppSettings.defaults
|
|
let encoder = JSONEncoder()
|
|
let data = try encoder.encode(settings)
|
|
|
|
XCTAssertNotNil(data)
|
|
XCTAssertGreaterThan(data.count, 0)
|
|
}
|
|
|
|
func testCodableDecoding() throws {
|
|
let settings = AppSettings.defaults
|
|
let encoder = JSONEncoder()
|
|
let data = try encoder.encode(settings)
|
|
|
|
let decoder = JSONDecoder()
|
|
let decoded = try decoder.decode(AppSettings.self, from: data)
|
|
|
|
XCTAssertEqual(decoded, settings)
|
|
}
|
|
|
|
func testCodableRoundTripWithModifiedSettings() throws {
|
|
var settings = AppSettings.defaults
|
|
settings.lookAwayTimer.enabled = false
|
|
settings.lookAwayCountdownSeconds = 30
|
|
settings.blinkTimer.intervalSeconds = 10 * 60
|
|
settings.postureTimer.enabled = false
|
|
settings.hasCompletedOnboarding = true
|
|
settings.launchAtLogin = true
|
|
settings.playSounds = false
|
|
|
|
let encoder = JSONEncoder()
|
|
let data = try encoder.encode(settings)
|
|
|
|
let decoder = JSONDecoder()
|
|
let decoded = try decoder.decode(AppSettings.self, from: data)
|
|
|
|
XCTAssertEqual(decoded, settings)
|
|
XCTAssertFalse(decoded.lookAwayTimer.enabled)
|
|
XCTAssertEqual(decoded.lookAwayCountdownSeconds, 30)
|
|
XCTAssertEqual(decoded.blinkTimer.intervalSeconds, 10 * 60)
|
|
XCTAssertFalse(decoded.postureTimer.enabled)
|
|
XCTAssertTrue(decoded.hasCompletedOnboarding)
|
|
XCTAssertTrue(decoded.launchAtLogin)
|
|
XCTAssertFalse(decoded.playSounds)
|
|
}
|
|
|
|
func testMutability() {
|
|
var settings = AppSettings.defaults
|
|
|
|
settings.lookAwayTimer.enabled = false
|
|
XCTAssertFalse(settings.lookAwayTimer.enabled)
|
|
|
|
settings.lookAwayCountdownSeconds = 30
|
|
XCTAssertEqual(settings.lookAwayCountdownSeconds, 30)
|
|
|
|
settings.hasCompletedOnboarding = true
|
|
XCTAssertTrue(settings.hasCompletedOnboarding)
|
|
|
|
settings.launchAtLogin = true
|
|
XCTAssertTrue(settings.launchAtLogin)
|
|
|
|
settings.playSounds = false
|
|
XCTAssertFalse(settings.playSounds)
|
|
}
|
|
|
|
func testBoundaryValues() {
|
|
var settings = AppSettings.defaults
|
|
|
|
settings.lookAwayTimer.intervalSeconds = 0
|
|
XCTAssertEqual(settings.lookAwayTimer.intervalSeconds, 0)
|
|
|
|
settings.lookAwayCountdownSeconds = 0
|
|
XCTAssertEqual(settings.lookAwayCountdownSeconds, 0)
|
|
|
|
settings.lookAwayTimer.intervalSeconds = Int.max
|
|
XCTAssertEqual(settings.lookAwayTimer.intervalSeconds, Int.max)
|
|
}
|
|
}
|