doatlas-2 / artifacts /api-server /src /lib /capability /external-knowledge /__tests__ /stub-adapters.test.ts
| /** | |
| * 3 个留接口适配器(code_models / data / user_uploads)— 调用必抛 | |
| * NotImplementedAdapter 且 telemetry 必登记 error。 | |
| * | |
| * 这是反欺骗的关键 — 严禁返空数组让上游误以为查到 0 条。 | |
| */ | |
| import test from "node:test"; | |
| import assert from "node:assert/strict"; | |
| import { queryExternalKnowledge, NotImplementedAdapter } from "../index.ts"; | |
| import { _setTelemetryTestHook } from "../telemetry.ts"; | |
| const CAP = "cap_test_stubs"; | |
| test.beforeEach(() => { | |
| _setTelemetryTestHook(null); | |
| }); | |
| for (const kind of ["code_models", "data", "user_uploads"] as const) { | |
| test(`stub adapter '${kind}' throws NotImplementedAdapter + 登记 telemetry`, async () => { | |
| const calls: { adapter: string; error: string | null }[] = []; | |
| _setTelemetryTestHook((rec) => | |
| calls.push({ adapter: rec.adapter, error: rec.error }), | |
| ); | |
| await assert.rejects( | |
| () => | |
| queryExternalKnowledge({ | |
| kind, | |
| capabilityId: CAP, | |
| params: { foo: "bar" }, | |
| }), | |
| (err: unknown) => { | |
| assert.ok( | |
| err instanceof NotImplementedAdapter, | |
| "must throw NotImplementedAdapter, not return empty array", | |
| ); | |
| assert.equal((err as NotImplementedAdapter).kind, kind); | |
| return true; | |
| }, | |
| ); | |
| assert.equal(calls.length, 1, "telemetry must record exactly one call"); | |
| assert.equal(calls[0]?.adapter, kind); | |
| assert.ok( | |
| calls[0]?.error?.includes("interface-only"), | |
| `telemetry error must mention interface-only, got: ${calls[0]?.error}`, | |
| ); | |
| }); | |
| } | |