118 lines
3.1 KiB
TypeScript
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 });
|
|
});
|