import Foundation import Testing @testable import OpenClaw @Suite(.serialized) struct OnboardingStateStoreTests { @Test @MainActor func shouldPresentWhenFreshAndDisconnected() { let testDefaults = self.makeDefaults() let defaults = testDefaults.defaults defer { self.reset(testDefaults) } let appModel = NodeAppModel() appModel.gatewayServerName = nil #expect(OnboardingStateStore.shouldPresentOnLaunch(appModel: appModel, defaults: defaults)) } @Test @MainActor func doesNotPresentWhenConnected() { let testDefaults = self.makeDefaults() let defaults = testDefaults.defaults defer { self.reset(testDefaults) } let appModel = NodeAppModel() appModel.gatewayServerName = "gateway" #expect(!OnboardingStateStore.shouldPresentOnLaunch(appModel: appModel, defaults: defaults)) } @Test @MainActor func markCompletedPersistsMode() { let testDefaults = self.makeDefaults() let defaults = testDefaults.defaults defer { self.reset(testDefaults) } let appModel = NodeAppModel() appModel.gatewayServerName = nil OnboardingStateStore.markCompleted(mode: .remoteDomain, defaults: defaults) #expect(OnboardingStateStore.lastMode(defaults: defaults) == .remoteDomain) #expect(!OnboardingStateStore.shouldPresentOnLaunch(appModel: appModel, defaults: defaults)) OnboardingStateStore.markIncomplete(defaults: defaults) #expect(OnboardingStateStore.shouldPresentOnLaunch(appModel: appModel, defaults: defaults)) } private struct TestDefaults { var suiteName: String var defaults: UserDefaults } private func makeDefaults() -> TestDefaults { let suiteName = "OnboardingStateStoreTests.\(UUID().uuidString)" return TestDefaults( suiteName: suiteName, defaults: UserDefaults(suiteName: suiteName) ?? .standard) } private func reset(_ defaults: TestDefaults) { defaults.defaults.removePersistentDomain(forName: defaults.suiteName) } }