37 lines
1.9 KiB
TypeScript
37 lines
1.9 KiB
TypeScript
|
|
import { Buffer } from "node:buffer";
|
||
|
|
import { describe, expect, it } from "vitest";
|
||
|
|
|
||
|
|
import { decodeUploadFilename } from "@/utils/upload-name";
|
||
|
|
|
||
|
|
/** จำลองสิ่งที่ undici ทำกับชื่อไฟล์: ถอดรหัส UTF-8 bytes เป็น latin1 (mojibake) */
|
||
|
|
function mojibake(name: string): string {
|
||
|
|
return Buffer.from(name, "utf8").toString("latin1");
|
||
|
|
}
|
||
|
|
|
||
|
|
describe("decodeUploadFilename", () => {
|
||
|
|
it("ชื่อไทยที่ undici ถอดเป็น latin1 → คืนชื่อเดิม", () => {
|
||
|
|
expect(decodeUploadFilename(mojibake("คำร้องทดสอบอัปโหลด.pdf"))).toBe(
|
||
|
|
"คำร้องทดสอบอัปโหลด.pdf",
|
||
|
|
);
|
||
|
|
});
|
||
|
|
|
||
|
|
it("ชื่อไทยผสมตัวเลข/วงเล็บ/ช่องว่าง", () => {
|
||
|
|
expect(decodeUploadFilename(mojibake("คดีดำที่ 1234 (สำเนา).pdf"))).toBe(
|
||
|
|
"คดีดำที่ 1234 (สำเนา).pdf",
|
||
|
|
);
|
||
|
|
});
|
||
|
|
|
||
|
|
it("ชื่ออังกฤษล้วนไม่เปลี่ยน (รอบ latin1⇄utf8 เป็น identity)", () => {
|
||
|
|
expect(decodeUploadFilename("scan-2026_final.PDF")).toBe("scan-2026_final.PDF");
|
||
|
|
});
|
||
|
|
|
||
|
|
it("ชื่อที่ส่งมาถูกต้องอยู่แล้ว (ไทย ≥ U+0E00 ไม่มีตัวช่วง latin1) ไม่ถูกแตะ", () => {
|
||
|
|
expect(decodeUploadFilename("คำร้อง.pdf")).toBe("คำร้อง.pdf");
|
||
|
|
});
|
||
|
|
|
||
|
|
it("ชื่อ latin1 จริง (byte เดี่ยวประกอบเป็น UTF-8 ไม่ได้) เก็บของเดิม", () => {
|
||
|
|
// "café" ที่ sender เข้ารหัส latin1 จริง: é = byte 0xE9 เดี่ยว → ถอด UTF-8 ได้ U+FFFD
|
||
|
|
expect(decodeUploadFilename("café.pdf")).toBe("café.pdf");
|
||
|
|
});
|
||
|
|
});
|