import { describe, expect, it } from "vitest"; import { parseJsonStringOrDefault, parseJsonStringOrThrow, parseJsonStringWithSchemaOrDefault, } from "$lib/Effect/json"; import { Schema } from "effect"; describe("effect json parsing", () => { it("parses valid json strings", () => { expect(parseJsonStringOrThrow(`{"ok":true,"value":3}`)).toEqual({ ok: true, value: 3, }); }); it("throws for invalid json strings", () => { expect(() => parseJsonStringOrThrow("{nope}")).toThrowError(); }); it("returns fallback for invalid json", () => { expect(parseJsonStringOrDefault("{nope}", { ok: false })).toEqual({ ok: false, }); }); it("decodes json with a schema and returns fallback on schema mismatch", () => { expect( parseJsonStringWithSchemaOrDefault( "[1,2,3]", Schema.Array(Schema.Number), [], ), ).toEqual([1, 2, 3]); expect( parseJsonStringWithSchemaOrDefault( `["a",2]`, Schema.Array(Schema.Number), [], ), ).toEqual([]); }); });