const assert = require("node:assert/strict"); const { appendRepairAttachments, clampDescription, isValidPhone, buildDeviceMap, normalizeChosenFiles, validateRepairForm } = require("../../tmp/report-tests/repair/repair-utils.js"); function run(name, fn) { try { fn(); console.log(`PASS ${name}`); } catch (error) { console.error(`FAIL ${name}`); throw error; } } run("clampDescription trims to 60 chars", () => { assert.equal(clampDescription("a".repeat(61)).length, 60); }); run("isValidPhone accepts mainland mobile number", () => { assert.equal(isValidPhone("13689569989"), true); }); run("validateRepairForm rejects empty problem description", () => { assert.equal( validateRepairForm({ selectedDeviceId: "A1", description: "", contactName: "张小龙", phone: "13689569989" }), "请填写问题描述" ); }); run("buildDeviceMap groups devices by type", () => { const map = buildDeviceMap([ { id: "A1", type: "monitor", label: "设备A", params: "P1" }, { id: "B1", type: "camera", label: "设备B", params: "P2" } ]); assert.equal(map.monitor.length, 1); assert.equal(map.camera[0].id, "B1"); }); run("normalizeChosenFiles tags images and videos", () => { const files = normalizeChosenFiles([ { tempFilePath: "x/a.png", fileType: "image", size: 10 }, { tempFilePath: "x/b.mp4", fileType: "video", size: 20, thumbTempFilePath: "x/b.jpg", duration: 5 } ]); assert.equal(files[0].kind, "image"); assert.equal(files[1].kind, "video"); assert.equal(files[1].thumbPath, "x/b.jpg"); }); run("appendRepairAttachments blocks second video", () => { const result = appendRepairAttachments( [{ id: "v1", kind: "video", path: "x/1.mp4" }], [{ id: "v2", kind: "video", path: "x/2.mp4" }] ); assert.equal(result.errorMessage, "最多上传1个视频"); assert.equal(result.attachments.length, 1); }); run("appendRepairAttachments limits images to 9", () => { const existing = Array.from({ length: 8 }, (_, index) => ({ id: `img-${index}`, kind: "image", path: `x/${index}.png` })); const result = appendRepairAttachments(existing, [ { id: "img-8", kind: "image", path: "x/8.png" }, { id: "img-9", kind: "image", path: "x/9.png" } ]); assert.equal(result.errorMessage, "最多上传9张图片"); assert.equal(result.attachments.length, 9); });