80 lines · 2.6 KB · TypeScript
RawDownload
// @effect-diagnostics nodeBuiltinImport:offimport * as NodeFS from "node:fs";import * as NodeOS from "node:os";import * as NodePath from "node:path"; import { describe, expect, it } from "vite-plus/test"; import {  createAttachmentId,  parseThreadSegmentFromAttachmentId,  resolveAttachmentPathById,} from "./attachmentStore.ts"; describe("attachmentStore", () => {  it("sanitizes thread ids when creating attachment ids", () => {    const attachmentId = createAttachmentId("thread.folder/unsafe space");    expect(attachmentId).toBeTruthy();    if (!attachmentId) {      return;    }     const threadSegment = parseThreadSegmentFromAttachmentId(attachmentId);    expect(threadSegment).toBeTruthy();    expect(threadSegment).toMatch(/^[a-z0-9_-]+$/i);    expect(threadSegment).not.toContain(".");    expect(threadSegment).not.toContain("%");    expect(threadSegment).not.toContain("/");  });   it("parses exact thread segments from attachment ids without prefix collisions", () => {    const fooId = "foo-00000000-0000-4000-8000-000000000001";    const fooBarId = "foo-bar-00000000-0000-4000-8000-000000000002";     expect(parseThreadSegmentFromAttachmentId(fooId)).toBe("foo");    expect(parseThreadSegmentFromAttachmentId(fooBarId)).toBe("foo-bar");  });   it("normalizes created thread segments to lowercase", () => {    const attachmentId = createAttachmentId("Thread.Foo");    expect(attachmentId).toBeTruthy();    if (!attachmentId) {      return;    }    expect(parseThreadSegmentFromAttachmentId(attachmentId)).toBe("thread-foo");  });   it("resolves attachment path by id using the extension that exists on disk", () => {    const attachmentsDir = NodeFS.mkdtempSync(      NodePath.join(NodeOS.tmpdir(), "t3code-attachment-store-"),    );    try {      const attachmentId = "thread-1-attachment";      const pngPath = NodePath.join(attachmentsDir, `${attachmentId}.png`);      NodeFS.writeFileSync(pngPath, Buffer.from("hello"));       const resolved = resolveAttachmentPathById({        attachmentsDir,        attachmentId,      });      expect(resolved).toBe(pngPath);    } finally {      NodeFS.rmSync(attachmentsDir, { recursive: true, force: true });    }  });   it("returns null when no attachment file exists for the id", () => {    const attachmentsDir = NodeFS.mkdtempSync(      NodePath.join(NodeOS.tmpdir(), "t3code-attachment-store-"),    );    try {      const resolved = resolveAttachmentPathById({        attachmentsDir,        attachmentId: "thread-1-missing",      });      expect(resolved).toBeNull();    } finally {      NodeFS.rmSync(attachmentsDir, { recursive: true, force: true });    }  });});