import { describe, test, expect, beforeEach } from "bun:test"; import { registerPreset, getPreset, hasPreset, getAllPresets, getPresetsByCategory, clearPresets, registerAllPresets, getAllBundledPresets, registerAllEffects, clearEffects, hasEffect, } from "../src"; describe("Preset Registry", () => { beforeEach(() => { clearPresets(); }); test("registerPreset + getPreset works", () => { registerPreset({ type: "test", name: "Test", category: "custom", description: "Test preset", effects: [{ effectType: "brightness", params: { intensity: 10 } }], }); expect(hasPreset("test")).toBe(true); expect(getPreset("test").name).toBe("Test"); }); test("getPreset throws for unknown", () => { expect(() => getPreset("unknown")).toThrow("Unknown preset: unknown"); }); test("getPresetsByCategory filters correctly", () => { registerAllPresets(); const instagram = getPresetsByCategory("instagram"); const cinematic = getPresetsByCategory("cinematic"); expect(instagram.length).toBe(6); expect(cinematic.length).toBe(4); }); test("clearPresets removes all", () => { registerAllPresets(); expect(getAllPresets().length).toBeGreaterThan(0); clearPresets(); expect(getAllPresets()).toHaveLength(0); }); }); describe("Bundled Presets", () => { beforeEach(() => { clearPresets(); clearEffects(); }); test("has 12 total presets", () => { const all = getAllBundledPresets(); expect(all).toHaveLength(12); }); test("all presets reference valid effect types", () => { registerAllEffects(); const presets = getAllBundledPresets(); for (const preset of presets) { for (const entry of preset.effects) { expect(hasEffect({ effectType: entry.effectType })).toBe(true); } } }); test("each preset has 2-5 effects", () => { for (const preset of getAllBundledPresets()) { expect(preset.effects.length).toBeGreaterThanOrEqual(2); expect(preset.effects.length).toBeLessThanOrEqual(5); } }); test("registerAllPresets skips duplicates", () => { registerAllPresets(); const count1 = getAllPresets().length; registerAllPresets(); expect(getAllPresets().length).toBe(count1); }); });