openclaw/apps/macos/Tests/ClawdbotIPCTests/AnyCodableEncodingTests.swift
Jon Shapiro 92697edb7c fix(venice): add compat settings to prevent HTTP 400 errors
Venice's API doesn't support certain OpenAI-compatible parameters that
Clawdbot sends by default:

- `store`: Venice returns HTTP 400 with no body when this is present
- `developer` role: Not supported by Venice's API

This adds VENICE_COMPAT settings (supportsStore: false,
supportsDeveloperRole: false) to all Venice model definitions, both
from the static catalog and dynamically discovered models.

Fixes issues reported in PR #1666 where users experienced silent
failures (HTTP 400, no body) when using Venice models.

Co-authored-by: jonisjongithub <jonisjongithub@users.noreply.github.com>
Co-authored-by: Clawdbot <bot@clawd.bot>
2026-01-26 17:56:01 -08:00

39 lines
1.3 KiB
Swift

import ClawdbotProtocol
import Foundation
import Testing
@testable import Clawdbot
@Suite struct AnyCodableEncodingTests {
@Test func encodesSwiftArrayAndDictionaryValues() throws {
let payload: [String: Any] = [
"tags": ["node", "ios"],
"meta": ["count": 2],
"null": NSNull(),
]
let data = try JSONEncoder().encode(ClawdbotProtocol.AnyCodable(payload))
let obj = try #require(JSONSerialization.jsonObject(with: data) as? [String: Any])
#expect(obj["tags"] as? [String] == ["node", "ios"])
#expect((obj["meta"] as? [String: Any])?["count"] as? Int == 2)
#expect(obj["null"] is NSNull)
}
@Test func protocolAnyCodableEncodesPrimitiveArrays() throws {
let payload: [String: Any] = [
"items": [1, "two", NSNull(), ["ok": true]],
]
let data = try JSONEncoder().encode(ClawdbotProtocol.AnyCodable(payload))
let obj = try #require(JSONSerialization.jsonObject(with: data) as? [String: Any])
let items = try #require(obj["items"] as? [Any])
#expect(items.count == 4)
#expect(items[0] as? Int == 1)
#expect(items[1] as? String == "two")
#expect(items[2] is NSNull)
#expect((items[3] as? [String: Any])?["ok"] as? Bool == true)
}
}