mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-02 13:14:58 +00:00
Summary: - Replace the legacy iOS shell with Pro Command, Chat, Agents, and Settings tabs. - Wire iOS chat/session/settings/diagnostics and realtime Talk flows through gateway-backed APIs. - Add gateway/session and shared chat coverage for the new iOS flow. Verification: - git diff --check - node scripts/run-vitest.mjs src/gateway/server.sessions.create.test.ts src/gateway/talk-realtime-relay.test.ts - swift test --filter ChatViewModelTests (apps/shared/OpenClawKit) - xcodebuild build for Nimrod's iPhone succeeded; install succeeded; launch was blocked because the phone was locked Known follow-up: - Preserve traceLevel in sessions.create parent runtime inheritance and keep the changelog credit in the follow-up patch.
79 lines
3.1 KiB
Swift
79 lines
3.1 KiB
Swift
import Testing
|
|
@testable import OpenClaw
|
|
|
|
@Suite struct SettingsNetworkingHelpersTests {
|
|
@Test func diagnosticsIssuesNameEachReviewerVisibleCheck() {
|
|
#expect(
|
|
SettingsDiagnostics.issues(
|
|
gatewayConnected: false,
|
|
discoveredGatewayCount: 0,
|
|
talkConfigLoaded: false,
|
|
notificationStatusText: "Not Set") == [
|
|
.gatewayOffline,
|
|
.discoveryUnavailable,
|
|
.notificationsUnavailable,
|
|
])
|
|
}
|
|
|
|
@Test func diagnosticsIssuesRequireTalkConfigOnlyAfterGatewayConnects() {
|
|
#expect(
|
|
SettingsDiagnostics.issues(
|
|
gatewayConnected: true,
|
|
discoveredGatewayCount: 1,
|
|
talkConfigLoaded: false,
|
|
notificationStatusText: "Allowed") == [.talkConfigMissing])
|
|
#expect(
|
|
SettingsDiagnostics.issueCount(
|
|
gatewayConnected: true,
|
|
discoveredGatewayCount: 1,
|
|
talkConfigLoaded: true,
|
|
notificationStatusText: "Allowed") == 0)
|
|
}
|
|
|
|
@Test func parseHostPortParsesIPv4() {
|
|
#expect(SettingsNetworkingHelpers.parseHostPort(from: "127.0.0.1:8080") == .init(host: "127.0.0.1", port: 8080))
|
|
}
|
|
|
|
@Test func parseHostPortParsesHostnameAndTrims() {
|
|
#expect(SettingsNetworkingHelpers.parseHostPort(from: " example.com:80 \n") == .init(
|
|
host: "example.com",
|
|
port: 80))
|
|
}
|
|
|
|
@Test func parseHostPortParsesBracketedIPv6() {
|
|
#expect(
|
|
SettingsNetworkingHelpers.parseHostPort(from: "[2001:db8::1]:443") ==
|
|
.init(host: "2001:db8::1", port: 443))
|
|
}
|
|
|
|
@Test func parseHostPortRejectsMissingPort() {
|
|
#expect(SettingsNetworkingHelpers.parseHostPort(from: "example.com") == nil)
|
|
#expect(SettingsNetworkingHelpers.parseHostPort(from: "[2001:db8::1]") == nil)
|
|
}
|
|
|
|
@Test func parseHostPortRejectsInvalidPort() {
|
|
#expect(SettingsNetworkingHelpers.parseHostPort(from: "example.com:lol") == nil)
|
|
#expect(SettingsNetworkingHelpers.parseHostPort(from: "[2001:db8::1]:lol") == nil)
|
|
}
|
|
|
|
@Test func httpURLStringFormatsIPv4AndPort() {
|
|
#expect(SettingsNetworkingHelpers
|
|
.httpURLString(host: "127.0.0.1", port: 8080, fallback: "fallback") == "http://127.0.0.1:8080")
|
|
}
|
|
|
|
@Test func httpURLStringBracketsIPv6() {
|
|
#expect(SettingsNetworkingHelpers
|
|
.httpURLString(host: "2001:db8::1", port: 8080, fallback: "fallback") == "http://[2001:db8::1]:8080")
|
|
}
|
|
|
|
@Test func httpURLStringLeavesAlreadyBracketedIPv6() {
|
|
#expect(SettingsNetworkingHelpers
|
|
.httpURLString(host: "[2001:db8::1]", port: 8080, fallback: "fallback") == "http://[2001:db8::1]:8080")
|
|
}
|
|
|
|
@Test func httpURLStringFallsBackWhenMissingHostOrPort() {
|
|
#expect(SettingsNetworkingHelpers.httpURLString(host: nil, port: 80, fallback: "x") == "http://x")
|
|
#expect(SettingsNetworkingHelpers.httpURLString(host: "example.com", port: nil, fallback: "y") == "http://y")
|
|
}
|
|
}
|