general: test redux

This commit is contained in:
Michael Freno
2026-01-15 15:37:42 -05:00
parent 80edfa8e06
commit 9c6bdaed6a
23 changed files with 2452 additions and 35 deletions

View File

@@ -0,0 +1,76 @@
//
// BlinkSetupViewTests.swift
// GazeTests
//
// Tests for BlinkSetupView component.
//
import SwiftUI
import XCTest
@testable import Gaze
@MainActor
final class BlinkSetupViewTests: XCTestCase {
var testEnv: TestEnvironment!
override func setUp() async throws {
testEnv = TestEnvironment()
}
override func tearDown() async throws {
testEnv = nil
}
func testBlinkSetupInitialization() {
let view = BlinkSetupView(
settingsManager: testEnv.settingsManager as! SettingsManager
)
XCTAssertNotNil(view)
}
func testBlinkTimerConfigurationChanges() {
let initial = testEnv.settingsManager.timerConfiguration(for: .blink)
var modified = initial
modified.enabled = true
modified.intervalSeconds = 300
testEnv.settingsManager.updateTimerConfiguration(for: .blink, configuration: modified)
let updated = testEnv.settingsManager.timerConfiguration(for: .blink)
XCTAssertTrue(updated.enabled)
XCTAssertEqual(updated.intervalSeconds, 300)
}
func testBlinkTimerEnableDisable() {
var config = testEnv.settingsManager.timerConfiguration(for: .blink)
config.enabled = true
testEnv.settingsManager.updateTimerConfiguration(for: .blink, configuration: config)
XCTAssertTrue(testEnv.settingsManager.timerConfiguration(for: .blink).enabled)
config.enabled = false
testEnv.settingsManager.updateTimerConfiguration(for: .blink, configuration: config)
XCTAssertFalse(testEnv.settingsManager.timerConfiguration(for: .blink).enabled)
}
func testBlinkIntervalValidation() {
var config = testEnv.settingsManager.timerConfiguration(for: .blink)
let intervals = [180, 240, 300, 360, 600]
for interval in intervals {
config.intervalSeconds = interval
testEnv.settingsManager.updateTimerConfiguration(for: .blink, configuration: config)
let retrieved = testEnv.settingsManager.timerConfiguration(for: .blink)
XCTAssertEqual(retrieved.intervalSeconds, interval)
}
}
func testBlinkAccessibilityIdentifier() {
XCTAssertEqual(
AccessibilityIdentifiers.Onboarding.blinkPage,
"onboarding.page.blink"
)
}
}

View File

@@ -0,0 +1,26 @@
//
// CompletionViewTests.swift
// GazeTests
//
// Tests for CompletionView component.
//
import SwiftUI
import XCTest
@testable import Gaze
@MainActor
final class CompletionViewTests: XCTestCase {
func testCompletionViewInitialization() {
let view = CompletionView()
XCTAssertNotNil(view)
}
func testCompletionAccessibilityIdentifier() {
XCTAssertEqual(
AccessibilityIdentifiers.Onboarding.completionPage,
"onboarding.page.completion"
)
}
}

View File

@@ -0,0 +1,74 @@
//
// GeneralSetupViewTests.swift
// GazeTests
//
// Tests for GeneralSetupView component.
//
import SwiftUI
import XCTest
@testable import Gaze
@MainActor
final class GeneralSetupViewTests: XCTestCase {
var testEnv: TestEnvironment!
override func setUp() async throws {
testEnv = TestEnvironment()
}
override func tearDown() async throws {
testEnv = nil
}
func testGeneralSetupInitialization() {
let view = GeneralSetupView(
settingsManager: testEnv.settingsManager as! SettingsManager,
isOnboarding: true
)
XCTAssertNotNil(view)
}
func testPlaySoundsToggle() {
// Initial state
let initial = testEnv.settingsManager.settings.playSounds
// Toggle on
testEnv.settingsManager.settings.playSounds = true
XCTAssertTrue(testEnv.settingsManager.settings.playSounds)
// Toggle off
testEnv.settingsManager.settings.playSounds = false
XCTAssertFalse(testEnv.settingsManager.settings.playSounds)
}
func testLaunchAtLoginToggle() {
// Toggle on
testEnv.settingsManager.settings.launchAtLogin = true
XCTAssertTrue(testEnv.settingsManager.settings.launchAtLogin)
// Toggle off
testEnv.settingsManager.settings.launchAtLogin = false
XCTAssertFalse(testEnv.settingsManager.settings.launchAtLogin)
}
func testMultipleSettingsConfiguration() {
testEnv.settingsManager.settings.playSounds = true
testEnv.settingsManager.settings.launchAtLogin = true
XCTAssertTrue(testEnv.settingsManager.settings.playSounds)
XCTAssertTrue(testEnv.settingsManager.settings.launchAtLogin)
testEnv.settingsManager.settings.playSounds = false
XCTAssertFalse(testEnv.settingsManager.settings.playSounds)
XCTAssertTrue(testEnv.settingsManager.settings.launchAtLogin)
}
func testGeneralAccessibilityIdentifier() {
XCTAssertEqual(
AccessibilityIdentifiers.Onboarding.generalPage,
"onboarding.page.general"
)
}
}

View File

