- Add vitest coverage-v8 plugin and configure coverage thresholds (80% lines) - Add coverage exclusions for server-only pages, DB layer, and ML backends - Create eslint-disable annotations for test mocks and setup - Exclude test files from tsconfig to avoid type errors on mocks - Rewrite API route tests (diseases, plants) for async diseases-db imports - Update component tests (EmptyState, Footer, Navbar, LoadingSkeleton, ResultsDashboard, ImageUpload) to match current component implementations - Add page-level tests for homepage, 404, and results page - Fix upload-client tests with proper mock resets in beforeEach - Add diseases-db module as async knowledge base backend - Refactor API routes to use async diseases-db (listDiseases, getDiseaseById, getPlantById, getLookalikeDiseases, etc.) - Add plant field to PredictionResult type and identify route response - Add KB generation scripts (plant-list, disease-templates, generate-full-kb) - Update constants with expanded featured plants and trust signals - Fix ResultsDashboard to use plant from prediction result instead of DB lookup
56 lines
1.7 KiB
TypeScript
56 lines
1.7 KiB
TypeScript
import { describe, it, expect, vi } from "vitest";
|
|
import { mimeTypeToExtension } from "./image-processing-server";
|
|
|
|
// Mock sharp dynamically
|
|
const mockSharp = vi.fn(() => ({
|
|
resize: vi.fn().mockReturnThis(),
|
|
jpeg: vi.fn().mockReturnThis(),
|
|
toBuffer: vi.fn().mockResolvedValue(Buffer.from("resized-image-data")),
|
|
}));
|
|
|
|
vi.doMock("sharp", () => ({
|
|
default: mockSharp,
|
|
}));
|
|
|
|
describe("mimeTypeToExtension", () => {
|
|
it("maps image/png to png", () => {
|
|
expect(mimeTypeToExtension("image/png")).toBe("png");
|
|
});
|
|
|
|
it("maps image/jpeg to jpg", () => {
|
|
expect(mimeTypeToExtension("image/jpeg")).toBe("jpg");
|
|
});
|
|
|
|
it("maps image/jpg to jpg", () => {
|
|
expect(mimeTypeToExtension("image/jpg")).toBe("jpg");
|
|
});
|
|
|
|
it("maps image/webp to webp", () => {
|
|
expect(mimeTypeToExtension("image/webp")).toBe("webp");
|
|
});
|
|
|
|
it("returns jpg for unknown mime types", () => {
|
|
expect(mimeTypeToExtension("image/bmp")).toBe("jpg");
|
|
expect(mimeTypeToExtension("unknown/type")).toBe("jpg");
|
|
});
|
|
});
|
|
|
|
describe("resizeImageServer", () => {
|
|
it("resizes image to specified dimensions", async () => {
|
|
const { resizeImageServer } = await import("./image-processing-server");
|
|
const buffer = Buffer.from("test-image-data");
|
|
|
|
const result = await resizeImageServer(buffer, 224, 224);
|
|
expect(result).toBeInstanceOf(Buffer);
|
|
expect(mockSharp).toHaveBeenCalled();
|
|
});
|
|
|
|
it("returns buffer for valid input", async () => {
|
|
const { resizeImageServer } = await import("./image-processing-server");
|
|
const buffer = Buffer.from("test-image-data");
|
|
|
|
const result = await resizeImageServer(buffer, 224, 224);
|
|
expect(result).toBeInstanceOf(Buffer);
|
|
});
|
|
});
|