fix(mac): harden gateway frame decoding

This commit is contained in:
Peter Steinberger
2025-12-12 17:30:21 +00:00
parent 957d7fbe2a
commit 79818f73c0
8 changed files with 153 additions and 131 deletions

View File

@@ -28,4 +28,71 @@ import Testing
#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)
}
}