| import OpenClawKit |
| import Foundation |
| import Testing |
|
|
| @Suite struct DeepLinkParserTests { |
| @Test func parseRejectsUnknownHost() { |
| let url = URL(string: "openclaw://nope?message=hi")! |
| #expect(DeepLinkParser.parse(url) == nil) |
| } |
|
|
| @Test func parseHostIsCaseInsensitive() { |
| let url = URL(string: "openclaw://AGENT?message=Hello")! |
| #expect(DeepLinkParser.parse(url) == .agent(.init( |
| message: "Hello", |
| sessionKey: nil, |
| thinking: nil, |
| deliver: false, |
| to: nil, |
| channel: nil, |
| timeoutSeconds: nil, |
| key: nil))) |
| } |
|
|
| @Test func parseRejectsNonOpenClawScheme() { |
| let url = URL(string: "https://example.com/agent?message=hi")! |
| #expect(DeepLinkParser.parse(url) == nil) |
| } |
|
|
| @Test func parseRejectsEmptyMessage() { |
| let url = URL(string: "openclaw://agent?message=%20%20%0A")! |
| #expect(DeepLinkParser.parse(url) == nil) |
| } |
|
|
| @Test func parseAgentLinkParsesCommonFields() { |
| let url = |
| URL(string: "openclaw://agent?message=Hello&deliver=1&sessionKey=node-test&thinking=low&timeoutSeconds=30")! |
| #expect( |
| DeepLinkParser.parse(url) == .agent( |
| .init( |
| message: "Hello", |
| sessionKey: "node-test", |
| thinking: "low", |
| deliver: true, |
| to: nil, |
| channel: nil, |
| timeoutSeconds: 30, |
| key: nil))) |
| } |
|
|
| @Test func parseAgentLinkParsesTargetRoutingFields() { |
| let url = |
| URL( |
| string: "openclaw://agent?message=Hello%20World&deliver=1&to=%2B15551234567&channel=whatsapp&key=secret")! |
| #expect( |
| DeepLinkParser.parse(url) == .agent( |
| .init( |
| message: "Hello World", |
| sessionKey: nil, |
| thinking: nil, |
| deliver: true, |
| to: "+15551234567", |
| channel: "whatsapp", |
| timeoutSeconds: nil, |
| key: "secret"))) |
| } |
|
|
| @Test func parseRejectsNegativeTimeoutSeconds() { |
| let url = URL(string: "openclaw://agent?message=Hello&timeoutSeconds=-1")! |
| #expect(DeepLinkParser.parse(url) == .agent(.init( |
| message: "Hello", |
| sessionKey: nil, |
| thinking: nil, |
| deliver: false, |
| to: nil, |
| channel: nil, |
| timeoutSeconds: nil, |
| key: nil))) |
| } |
| } |
|
|