Files
2026-07-13 13:39:12 +08:00

70 lines
2.6 KiB
TypeScript

import { describe, it } from "node:test";
import assert from "node:assert/strict";
import {
extractPreservedBlocks,
restorePreservedBlocks,
shouldPreserve,
} from "../../../open-sse/services/compression/preservation.ts";
describe("preservation", () => {
it("should extract and restore code blocks", () => {
const code = "const x = 42;\nconsole.log(x);";
const text = `Please fix this:\n\`\`\`js\n${code}\n\`\`\`\nThanks!`;
const { text: extracted, blocks } = extractPreservedBlocks(text);
assert.ok(!extracted.includes(code), "Code should be replaced with placeholder");
assert.ok(blocks.length > 0, "Should have preserved blocks");
const restored = restorePreservedBlocks(extracted, blocks);
assert.equal(restored, text, "Should restore to original");
});
it("should preserve URLs", () => {
const url = "https://example.com/api/v1/users";
const text = `Check ${url} please`;
const { text: extracted, blocks } = extractPreservedBlocks(text);
const restored = restorePreservedBlocks(extracted, blocks);
assert.equal(restored, text, "URL should be preserved");
});
it("should preserve file paths", () => {
const path = "/src/utils/helper.ts";
const text = `Fix the file ${path} please`;
const { text: extracted, blocks } = extractPreservedBlocks(text);
const restored = restorePreservedBlocks(extracted, blocks);
assert.ok(restored.includes(path), "Path should be preserved");
});
it("should preserve error messages", () => {
const text = "I got TypeError: Cannot read property of undefined";
const { blocks } = extractPreservedBlocks(text);
assert.ok(
blocks.some((b) => b.content.includes("TypeError")),
"Error should be preserved"
);
});
it("shouldPreserve matches user patterns", () => {
assert.ok(shouldPreserve("my-secret-key", [/secret/i]));
assert.ok(!shouldPreserve("hello world", [/secret/i]));
});
it("should handle nested code blocks and URLs", () => {
const text = "See https://docs.example.com for:\n```\nfetch('https://api.example.com')\n```";
const { text: extracted, blocks } = extractPreservedBlocks(text);
const restored = restorePreservedBlocks(extracted, blocks);
assert.equal(restored, text);
});
it("should handle empty text", () => {
const { text, blocks } = extractPreservedBlocks("");
assert.equal(text, "");
assert.equal(blocks.length, 0);
});
it("should handle text with nothing to preserve", () => {
const text = "Just regular text here";
const { text: extracted, blocks } = extractPreservedBlocks(text);
assert.equal(blocks.length, 0);
assert.equal(extracted, text);
});
});