40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
|
|
const escapeIlikePattern = (input: string): string =>
|
|
input.replace(/[%_\\]/g, "\\$&");
|
|
|
|
describe("escapeIlikePattern", () => {
|
|
test("passes through plain text unchanged", () => {
|
|
expect(escapeIlikePattern("hello")).toBe("hello");
|
|
});
|
|
|
|
test("escapes % wildcard", () => {
|
|
expect(escapeIlikePattern("50%")).toBe("50\\%");
|
|
});
|
|
|
|
test("escapes _ single-char wildcard", () => {
|
|
expect(escapeIlikePattern("us_r")).toBe("us\\_r");
|
|
});
|
|
|
|
test("escapes backslash", () => {
|
|
expect(escapeIlikePattern("path\\to")).toBe("path\\\\to");
|
|
});
|
|
|
|
test("escapes multiple wildcards in one string", () => {
|
|
expect(escapeIlikePattern("a%b_c\\d")).toBe("a\\%b\\_c\\\\d");
|
|
});
|
|
|
|
test("handles empty string", () => {
|
|
expect(escapeIlikePattern("")).toBe("");
|
|
});
|
|
|
|
test("leaves normal entity IDs unchanged", () => {
|
|
expect(escapeIlikePattern("dispersive-preview")).toBe(
|
|
"dispersive-preview",
|
|
);
|
|
expect(escapeIlikePattern("6a13cf0b9b6845d6edbb4aa4")).toBe(
|
|
"6a13cf0b9b6845d6edbb4aa4",
|
|
);
|
|
});
|
|
});
|