HealthProbe / HealthProbeTests / LocalMetricTimeoutProfileTests.swift
1 contributor
39 lines | 1.462kb
import XCTest
@testable import HealthProbe

final class LocalMetricTimeoutProfileTests: XCTestCase {
    override func tearDown() {
        LocalMetricTimeoutProfileStore.removeAll()
        super.tearDown()
    }

    func testRecordsSuccessAndPersistsProfile() {
        var profile = LocalMetricTimeoutProfile(metricIdentifier: "step_count", displayName: "Step Count")

        profile.recordSuccess(elapsed: 12, displayName: "Step Count")
        LocalMetricTimeoutProfileStore.save(profile)

        let loaded = LocalMetricTimeoutProfileStore.profile(for: MonitoredType(
            id: "step_count",
            displayName: "Step Count",
            category: .activity,
            isEnabledByDefault: true,
            objectType: nil
        ))
        XCTAssertEqual(loaded.successCount, 1)
        XCTAssertEqual(loaded.lastSuccessfulElapsed, 12)
        XCTAssertEqual(loaded.timeoutMode, "adaptive")
    }

    func testManualTimeoutIsClampedAndResettable() {
        var profile = LocalMetricTimeoutProfile(metricIdentifier: "heart_rate", displayName: "Heart Rate")

        profile.setManualTimeout(1_000)
        XCTAssertEqual(profile.effectiveTimeout, LocalMetricTimeoutProfile.maximumTimeout)
        XCTAssertEqual(profile.timeoutMode, "manual")

        profile.resetLearning()
        XCTAssertEqual(profile.effectiveTimeout, LocalMetricTimeoutProfile.defaultInitialTimeout)
        XCTAssertEqual(profile.timeoutMode, "default")
    }
}