mirror of
https://github.com/langgenius/dify.git
synced 2026-09-02 22:36:15 +08:00
Import the committed KnowledgeFS snapshot dc4072ee302317145612087ce7440851dc329fd0 under knowledge-fs/ without its Git history, local IDE settings, or build artifacts.
107 lines
3.5 KiB
TypeScript
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"),
|
|
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" });
|
|
});
|
|
});
|