chore: rename project to clawdbot
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
import ClawdbotProtocol
|
||||
import Foundation
|
||||
import Testing
|
||||
|
||||
@Suite struct GatewayFrameDecodeTests {
|
||||
@Test func decodesEventFrameWithAnyCodablePayload() throws {
|
||||
let json = """
|
||||
{
|
||||
"type": "event",
|
||||
"event": "presence",
|
||||
"payload": { "foo": "bar", "count": 1 },
|
||||
"seq": 7
|
||||
}
|
||||
"""
|
||||
|
||||
let frame = try JSONDecoder().decode(GatewayFrame.self, from: Data(json.utf8))
|
||||
|
||||
#expect({
|
||||
if case .event = frame { true } else { false }
|
||||
}(), "expected .event frame")
|
||||
|
||||
guard case let .event(evt) = frame else {
|
||||
return
|
||||
}
|
||||
|
||||
let payload = evt.payload?.value as? [String: AnyCodable]
|
||||
#expect(payload?["foo"]?.value as? String == "bar")
|
||||
#expect(payload?["count"]?.value as? Int == 1)
|
||||
#expect(evt.seq == 7)
|
||||
}
|
||||
|
||||
@Test func decodesRequestFrameWithNestedParams() throws {
|
||||
let json = """
|
||||
{
|
||||
"type": "req",
|
||||
"id": "1",
|
||||
"method": "agent.send",
|
||||
"params": {
|
||||
"text": "hi",
|
||||
"items": [1, null, {"ok": true}],
|
||||
"meta": { "count": 2 }
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
let frame = try JSONDecoder().decode(GatewayFrame.self, from: Data(json.utf8))
|
||||
|
||||
#expect({
|
||||
if case .req = frame { true } else { false }
|
||||
}(), "expected .req frame")
|
||||
|
||||
guard case let .req(req) = frame else {
|
||||
return
|
||||
}
|
||||
|
||||
let params = req.params?.value as? [String: AnyCodable]
|
||||
#expect(params?["text"]?.value as? String == "hi")
|
||||
|
||||
let items = params?["items"]?.value as? [AnyCodable]
|
||||
#expect(items?.count == 3)
|
||||
#expect(items?[0].value as? Int == 1)
|
||||
#expect(items?[1].value is NSNull)
|
||||
|
||||
let item2 = items?[2].value as? [String: AnyCodable]
|
||||
#expect(item2?["ok"]?.value as? Bool == true)
|
||||
|
||||
let meta = params?["meta"]?.value as? [String: AnyCodable]
|
||||
#expect(meta?["count"]?.value as? Int == 2)
|
||||
}
|
||||
|
||||
@Test func decodesUnknownFrameAndPreservesRaw() throws {
|
||||
let json = """
|
||||
{
|
||||
"type": "made-up",
|
||||
"foo": "bar",
|
||||
"count": 1,
|
||||
"nested": { "ok": true }
|
||||
}
|
||||
"""
|
||||
|
||||
let frame = try JSONDecoder().decode(GatewayFrame.self, from: Data(json.utf8))
|
||||
|
||||
#expect({
|
||||
if case .unknown = frame { true } else { false }
|
||||
}(), "expected .unknown frame")
|
||||
|
||||
guard case let .unknown(type, raw) = frame else {
|
||||
return
|
||||
}
|
||||
|
||||
#expect(type == "made-up")
|
||||
#expect(raw["type"]?.value as? String == "made-up")
|
||||
#expect(raw["foo"]?.value as? String == "bar")
|
||||
#expect(raw["count"]?.value as? Int == 1)
|
||||
let nested = raw["nested"]?.value as? [String: AnyCodable]
|
||||
#expect(nested?["ok"]?.value as? Bool == true)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user