Files
chenlin f3a8a38acd
web-platform-ci / Standalone decision service (no cloud credentials) (push) Has been cancelled
web-platform-ci / TypeScript, lint, unit, build (push) Has been cancelled
web-platform-ci / Playwright E2E (push) Has been cancelled
lekiwi-compatibility / cpu-compatibility (push) Has been cancelled
web-platform-ci / Standalone decision service (no cloud credentials) (pull_request) Has been cancelled
web-platform-ci / TypeScript, lint, unit, build (pull_request) Has been cancelled
web-platform-ci / Playwright E2E (pull_request) Has been cancelled
lekiwi-compatibility / cpu-compatibility (pull_request) Has been cancelled
feat: release v1.0.1 CADWorld 网站与 LeKiwi 智能抓放
集成同源 BYOK 会话隔离、精简模型设置、官方订阅入口和 HTTPS 发布运维;保留本地训练/调参与控制能力。同步 npm 版本及 CHANGELOG,记录公网真实 API 验收仍待用户凭据。
2026-09-24 09:57:41 +08:00

59 lines
2.6 KiB
Python

import unittest
from decision_server.protocol import DecisionError
from decision_server.web_config import MemoryConnections, configure, public_config, website_origin
def config(provider="deepseek", model="deepseek-flash"):
return {
"llm": {"provider": provider, "model": model, "apiKey": "llm-secret-fixture"},
"jev": {"apiKey": "jev-secret-fixture"},
}
class WebsiteConfigTests(unittest.TestCase):
def test_atomic_memory_only_and_no_secret_response(self):
store = MemoryConnections()
result = configure(store.values, config(), ())
self.assertEqual(store.values, {})
self.assertNotIn("secret-fixture", str(public_config(result)))
self.assertEqual(result["jev"].model, "typesafe/jev-1.13")
self.assertFalse(hasattr(store, "path"))
bad = config()
bad["jev"]["apiKey"] = "bad key"
with self.assertRaises(DecisionError):
configure(result, bad, ())
self.assertEqual(result["jev"].key, "jev-secret-fixture")
def test_reject_arbitrary_urls_unknown_models_and_providers(self):
for field in ("baseUrl", "protocol", "command"):
data = config()
data["llm"][field] = "http://169.254.169.254"
with self.assertRaises(DecisionError):
configure({}, data, ())
for provider, model in (("other", "x"), ("openrouter", "unknown"), ("codex", "x")):
with self.assertRaises(DecisionError):
configure({}, config(provider, model), ())
def test_key_reuse_only_same_provider_no_cross_role_reuse(self):
values = configure({}, config(), ())
draft = {"llm": {"provider": "deepseek", "model": "deepseek-flash"}, "jev": {}}
self.assertEqual(configure(values, draft, ()), values)
draft["llm"] = {"provider": "openrouter", "model": "vendor/model"}
with self.assertRaisesRegex(DecisionError, "api_key_required"):
configure(values, draft, ("vendor/model",))
draft["llm"]["apiKey"] = "new-router-key"
result = configure(values, draft, ("vendor/model",))
self.assertEqual(result["jev"].key, values["jev"].key)
def test_public_origin_requires_https(self):
self.assertEqual(
website_origin("https://cadworld-sim.robotquan.com"), "cadworld-sim.robotquan.com"
)
for value in ("http://public.test", "https://x/path", "https://user@x", "https://x?key=x"):
with self.assertRaises(DecisionError):
website_origin(value)
self.assertEqual(
website_origin("http://localhost:5173", development=True), "localhost:5173"
)