inference-playground / src /lib /state /images.svelte.test.ts
Thomas G. Lopes
add tests (#88)
a76eef5 unverified
raw
history blame
2.96 kB
import { describe, it, expect, vi, beforeEach, type Mock } from "vitest";
import { images } from "./images.svelte";
import { fileToDataURL, compressBase64Image } from "$lib/utils/file.js";
import { JsonEntityIndexedDbStorage } from "$lib/remult.js";
// Mock dependencies
vi.mock("$lib/utils/file.js", () => ({
fileToDataURL: vi.fn(),
compressBase64Image: vi.fn(),
}));
vi.mock("$lib/remult.js", () => {
const mockStoreInstance = {
setItem: vi.fn(),
getItem: vi.fn(),
deleteItem: vi.fn(),
init: vi.fn().mockResolvedValue(undefined), // Mock init if it's called internally
};
return {
JsonEntityIndexedDbStorage: vi.fn(() => mockStoreInstance),
};
});
// Helper to get the mocked store instance
const getMockedStore = () => new JsonEntityIndexedDbStorage();
describe("Images", () => {
beforeEach(() => {
vi.clearAllMocks();
// Mock crypto.randomUUID
vi.spyOn(window.crypto, "randomUUID").mockReturnValue("123e4567-e89b-12d3-a456-426614174000");
});
describe("upload", () => {
it("should process a file, store it, and return a key", async () => {
const mockFile = new File(["dummy content"], "test.png", { type: "image/png" });
const mockDataUrl = "data:image/png;base64,dummy";
const mockCompressedDataUrl = "data:image/jpeg;base64,compresseddummy";
(fileToDataURL as Mock).mockResolvedValue(mockDataUrl);
(compressBase64Image as Mock).mockResolvedValue(mockCompressedDataUrl);
const store = getMockedStore();
const key = await images.upload(mockFile);
expect(fileToDataURL).toHaveBeenCalledWith(mockFile);
expect(compressBase64Image).toHaveBeenCalledWith({
base64: mockDataUrl,
maxSizeKB: 400,
});
expect(store.setItem).toHaveBeenCalledWith(`image-123e4567-e89b-12d3-a456-426614174000`, mockCompressedDataUrl);
expect(key).toBe(`image-123e4567-e89b-12d3-a456-426614174000`);
});
});
describe("get", () => {
it("should retrieve an item from the store", async () => {
const mockKey = "image-123";
const mockStoredData = "data:image/jpeg;base64,somedata";
const store = getMockedStore();
(store.getItem as Mock).mockResolvedValue(mockStoredData);
const result = await images.get(mockKey);
expect(store.getItem).toHaveBeenCalledWith(mockKey);
expect(result).toBe(mockStoredData);
});
it("should return undefined if item not found (or whatever getItem returns)", async () => {
const mockKey = "image-not-found";
const store = getMockedStore();
(store.getItem as Mock).mockResolvedValue(undefined); // Simulate item not found
const result = await images.get(mockKey);
expect(store.getItem).toHaveBeenCalledWith(mockKey);
expect(result).toBeUndefined();
});
});
describe("delete", () => {
it("should delete an item from the store", async () => {
const mockKey = "image-to-delete";
const store = getMockedStore();
await images.delete(mockKey);
expect(store.deleteItem).toHaveBeenCalledWith(mockKey);
});
});
});