Files
tools/image-scale/main_test.ts

118 lines
3.1 KiB
TypeScript

import { assertEquals, assertRejects } from "@std/assert";
import { basename, join } from "@std/path";
import { getOutputPath, scaleImage } from "./main.ts";
const testDir = await Deno.makeTempDir();
Deno.test("getOutputPath - changes extension to jpg", () => {
assertEquals(
getOutputPath("/path/to/image.png"),
"/path/to/image.jpg",
);
assertEquals(
getOutputPath("/path/to/image.jpeg"),
"/path/to/image.jpg",
);
assertEquals(
getOutputPath("/path/to/image.jpg"),
"/path/to/image.jpg",
);
});
Deno.test("getOutputPath - with output directory", () => {
assertEquals(
getOutputPath("/path/to/image.png", "/output/dir"),
"/output/dir/image.jpg",
);
});
Deno.test("scaleImage - rejects with invalid minPixels", async () => {
await assertRejects(
() => scaleImage("test.png", "output.jpg", 0),
Error,
"minPixels must be a positive number",
);
await assertRejects(
() => scaleImage("test.png", "output.jpg", -100),
Error,
"minPixels must be a positive number",
);
});
Deno.test("scaleImage - processes PNG image", async () => {
// Create a simple test PNG image (100x50 pixels)
const inputPath = join(testDir, "test_input.png");
const outputPath = join(testDir, "test_output.jpg");
// Create a test image using sharp
await Deno.writeFile(
inputPath,
await (await import("sharp")).default({
create: {
width: 100,
height: 50,
channels: 3,
background: { r: 255, g: 0, b: 0 },
},
})
.png()
.toBuffer(),
);
// Scale the image with min dimension of 200px
await scaleImage(inputPath, outputPath, 200);
// Verify output file exists
const outputStat = await Deno.stat(outputPath);
assertEquals(outputStat.isFile, true);
// Verify the output dimensions
const metadata = await (await import("sharp")).default(outputPath).metadata();
// Original: 100x50, min dimension is 50
// Scale factor: 200/50 = 4
// New dimensions: 400x200
assertEquals(metadata.height, 200);
assertEquals(metadata.width, 400);
});
Deno.test("scaleImage - processes JPG image", async () => {
const inputPath = join(testDir, "test_input2.jpg");
const outputPath = join(testDir, "test_output2.jpg");
// Create a test image (80x120 pixels)
await Deno.writeFile(
inputPath,
await (await import("sharp")).default({
create: {
width: 80,
height: 120,
channels: 3,
background: { r: 0, g: 255, b: 0 },
},
})
.jpeg()
.toBuffer(),
);
// Scale the image with min dimension of 240px
await scaleImage(inputPath, outputPath, 240);
// Verify output file exists
const outputStat = await Deno.stat(outputPath);
assertEquals(outputStat.isFile, true);
// Verify the output dimensions
const metadata = await (await import("sharp")).default(outputPath).metadata();
// Original: 80x120, min dimension is 80
// Scale factor: 240/80 = 3
// New dimensions: 240x360
assertEquals(metadata.width, 240);
assertEquals(metadata.height, 360);
});
// Cleanup after all tests
addEventListener("beforeunload", async () => {
await Deno.remove(testDir, { recursive: true });
});