212 lines
5.8 KiB
Swift
212 lines
5.8 KiB
Swift
//
|
|
// 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)
|
|
}
|
|
}
|