Spaces:
Paused
Paused
| import OpenClawKit | |
| import Foundation | |
| import Testing | |
| import UIKit | |
| @testable import OpenClaw | |
| private func withUserDefaults<T>(_ updates: [String: Any?], _ body: () throws -> T) rethrows -> T { | |
| let defaults = UserDefaults.standard | |
| var snapshot: [String: Any?] = [:] | |
| for key in updates.keys { | |
| snapshot[key] = defaults.object(forKey: key) | |
| } | |
| for (key, value) in updates { | |
| if let value { | |
| defaults.set(value, forKey: key) | |
| } else { | |
| defaults.removeObject(forKey: key) | |
| } | |
| } | |
| defer { | |
| for (key, value) in snapshot { | |
| if let value { | |
| defaults.set(value, forKey: key) | |
| } else { | |
| defaults.removeObject(forKey: key) | |
| } | |
| } | |
| } | |
| return try body() | |
| } | |
| (.serialized) struct GatewayConnectionControllerTests { | |
| func resolvedDisplayNameSetsDefaultWhenMissing() { | |
| let defaults = UserDefaults.standard | |
| let displayKey = "node.displayName" | |
| withUserDefaults([displayKey: nil, "node.instanceId": "ios-test"]) { | |
| let appModel = NodeAppModel() | |
| let controller = GatewayConnectionController(appModel: appModel, startDiscovery: false) | |
| let resolved = controller._test_resolvedDisplayName(defaults: defaults) | |
| #expect(!resolved.isEmpty) | |
| #expect(defaults.string(forKey: displayKey) == resolved) | |
| } | |
| } | |
| func currentCapsReflectToggles() { | |
| withUserDefaults([ | |
| "node.instanceId": "ios-test", | |
| "node.displayName": "Test Node", | |
| "camera.enabled": true, | |
| "location.enabledMode": OpenClawLocationMode.always.rawValue, | |
| VoiceWakePreferences.enabledKey: true, | |
| ]) { | |
| let appModel = NodeAppModel() | |
| let controller = GatewayConnectionController(appModel: appModel, startDiscovery: false) | |
| let caps = Set(controller._test_currentCaps()) | |
| #expect(caps.contains(OpenClawCapability.canvas.rawValue)) | |
| #expect(caps.contains(OpenClawCapability.screen.rawValue)) | |
| #expect(caps.contains(OpenClawCapability.camera.rawValue)) | |
| #expect(caps.contains(OpenClawCapability.location.rawValue)) | |
| #expect(caps.contains(OpenClawCapability.voiceWake.rawValue)) | |
| } | |
| } | |
| func currentCommandsIncludeLocationWhenEnabled() { | |
| withUserDefaults([ | |
| "node.instanceId": "ios-test", | |
| "location.enabledMode": OpenClawLocationMode.whileUsing.rawValue, | |
| ]) { | |
| let appModel = NodeAppModel() | |
| let controller = GatewayConnectionController(appModel: appModel, startDiscovery: false) | |
| let commands = Set(controller._test_currentCommands()) | |
| #expect(commands.contains(OpenClawLocationCommand.get.rawValue)) | |
| } | |
| } | |
| } | |