import assert from "node:assert/strict";
import test from "node:test";
import { strToU8, unzipSync, zipSync } from "fflate";
import { compactPartnerBatchWorkbookForUpload } from "../koc-portal/app/batch-workbook-upload.ts";
const imageBytes = (marker, size) => {
const bytes = new Uint8Array(size);
bytes.set([0x89, 0x50, 0x4e, 0x47, marker]);
for (let index = 5; index < bytes.length; index += 1) bytes[index] = marker;
return bytes;
};
test("slims oversized WPS workbooks without removing backfill screenshots", () => {
const worksheet = `
序号(不能改)
图片1
笔记截图
数据分析截图(单篇笔记数据分析截图)
_xlfn.DISPIMG("SOURCE",1)=DISPIMG("SOURCE",1)
_xlfn.DISPIMG("PUBLISH",1)=DISPIMG("PUBLISH",1)
`;
const cellImages = `
`;
const relationships = `
`;
const workbook = zipSync(
{
"xl/worksheets/sheet1.xml": strToU8(worksheet),
"xl/cellimages.xml": strToU8(cellImages),
"xl/_rels/cellimages.xml.rels": strToU8(relationships),
"xl/media/source.png": [imageBytes(1, 2_000_000), { level: 0 }],
"xl/media/publish.png": [imageBytes(2, 2_000), { level: 0 }],
},
{ level: 0 },
);
const compacted = compactPartnerBatchWorkbookForUpload(workbook);
const entries = unzipSync(compacted.bytes);
assert.equal(entries["xl/media/source.png"], undefined);
assert.deepEqual(entries["xl/media/publish.png"], imageBytes(2, 2_000));
assert.equal(compacted.removedMediaCount, 1);
assert.equal(compacted.preservedScreenshotCount, 1);
assert.ok(compacted.bytes.byteLength < workbook.byteLength / 10);
});