dify/knowledge-fs/packages/api/src/gateway-defaults.test.ts
Jyong 4ee43b8afc chore: migrate knowledge-fs source tree
Import the committed KnowledgeFS snapshot dc4072ee302317145612087ce7440851dc329fd0 under knowledge-fs/ without its Git history, local IDE settings, or build artifacts.
2026-07-20 04:54:20 -04:00

107 lines
3.5 KiB
TypeScript

import { createNodePlatformAdapter } from "@knowledge/adapters/node";
import { describe, expect, it } from "vitest";
import { createStaticAuthVerifier } from "./auth";
import { createDefaultComputeRuntime, createDefaultParser } from "./gateway-defaults";
import { createKnowledgeGateway } from "./index";
import { createInMemoryKnowledgeSpaceRepository } from "./knowledge-space-repository";
import { createInitializedTestKnowledgeSpaceAccess } from "./test-knowledge-space-access";
describe("gateway defaults", () => {
it("creates native parser fallback with unavailable unstructured parser", async () => {
const parser = createDefaultParser();
const markdownArtifact = await parser.parse({
body: new TextEncoder().encode("# Title\n\nBody\n\n![Diagram](https://cdn.test/diagram.png)"),
documentAssetId: "00000000-0000-4000-8000-000000000001",
filename: "doc.md",
mimeType: "text/markdown",
version: 1,
});
expect(markdownArtifact.elements.map((element) => element.type)).toContain("heading");
expect(markdownArtifact.elements).toContainEqual(
expect.objectContaining({
metadata: expect.objectContaining({
assetRef: {
contentType: "image/png",
uri: "https://cdn.test/diagram.png",
},
caption: "Diagram",
source: "markdown-image",
}),
text: "Diagram",
type: "image",
}),
);
await expect(
parser.parse({
body: new Uint8Array([1, 2, 3]),
documentAssetId: "00000000-0000-4000-8000-000000000002",
filename: "doc.pdf",
mimeType: "application/pdf",
version: 1,
}),
).rejects.toThrow("Unstructured parser is not configured");
});
it("creates a built-in TypeScript compute runtime", () => {
const compute = createDefaultComputeRuntime();
expect(compute.countTokens("hello")).toBeGreaterThan(0);
expect(compute.diffText({ oldText: "a", newText: "b" }).operations).toEqual([
expect.objectContaining({ kind: "delete", text: "a" }),
expect.objectContaining({ kind: "insert", text: "b" }),
]);
});
it("fails closed when no query generator or explicit local fallback is configured", async () => {
const spaces = createInMemoryKnowledgeSpaceRepository({
generateId: () => "018f0d60-7a49-7cc2-9c1b-5b36f18f2c43",
maxListLimit: 10,
maxSpaces: 10,
});
const space = await spaces.create({
name: "Unavailable query backend",
slug: "unavailable-query-backend",
tenantId: "tenant-1",
});
const token = "read-token";
const app = createKnowledgeGateway({
adapter: createNodePlatformAdapter({ env: {} }),
auth: createStaticAuthVerifier({
subject: {
scopes: ["knowledge-spaces:read"],
subjectId: "reader-1",
tenantId: "tenant-1",
},
token,
}),
knowledgeSpaceAccess: await createInitializedTestKnowledgeSpaceAccess([
{
knowledgeSpaceId: space.id,
ownerSubjectId: "reader-1",
},
]),
knowledgeSpaces: spaces,
});
const response = await app.request("/queries", {
body: JSON.stringify({
knowledgeSpaceId: space.id,
mode: "deep",
query: "Do not scan local nodes implicitly",
}),
headers: {
authorization: `Bearer ${token}`,
"content-type": "application/json",
},
method: "POST",
});
expect(response.status).toBe(503);
await expect(response.json()).resolves.toEqual({ error: "Query generation unavailable" });
});
});