trash
This commit is contained in:
@@ -1,211 +0,0 @@
|
||||
//
|
||||
// EnforceModeServiceTests.swift
|
||||
// GazeTests
|
||||
//
|
||||
// Unit tests for EnforceModeService.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
@testable import Gaze
|
||||
|
||||
@MainActor
|
||||
final class EnforceModeServiceTests: XCTestCase {
|
||||
|
||||
var service: EnforceModeService!
|
||||
|
||||
override func setUp() async throws {
|
||||
service = EnforceModeService.shared
|
||||
}
|
||||
|
||||
override func tearDown() async throws {
|
||||
service.disableEnforceMode()
|
||||
service = nil
|
||||
}
|
||||
|
||||
// MARK: - Initialization Tests
|
||||
|
||||
func testServiceInitialization() {
|
||||
XCTAssertNotNil(service)
|
||||
}
|
||||
|
||||
func testInitialState() {
|
||||
XCTAssertFalse(service.isEnforceModeEnabled)
|
||||
XCTAssertFalse(service.isCameraActive)
|
||||
XCTAssertFalse(service.userCompliedWithBreak)
|
||||
}
|
||||
|
||||
// MARK: - Enable/Disable Tests
|
||||
|
||||
func testEnableEnforceMode() async {
|
||||
await service.enableEnforceMode()
|
||||
|
||||
// May or may not be enabled depending on camera permissions
|
||||
// Just verify the method doesn't crash
|
||||
XCTAssertNotNil(service)
|
||||
}
|
||||
|
||||
func testDisableEnforceMode() {
|
||||
service.disableEnforceMode()
|
||||
|
||||
XCTAssertFalse(service.isEnforceModeEnabled)
|
||||
XCTAssertFalse(service.isCameraActive)
|
||||
}
|
||||
|
||||
func testEnableDisableCycle() async {
|
||||
await service.enableEnforceMode()
|
||||
service.disableEnforceMode()
|
||||
|
||||
XCTAssertFalse(service.isEnforceModeEnabled)
|
||||
}
|
||||
|
||||
// MARK: - Timer Engine Integration Tests
|
||||
|
||||
func testSetTimerEngine() {
|
||||
let testEnv = TestEnvironment()
|
||||
let timerEngine = testEnv.container.timerEngine
|
||||
|
||||
service.setTimerEngine(timerEngine)
|
||||
|
||||
// Should not crash
|
||||
XCTAssertNotNil(service)
|
||||
}
|
||||
|
||||
// MARK: - Should Enforce Tests
|
||||
|
||||
func testShouldEnforceBreakWhenDisabled() {
|
||||
service.disableEnforceMode()
|
||||
|
||||
let shouldEnforce = service.shouldEnforceBreak(for: .builtIn(.lookAway))
|
||||
XCTAssertFalse(shouldEnforce)
|
||||
}
|
||||
|
||||
func testShouldEnforceLookAwayTimer() {
|
||||
let shouldEnforce = service.shouldEnforce(timerIdentifier: .builtIn(.lookAway))
|
||||
// Result depends on settings, but method should not crash
|
||||
XCTAssertNotNil(shouldEnforce)
|
||||
}
|
||||
|
||||
func testShouldEnforceUserTimerNever() {
|
||||
let shouldEnforce = service.shouldEnforce(timerIdentifier: .user(id: "test"))
|
||||
XCTAssertFalse(shouldEnforce)
|
||||
}
|
||||
|
||||
func testShouldEnforceBuiltInPostureTimerNever() {
|
||||
let shouldEnforce = service.shouldEnforce(timerIdentifier: .builtIn(.posture))
|
||||
XCTAssertFalse(shouldEnforce)
|
||||
}
|
||||
|
||||
func testShouldEnforceBuiltInBlinkTimerNever() {
|
||||
let shouldEnforce = service.shouldEnforce(timerIdentifier: .builtIn(.blink))
|
||||
XCTAssertFalse(shouldEnforce)
|
||||
}
|
||||
|
||||
// MARK: - Pre-activate Camera Tests
|
||||
|
||||
func testShouldPreActivateCameraWhenSecondsRemainingTooHigh() {
|
||||
let shouldPreActivate = service.shouldPreActivateCamera(
|
||||
timerIdentifier: .builtIn(.lookAway),
|
||||
secondsRemaining: 5
|
||||
)
|
||||
XCTAssertFalse(shouldPreActivate)
|
||||
}
|
||||
|
||||
func testShouldPreActivateCameraForUserTimerNever() {
|
||||
let shouldPreActivate = service.shouldPreActivateCamera(
|
||||
timerIdentifier: .user(id: "test"),
|
||||
secondsRemaining: 1
|
||||
)
|
||||
XCTAssertFalse(shouldPreActivate)
|
||||
}
|
||||
|
||||
// MARK: - Compliance Evaluation Tests
|
||||
|
||||
func testEvaluateComplianceWhenLookingAtScreenAndFaceDetected() {
|
||||
let result = service.evaluateCompliance(
|
||||
isLookingAtScreen: true,
|
||||
faceDetected: true
|
||||
)
|
||||
XCTAssertEqual(result, .notCompliant)
|
||||
}
|
||||
|
||||
func testEvaluateComplianceWhenNotLookingAtScreenAndFaceDetected() {
|
||||
let result = service.evaluateCompliance(
|
||||
isLookingAtScreen: false,
|
||||
faceDetected: true
|
||||
)
|
||||
XCTAssertEqual(result, .compliant)
|
||||
}
|
||||
|
||||
func testEvaluateComplianceWhenFaceNotDetected() {
|
||||
let result = service.evaluateCompliance(
|
||||
isLookingAtScreen: true,
|
||||
faceDetected: false
|
||||
)
|
||||
XCTAssertEqual(result, .faceNotDetected)
|
||||
}
|
||||
|
||||
func testEvaluateComplianceWhenFaceNotDetectedAndNotLookingAtScreen() {
|
||||
let result = service.evaluateCompliance(
|
||||
isLookingAtScreen: false,
|
||||
faceDetected: false
|
||||
)
|
||||
XCTAssertEqual(result, .faceNotDetected)
|
||||
}
|
||||
|
||||
// MARK: - Camera Tests
|
||||
|
||||
func testStopCamera() {
|
||||
service.stopCamera()
|
||||
|
||||
XCTAssertFalse(service.isCameraActive)
|
||||
}
|
||||
|
||||
// MARK: - Compliance Tests
|
||||
|
||||
func testCheckUserCompliance() {
|
||||
service.checkUserCompliance()
|
||||
|
||||
// Should not crash
|
||||
XCTAssertNotNil(service)
|
||||
}
|
||||
|
||||
func testHandleReminderDismissed() {
|
||||
service.handleReminderDismissed()
|
||||
|
||||
// Should not crash
|
||||
XCTAssertNotNil(service)
|
||||
}
|
||||
|
||||
// MARK: - Test Mode Tests
|
||||
|
||||
func testStartTestMode() async {
|
||||
await service.enableEnforceMode()
|
||||
await service.startTestMode()
|
||||
|
||||
// Test mode requires enforce mode to be enabled and camera permissions
|
||||
// Just verify it doesn't crash
|
||||
XCTAssertNotNil(service)
|
||||
}
|
||||
|
||||
func testStopTestMode() {
|
||||
service.stopTestMode()
|
||||
|
||||
XCTAssertFalse(service.isTestMode)
|
||||
}
|
||||
|
||||
func testTestModeCycle() async {
|
||||
await service.enableEnforceMode()
|
||||
await service.startTestMode()
|
||||
|
||||
service.stopTestMode()
|
||||
XCTAssertFalse(service.isTestMode)
|
||||
}
|
||||
|
||||
// MARK: - Protocol Conformance Tests
|
||||
|
||||
func testConformsToEnforceModeProviding() {
|
||||
let providing: EnforceModeProviding = service
|
||||
XCTAssertNotNil(providing)
|
||||
XCTAssertFalse(providing.isEnforceModeEnabled)
|
||||
}
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
//
|
||||
// FullscreenDetectionServiceTests.swift
|
||||
// GazeTests
|
||||
//
|
||||
// Unit tests for FullscreenDetectionService.
|
||||
//
|
||||
|
||||
import Combine
|
||||
import XCTest
|
||||
@testable import Gaze
|
||||
|
||||
@MainActor
|
||||
final class FullscreenDetectionServiceTests: XCTestCase {
|
||||
|
||||
var service: FullscreenDetectionService!
|
||||
var cancellables: Set<AnyCancellable>!
|
||||
|
||||
override func setUp() async throws {
|
||||
service = FullscreenDetectionService()
|
||||
cancellables = []
|
||||
}
|
||||
|
||||
override func tearDown() async throws {
|
||||
cancellables = nil
|
||||
service = nil
|
||||
}
|
||||
|
||||
// MARK: - Initialization Tests
|
||||
|
||||
func testServiceInitialization() {
|
||||
XCTAssertNotNil(service)
|
||||
}
|
||||
|
||||
func testInitialFullscreenState() {
|
||||
// Initially should not be in fullscreen (unless actually in fullscreen)
|
||||
XCTAssertNotNil(service.isFullscreenActive)
|
||||
}
|
||||
|
||||
// MARK: - Publisher Tests
|
||||
|
||||
func testFullscreenStatePublisher() async throws {
|
||||
let expectation = XCTestExpectation(description: "Fullscreen state published")
|
||||
|
||||
service.$isFullscreenActive
|
||||
.sink { isFullscreen in
|
||||
expectation.fulfill()
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
|
||||
await fulfillment(of: [expectation], timeout: 0.1)
|
||||
}
|
||||
|
||||
// MARK: - Force Update Tests
|
||||
|
||||
func testForceUpdate() {
|
||||
// Should not crash
|
||||
service.forceUpdate()
|
||||
XCTAssertNotNil(service.isFullscreenActive)
|
||||
}
|
||||
|
||||
// MARK: - Protocol Conformance Tests
|
||||
|
||||
func testConformsToFullscreenDetectionProviding() {
|
||||
let providing: FullscreenDetectionProviding = service
|
||||
XCTAssertNotNil(providing)
|
||||
XCTAssertNotNil(providing.isFullscreenActive)
|
||||
}
|
||||
}
|
||||
@@ -1,89 +0,0 @@
|
||||
//
|
||||
// IdleMonitoringServiceTests.swift
|
||||
// GazeTests
|
||||
//
|
||||
// Unit tests for IdleMonitoringService.
|
||||
//
|
||||
|
||||
import Combine
|
||||
import XCTest
|
||||
@testable import Gaze
|
||||
|
||||
@MainActor
|
||||
final class IdleMonitoringServiceTests: XCTestCase {
|
||||
|
||||
var service: IdleMonitoringService!
|
||||
var cancellables: Set<AnyCancellable>!
|
||||
|
||||
override func setUp() async throws {
|
||||
service = IdleMonitoringService(idleThresholdMinutes: 5)
|
||||
cancellables = []
|
||||
}
|
||||
|
||||
override func tearDown() async throws {
|
||||
cancellables = nil
|
||||
service = nil
|
||||
}
|
||||
|
||||
// MARK: - Initialization Tests
|
||||
|
||||
func testServiceInitialization() {
|
||||
XCTAssertNotNil(service)
|
||||
}
|
||||
|
||||
func testInitialIdleState() {
|
||||
// Initially should not be idle
|
||||
XCTAssertFalse(service.isIdle)
|
||||
}
|
||||
|
||||
func testInitializationWithCustomThreshold() {
|
||||
let customService = IdleMonitoringService(idleThresholdMinutes: 10)
|
||||
XCTAssertNotNil(customService)
|
||||
}
|
||||
|
||||
// MARK: - Threshold Tests
|
||||
|
||||
func testUpdateThreshold() {
|
||||
service.updateThreshold(minutes: 15)
|
||||
|
||||
// Should not crash
|
||||
XCTAssertNotNil(service)
|
||||
}
|
||||
|
||||
func testUpdateThresholdMultipleTimes() {
|
||||
service.updateThreshold(minutes: 5)
|
||||
service.updateThreshold(minutes: 10)
|
||||
service.updateThreshold(minutes: 3)
|
||||
|
||||
XCTAssertNotNil(service)
|
||||
}
|
||||
|
||||
// MARK: - Publisher Tests
|
||||
|
||||
func testIdleStatePublisher() async throws {
|
||||
let expectation = XCTestExpectation(description: "Idle state published")
|
||||
|
||||
service.$isIdle
|
||||
.sink { isIdle in
|
||||
expectation.fulfill()
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
|
||||
await fulfillment(of: [expectation], timeout: 0.1)
|
||||
}
|
||||
|
||||
// MARK: - Force Update Tests
|
||||
|
||||
func testForceUpdate() {
|
||||
service.forceUpdate()
|
||||
XCTAssertNotNil(service.isIdle)
|
||||
}
|
||||
|
||||
// MARK: - Protocol Conformance Tests
|
||||
|
||||
func testConformsToIdleMonitoringProviding() {
|
||||
let providing: IdleMonitoringProviding = service
|
||||
XCTAssertNotNil(providing)
|
||||
XCTAssertNotNil(providing.isIdle)
|
||||
}
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
//
|
||||
// LoggingManagerTests.swift
|
||||
// GazeTests
|
||||
//
|
||||
// Unit tests for LoggingManager.
|
||||
//
|
||||
|
||||
import os.log
|
||||
import XCTest
|
||||
@testable import Gaze
|
||||
|
||||
final class LoggingManagerTests: XCTestCase {
|
||||
|
||||
var loggingManager: LoggingManager!
|
||||
|
||||
override func setUp() {
|
||||
loggingManager = LoggingManager.shared
|
||||
}
|
||||
|
||||
override func tearDown() {
|
||||
loggingManager = nil
|
||||
}
|
||||
|
||||
// MARK: - Initialization Tests
|
||||
|
||||
func testLoggingManagerInitialization() {
|
||||
XCTAssertNotNil(loggingManager)
|
||||
}
|
||||
|
||||
func testLoggersExist() {
|
||||
XCTAssertNotNil(loggingManager.appLogger)
|
||||
XCTAssertNotNil(loggingManager.timerLogger)
|
||||
XCTAssertNotNil(loggingManager.systemLogger)
|
||||
}
|
||||
|
||||
// MARK: - Configuration Tests
|
||||
|
||||
func testConfigureLogging() {
|
||||
// Should not crash
|
||||
loggingManager.configureLogging()
|
||||
XCTAssertNotNil(loggingManager)
|
||||
}
|
||||
|
||||
// MARK: - Logger Usage Tests
|
||||
|
||||
func testAppLoggerLogging() {
|
||||
// Should not crash
|
||||
loggingManager.appLogger.info("Test app log")
|
||||
XCTAssertNotNil(loggingManager.appLogger)
|
||||
}
|
||||
|
||||
func testTimerLoggerLogging() {
|
||||
loggingManager.timerLogger.info("Test timer log")
|
||||
XCTAssertNotNil(loggingManager.timerLogger)
|
||||
}
|
||||
|
||||
func testSystemLoggerLogging() {
|
||||
loggingManager.systemLogger.info("Test system log")
|
||||
XCTAssertNotNil(loggingManager.systemLogger)
|
||||
}
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
//
|
||||
// UsageTrackingServiceTests.swift
|
||||
// GazeTests
|
||||
//
|
||||
// Unit tests for UsageTrackingService.
|
||||
//
|
||||
|
||||
import XCTest
|
||||
@testable import Gaze
|
||||
|
||||
@MainActor
|
||||
final class UsageTrackingServiceTests: XCTestCase {
|
||||
|
||||
var service: UsageTrackingService!
|
||||
|
||||
override func setUp() async throws {
|
||||
service = UsageTrackingService(resetThresholdMinutes: 60)
|
||||
}
|
||||
|
||||
override func tearDown() async throws {
|
||||
service = nil
|
||||
}
|
||||
|
||||
// MARK: - Initialization Tests
|
||||
|
||||
func testServiceInitialization() {
|
||||
XCTAssertNotNil(service)
|
||||
}
|
||||
|
||||
func testInitializationWithCustomThreshold() {
|
||||
let customService = UsageTrackingService(resetThresholdMinutes: 120)
|
||||
XCTAssertNotNil(customService)
|
||||
}
|
||||
|
||||
// MARK: - Threshold Tests
|
||||
|
||||
func testUpdateResetThreshold() {
|
||||
service.updateResetThreshold(minutes: 90)
|
||||
|
||||
// Should not crash
|
||||
XCTAssertNotNil(service)
|
||||
}
|
||||
|
||||
func testUpdateThresholdMultipleTimes() {
|
||||
service.updateResetThreshold(minutes: 30)
|
||||
service.updateResetThreshold(minutes: 60)
|
||||
service.updateResetThreshold(minutes: 120)
|
||||
|
||||
XCTAssertNotNil(service)
|
||||
}
|
||||
|
||||
// MARK: - Idle Monitoring Integration Tests
|
||||
|
||||
func testSetupIdleMonitoring() {
|
||||
let idleService = IdleMonitoringService(idleThresholdMinutes: 5)
|
||||
|
||||
service.setupIdleMonitoring(idleService)
|
||||
|
||||
// Should not crash
|
||||
XCTAssertNotNil(service)
|
||||
}
|
||||
}
|
||||
@@ -1,129 +0,0 @@
|
||||
//
|
||||
// WindowManagerTests.swift
|
||||
// GazeTests
|
||||
//
|
||||
// Unit tests for WindowManager service.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import XCTest
|
||||
@testable import Gaze
|
||||
|
||||
@MainActor
|
||||
final class WindowManagerTests: XCTestCase {
|
||||
|
||||
var windowManager: WindowManager!
|
||||
|
||||
override func setUp() async throws {
|
||||
windowManager = WindowManager.shared
|
||||
}
|
||||
|
||||
override func tearDown() async throws {
|
||||
windowManager.dismissAllReminders()
|
||||
windowManager = nil
|
||||
}
|
||||
|
||||
// MARK: - Initialization Tests
|
||||
|
||||
func testWindowManagerInitialization() {
|
||||
XCTAssertNotNil(windowManager)
|
||||
}
|
||||
|
||||
func testInitialState() {
|
||||
XCTAssertFalse(windowManager.isOverlayReminderVisible)
|
||||
XCTAssertFalse(windowManager.isSubtleReminderVisible)
|
||||
}
|
||||
|
||||
// MARK: - Window Visibility Tests
|
||||
|
||||
func testOverlayReminderVisibility() {
|
||||
XCTAssertFalse(windowManager.isOverlayReminderVisible)
|
||||
|
||||
let view = Text("Test Overlay")
|
||||
windowManager.showReminderWindow(view, windowType: .overlay)
|
||||
|
||||
XCTAssertTrue(windowManager.isOverlayReminderVisible)
|
||||
|
||||
windowManager.dismissOverlayReminder()
|
||||
XCTAssertFalse(windowManager.isOverlayReminderVisible)
|
||||
}
|
||||
|
||||
func testSubtleReminderVisibility() {
|
||||
XCTAssertFalse(windowManager.isSubtleReminderVisible)
|
||||
|
||||
let view = Text("Test Subtle")
|
||||
windowManager.showReminderWindow(view, windowType: .subtle)
|
||||
|
||||
XCTAssertTrue(windowManager.isSubtleReminderVisible)
|
||||
|
||||
windowManager.dismissSubtleReminder()
|
||||
XCTAssertFalse(windowManager.isSubtleReminderVisible)
|
||||
}
|
||||
|
||||
// MARK: - Multiple Window Tests
|
||||
|
||||
func testShowBothWindowTypes() {
|
||||
let overlayView = Text("Overlay")
|
||||
let subtleView = Text("Subtle")
|
||||
|
||||
windowManager.showReminderWindow(overlayView, windowType: .overlay)
|
||||
windowManager.showReminderWindow(subtleView, windowType: .subtle)
|
||||
|
||||
XCTAssertTrue(windowManager.isOverlayReminderVisible)
|
||||
XCTAssertTrue(windowManager.isSubtleReminderVisible)
|
||||
}
|
||||
|
||||
func testDismissAllReminders() {
|
||||
let overlayView = Text("Overlay")
|
||||
let subtleView = Text("Subtle")
|
||||
|
||||
windowManager.showReminderWindow(overlayView, windowType: .overlay)
|
||||
windowManager.showReminderWindow(subtleView, windowType: .subtle)
|
||||
|
||||
windowManager.dismissAllReminders()
|
||||
|
||||
XCTAssertFalse(windowManager.isOverlayReminderVisible)
|
||||
XCTAssertFalse(windowManager.isSubtleReminderVisible)
|
||||
}
|
||||
|
||||
// MARK: - Window Replacement Tests
|
||||
|
||||
func testReplaceOverlayWindow() {
|
||||
let firstView = Text("First Overlay")
|
||||
let secondView = Text("Second Overlay")
|
||||
|
||||
windowManager.showReminderWindow(firstView, windowType: .overlay)
|
||||
XCTAssertTrue(windowManager.isOverlayReminderVisible)
|
||||
|
||||
// Showing a new overlay should replace the old one
|
||||
windowManager.showReminderWindow(secondView, windowType: .overlay)
|
||||
XCTAssertTrue(windowManager.isOverlayReminderVisible)
|
||||
}
|
||||
|
||||
func testReplaceSubtleWindow() {
|
||||
let firstView = Text("First Subtle")
|
||||
let secondView = Text("Second Subtle")
|
||||
|
||||
windowManager.showReminderWindow(firstView, windowType: .subtle)
|
||||
XCTAssertTrue(windowManager.isSubtleReminderVisible)
|
||||
|
||||
windowManager.showReminderWindow(secondView, windowType: .subtle)
|
||||
XCTAssertTrue(windowManager.isSubtleReminderVisible)
|
||||
}
|
||||
|
||||
// MARK: - Integration with Settings Tests
|
||||
|
||||
func testShowSettingsWithSettingsManager() {
|
||||
let settingsManager = SettingsManager.shared
|
||||
|
||||
// Should not crash
|
||||
windowManager.showSettings(settingsManager: settingsManager, initialTab: 0)
|
||||
}
|
||||
|
||||
func testShowOnboardingWithSettingsManager() {
|
||||
let settingsManager = SettingsManager.shared
|
||||
|
||||
// Should not crash
|
||||
windowManager.showOnboarding(settingsManager: settingsManager)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user