mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-23 10:55:31 -06:00
0dbdf994b3
* feat(macos): isolate named app profiles * refactor(macos): isolate profile launch ownership * fix(macos): avoid overlapping approvals socket access * fix(macos): declare profile defaults concurrency ownership * fix(macos): return profiled node launch arguments * chore(i18n): refresh macOS profile source inventory * fix(macos): gate profile startup before services * test(macos): evaluate profile state before assertions * fix(daemon): skip absent launchd deactivation * fix(macos): fail closed on profile port conflicts * chore(i18n): refresh profile conflict inventory * fix(macos): ignore non-gateway launch agent claims * test(macos): stabilize profile lifecycle timing * fix(macos): remove stale dashboard URL * chore(macos): refresh native source baseline
73 lines
2.7 KiB
Swift
73 lines
2.7 KiB
Swift
import Testing
|
|
@testable import OpenClaw
|
|
|
|
@MainActor
|
|
struct GeneralSettingsStatusTests {
|
|
@Test func `local profile conflict outranks connected state`() {
|
|
let status = GeneralStatusPresentation.resolve(
|
|
mode: .local,
|
|
isPaused: true,
|
|
controlState: .connected,
|
|
localFailure: "Profile p2380 cannot use Gateway port 55636")
|
|
|
|
#expect(status.title == "OpenClaw needs attention")
|
|
#expect(status.subtitle.contains("55636"))
|
|
#expect(status.tone == .attention)
|
|
#expect(status.showsConnectionAction)
|
|
}
|
|
|
|
@Test func `connected remote gateway is healthy`() {
|
|
let status = GeneralStatusPresentation.resolve(
|
|
mode: .remote,
|
|
isPaused: false,
|
|
controlState: .connected)
|
|
|
|
#expect(status.title == "OpenClaw active")
|
|
#expect(status.subtitle == "Connected to your remote Gateway.")
|
|
#expect(status.tone == .healthy)
|
|
#expect(!status.showsConnectionAction)
|
|
}
|
|
|
|
@Test func `remote authentication failure is actionable`() {
|
|
let reason = RemoteGatewayAuthIssue.tokenMismatch.statusMessage
|
|
let status = GeneralStatusPresentation.resolve(
|
|
mode: .remote,
|
|
isPaused: false,
|
|
controlState: .degraded(reason))
|
|
|
|
#expect(status.title == "OpenClaw needs attention")
|
|
#expect(status.subtitle.contains(reason))
|
|
#expect(status.subtitle.contains("Open Connection settings"))
|
|
#expect(status.tone == .attention)
|
|
#expect(status.showsConnectionAction)
|
|
}
|
|
|
|
@Test func `remote connection attempt is transient`() {
|
|
let status = GeneralStatusPresentation.resolve(
|
|
mode: .remote,
|
|
isPaused: false,
|
|
controlState: .connecting)
|
|
|
|
#expect(status.title == "OpenClaw connecting")
|
|
#expect(status.subtitle == "Connecting to your remote Gateway…")
|
|
#expect(status.tone == .transient)
|
|
#expect(!status.showsConnectionAction)
|
|
}
|
|
|
|
@Test func `local and unconfigured copy stay independent of remote health`() {
|
|
let local = GeneralStatusPresentation.resolve(
|
|
mode: .local,
|
|
isPaused: false,
|
|
controlState: .degraded("ignored"))
|
|
let unconfigured = GeneralStatusPresentation.resolve(
|
|
mode: .unconfigured,
|
|
isPaused: false,
|
|
controlState: .degraded("ignored"))
|
|
|
|
#expect(local.subtitle == "Processing messages through the local Gateway on this Mac.")
|
|
#expect(local.tone == .healthy)
|
|
#expect(unconfigured.subtitle == "Ready to run after you choose a Gateway connection.")
|
|
#expect(unconfigured.tone == .healthy)
|
|
}
|
|
}
|