File size: 2,961 Bytes
a76eef5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
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);
});
});
});
|