70 lines
2.6 KiB
TypeScript
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);
|
|
});
|
|
});
|