calckey/packages/backend/test/get-file-info.ts

210 lines
4.8 KiB
TypeScript

import * as assert from "assert";
import { fileURLToPath } from "node:url";
import { dirname } from "node:path";
import { getFileInfo } from "../src/misc/get-file-info.js";
import { async } from "./utils.js";
const _filename = fileURLToPath(import.meta.url);
const _dirname = dirname(_filename);
describe("Get file info", () => {
it("Empty file", async(async () => {
const path = `${_dirname}/resources/emptyfile`;
const info = (await getFileInfo(path, {
skipSensitiveDetection: true,
})) as any;
delete info.warnings;
delete info.blurhash;
delete info.sensitive;
delete info.porn;
assert.deepStrictEqual(info, {
size: 0,
md5: "d41d8cd98f00b204e9800998ecf8427e",
type: {
mime: "application/octet-stream",
ext: null,
},
width: undefined,
height: undefined,
orientation: undefined,
});
}));
it("Generic JPEG", async(async () => {
const path = `${_dirname}/resources/Lenna.jpg`;
const info = (await getFileInfo(path, {
skipSensitiveDetection: true,
})) as any;
delete info.warnings;
delete info.blurhash;
delete info.sensitive;
delete info.porn;
assert.deepStrictEqual(info, {
size: 25360,
md5: "091b3f259662aa31e2ffef4519951168",
type: {
mime: "image/jpeg",
ext: "jpg",
},
width: 512,
height: 512,
orientation: undefined,
});
}));
it("Generic APNG", async(async () => {
const path = `${_dirname}/resources/anime.png`;
const info = (await getFileInfo(path, {
skipSensitiveDetection: true,
})) as any;
delete info.warnings;
delete info.blurhash;
delete info.sensitive;
delete info.porn;
assert.deepStrictEqual(info, {
size: 1868,
md5: "08189c607bea3b952704676bb3c979e0",
type: {
mime: "image/apng",
ext: "apng",
},
width: 256,
height: 256,
orientation: undefined,
});
}));
it("Generic AGIF", async(async () => {
const path = `${_dirname}/resources/anime.gif`;
const info = (await getFileInfo(path, {
skipSensitiveDetection: true,
})) as any;
delete info.warnings;
delete info.blurhash;
delete info.sensitive;
delete info.porn;
assert.deepStrictEqual(info, {
size: 2248,
md5: "32c47a11555675d9267aee1a86571e7e",
type: {
mime: "image/gif",
ext: "gif",
},
width: 256,
height: 256,
orientation: undefined,
});
}));
it("PNG with alpha", async(async () => {
const path = `${_dirname}/resources/with-alpha.png`;
const info = (await getFileInfo(path, {
skipSensitiveDetection: true,
})) as any;
delete info.warnings;
delete info.blurhash;
delete info.sensitive;
delete info.porn;
assert.deepStrictEqual(info, {
size: 3772,
md5: "f73535c3e1e27508885b69b10cf6e991",
type: {
mime: "image/png",
ext: "png",
},
width: 256,
height: 256,
orientation: undefined,
});
}));
it("Generic SVG", async(async () => {
const path = `${_dirname}/resources/image.svg`;
const info = (await getFileInfo(path, {
skipSensitiveDetection: true,
})) as any;
delete info.warnings;
delete info.blurhash;
delete info.sensitive;
delete info.porn;
assert.deepStrictEqual(info, {
size: 505,
md5: "b6f52b4b021e7b92cdd04509c7267965",
type: {
mime: "image/svg+xml",
ext: "svg",
},
width: 256,
height: 256,
orientation: undefined,
});
}));
it("SVG with XML definition", async(async () => {
// https://github.com/misskey-dev/misskey/issues/4413
const path = `${_dirname}/resources/with-xml-def.svg`;
const info = (await getFileInfo(path, {
skipSensitiveDetection: true,
})) as any;
delete info.warnings;
delete info.blurhash;
delete info.sensitive;
delete info.porn;
assert.deepStrictEqual(info, {
size: 544,
md5: "4b7a346cde9ccbeb267e812567e33397",
type: {
mime: "image/svg+xml",
ext: "svg",
},
width: 256,
height: 256,
orientation: undefined,
});
}));
it("Dimension limit", async(async () => {
const path = `${_dirname}/resources/25000x25000.png`;
const info = (await getFileInfo(path, {
skipSensitiveDetection: true,
})) as any;
delete info.warnings;
delete info.blurhash;
delete info.sensitive;
delete info.porn;
assert.deepStrictEqual(info, {
size: 75933,
md5: "268c5dde99e17cf8fe09f1ab3f97df56",
type: {
mime: "application/octet-stream", // do not treat as image
ext: null,
},
width: 25000,
height: 25000,
orientation: undefined,
});
}));
it("Rotate JPEG", async(async () => {
const path = `${_dirname}/resources/rotate.jpg`;
const info = (await getFileInfo(path, {
skipSensitiveDetection: true,
})) as any;
delete info.warnings;
delete info.blurhash;
delete info.sensitive;
delete info.porn;
assert.deepStrictEqual(info, {
size: 12624,
md5: "68d5b2d8d1d1acbbce99203e3ec3857e",
type: {
mime: "image/jpeg",
ext: "jpg",
},
width: 512,
height: 256,
orientation: 8,
});
}));
});