@@ -0,0 +1,82 @@
//
// LookAwaySetupViewTests.swift
// GazeTests
//
// Tests for LookAwaySetupView component.
//
import SwiftUI
import XCTest
@testable import Gaze
@MainActor
final class LookAwaySetupViewTests: XCTestCase {
var testEnv: TestEnvironment!
override func setUp() async throws {
testEnv = TestEnvironment()
}
override func tearDown() async throws {
testEnv = nil
}
func testLookAwaySetupInitialization() {
let view = LookAwaySetupView(
settingsManager: testEnv.settingsManager as! SettingsManager
)
XCTAssertNotNil(view)
}
func testLookAwayTimerConfigurationChanges() {
// Start with default
let initial = testEnv.settingsManager.timerConfiguration(for: .lookAway)
// Modify configuration
var modified = initial
modified.enabled = true
modified.intervalSeconds = 1500
testEnv.settingsManager.updateTimerConfiguration(for: .lookAway, configuration: modified)
// Verify changes
let updated = testEnv.settingsManager.timerConfiguration(for: .lookAway)
XCTAssertTrue(updated.enabled)
XCTAssertEqual(updated.intervalSeconds, 1500)
}
func testLookAwayTimerEnableDisable() {
var config = testEnv.settingsManager.timerConfiguration(for: .lookAway)
// Enable
config.enabled = true
testEnv.settingsManager.updateTimerConfiguration(for: .lookAway, configuration: config)
XCTAssertTrue(testEnv.settingsManager.timerConfiguration(for: .lookAway).enabled)
// Disable
config.enabled = false
testEnv.settingsManager.updateTimerConfiguration(for: .lookAway, configuration: config)
XCTAssertFalse(testEnv.settingsManager.timerConfiguration(for: .lookAway).enabled)
}
func testLookAwayIntervalValidation() {
var config = testEnv.settingsManager.timerConfiguration(for: .lookAway)
// Test various intervals
let intervals = [300, 600, 1200, 1800, 3600]
for interval in intervals {
config.intervalSeconds = interval
testEnv.settingsManager.updateTimerConfiguration(for: .lookAway, configuration: config)
let retrieved = testEnv.settingsManager.timerConfiguration(for: .lookAway)
XCTAssertEqual(retrieved.intervalSeconds, interval)
}
}
func testLookAwayAccessibilityIdentifier() {
XCTAssertEqual(
AccessibilityIdentifiers.Onboarding.lookAwayPage,
"onboarding.page.lookAway"
)
}
}

View File

@@ -0,0 +1,76 @@
//
// PostureSetupViewTests.swift
// GazeTests
//
// Tests for PostureSetupView component.
//
import SwiftUI
import XCTest
@testable import Gaze
@MainActor
final class PostureSetupViewTests: XCTestCase {
var testEnv: TestEnvironment!
override func setUp() async throws {
testEnv = TestEnvironment()
}
override func tearDown() async throws {
testEnv = nil
}
func testPostureSetupInitialization() {
let view = PostureSetupView(
settingsManager: testEnv.settingsManager as! SettingsManager
)
XCTAssertNotNil(view)
}
func testPostureTimerConfigurationChanges() {
let initial = testEnv.settingsManager.timerConfiguration(for: .posture)
var modified = initial
modified.enabled = true
modified.intervalSeconds = 1800
testEnv.settingsManager.updateTimerConfiguration(for: .posture, configuration: modified)
let updated = testEnv.settingsManager.timerConfiguration(for: .posture)
XCTAssertTrue(updated.enabled)
XCTAssertEqual(updated.intervalSeconds, 1800)
}
func testPostureTimerEnableDisable() {
var config = testEnv.settingsManager.timerConfiguration(for: .posture)
config.enabled = true
testEnv.settingsManager.updateTimerConfiguration(for: .posture, configuration: config)
XCTAssertTrue(testEnv.settingsManager.timerConfiguration(for: .posture).enabled)
config.enabled = false
testEnv.settingsManager.updateTimerConfiguration(for: .posture, configuration: config)
XCTAssertFalse(testEnv.settingsManager.timerConfiguration(for: .posture).enabled)
}
func testPostureIntervalValidation() {
var config = testEnv.settingsManager.timerConfiguration(for: .posture)
let intervals = [900, 1200, 1800, 2400, 3600]
for interval in intervals {
config.intervalSeconds = interval
testEnv.settingsManager.updateTimerConfiguration(for: .posture, configuration: config)
let retrieved = testEnv.settingsManager.timerConfiguration(for: .posture)
XCTAssertEqual(retrieved.intervalSeconds, interval)
}
}
func testPostureAccessibilityIdentifier() {
XCTAssertEqual(
AccessibilityIdentifiers.Onboarding.posturePage,
"onboarding.page.posture"
)
}
}

View File

@@ -0,0 +1,28 @@
//
// WelcomeViewTests.swift
// GazeTests
//
// Tests for WelcomeView component.
//
import SwiftUI
import XCTest
@testable import Gaze
@MainActor
final class WelcomeViewTests: XCTestCase {
func testWelcomeViewInitialization() {
let view = WelcomeView()
XCTAssertNotNil(view)
}
func testWelcomeViewHasAccessibilityIdentifier() {
// Welcome view should have proper accessibility identifier
// This is a structural test - in real app, verify the view has the identifier
XCTAssertEqual(
AccessibilityIdentifiers.Onboarding.welcomePage,
"onboarding.page.welcome"
)
}
}