65 lines
1.7 KiB
Swift
65 lines
1.7 KiB
Swift
// SPDX-FileCopyrightText: 2026 Kaede Akino
|
|
// SPDX-License-Identifier: GPL-3.0-only
|
|
|
|
import TermindApplication
|
|
import TermindDomain
|
|
import Testing
|
|
|
|
@testable import Termind
|
|
|
|
@Suite
|
|
@MainActor
|
|
struct MetricsActivityObserverTests {
|
|
@Test
|
|
func wakeWaitsForTheLoginSessionBeforeResumingMetrics() {
|
|
let model = makeModel()
|
|
let observer = MetricsActivityObserver()
|
|
observer.start(model)
|
|
defer {
|
|
observer.stop()
|
|
model.shutdown()
|
|
}
|
|
|
|
observer.receive(.sessionDidResignActive)
|
|
#expect(model.sleeping)
|
|
|
|
observer.receive(.systemWillSleep)
|
|
observer.receive(.systemDidWake)
|
|
#expect(model.sleeping)
|
|
|
|
observer.receive(.sessionDidBecomeActive)
|
|
#expect(!model.sleeping)
|
|
}
|
|
|
|
@Test
|
|
func systemSleepStillResumesWithoutASessionTransition() {
|
|
let model = makeModel()
|
|
let observer = MetricsActivityObserver()
|
|
observer.start(model)
|
|
defer {
|
|
observer.stop()
|
|
model.shutdown()
|
|
}
|
|
|
|
observer.receive(.systemWillSleep)
|
|
#expect(model.sleeping)
|
|
observer.receive(.systemDidWake)
|
|
#expect(!model.sleeping)
|
|
}
|
|
|
|
private func makeModel() -> ServerMetricsModel {
|
|
let model = ServerMetricsModel(
|
|
hosts: HostLibraryModel(), preferences: ActivityObserverPreferences(),
|
|
makeSampler: { preconditionFailure("No monitor is configured") }
|
|
)
|
|
model.start()
|
|
return model
|
|
}
|
|
}
|
|
|
|
@MainActor
|
|
private final class ActivityObserverPreferences: MetricsConfigurationStoring {
|
|
func load() -> [MetricsSelection] { [] }
|
|
func save(_ selections: [MetricsSelection]) {}
|
|
}
|