import { detectFileType } from "@noya-app/noya-utils"; import { Type } from "@sinclair/typebox"; import { describe, expect, it } from "bun:test"; import { indexedDB } from "fake-indexeddb"; import { NoyaManager } from "../NoyaManager"; import { localStorageSync } from "../sync/localStorageSync"; globalThis.indexedDB = indexedDB; function createNoyaManager() { return new NoyaManager(null); } describe("localStorageSync AI generation", () => { it("returns a schema-valid default object", async () => { const noyaManager = createNoyaManager(); const cleanup = localStorageSync({ key: "test-local-ai-generation", })({ noyaManager }); const result = await noyaManager.aiManager.generateObject({ prompt: "Create a todo", schema: Type.Object({ title: Type.String({ default: "Local todo" }), completed: Type.Boolean(), tags: Type.Array(Type.String()), }), }); expect(result).toEqual({ title: "Local todo", completed: false, tags: [], }); cleanup(); }); it("returns deterministic text and image stubs", async () => { const noyaManager = createNoyaManager(); const cleanup = localStorageSync({ key: "test-local-ai-text-image-generation", })({ noyaManager }); const text = await noyaManager.aiManager.generateText({ prompt: "Write a todo", model: "custom-text-model", }); const image = await noyaManager.aiManager.generateImage({ prompt: "Draw a todo", model: "custom-image-model", }); expect(text).toBe(""); expect(image.mediaType).toBe("image/png"); expect(detectFileType(image.data)).toBe("image/png"); cleanup(); }); });