import { describe, expect, it } from "vitest"; import { ForgetUserFactsInput, LanguageTagSchema, TimeZoneSchema, UpdateUserProfileInput, } from "./user-profile.js"; describe("user profile contracts", () => { it("stores IANA time zones in canonical spelling and rejects unknown ones", () => { expect(TimeZoneSchema.parse(" europe/vienna ")).toBe("Europe/Vienna"); expect(TimeZoneSchema.parse("UTC")).toBe("UTC"); expect(TimeZoneSchema.safeParse("Vienna").success).toBe(false); expect(TimeZoneSchema.safeParse("").success).toBe(false); }); it("canonicalizes language tags and rejects malformed ones", () => { expect(LanguageTagSchema.parse("de-at")).toBe("de-AT"); expect(LanguageTagSchema.parse("pt-BR")).toBe("pt-BR"); expect(LanguageTagSchema.safeParse("not a tag").success).toBe(false); }); it("records user-added facts as the user's own unless they come from onboarding", () => { const parsed = UpdateUserProfileInput.parse({ timeZone: null, addFacts: [ { category: "work", value: " Nurse " }, { category: "habits", value: "Runs daily", source: "onboarding", spaceIds: null }, ], }); expect(parsed.timeZone).toBeNull(); expect(parsed.addFacts).toEqual([ { category: "work", value: "Nurse", source: "user" }, { category: "habits", value: "Runs daily", source: "onboarding", spaceIds: null }, ]); expect( UpdateUserProfileInput.safeParse({ addFacts: [{ category: "work", value: "x", source: "conversation" }], }).success, ).toBe(false); expect( UpdateUserProfileInput.safeParse({ addFacts: [{ category: "secrets", value: "x" }] }).success, ).toBe(false); expect( UpdateUserProfileInput.safeParse({ editFacts: [{ id: "fact-1", spaceIds: [] }], }).success, ).toBe(false); }); it("forgets by exactly one of ids, category, or everything", () => { expect(ForgetUserFactsInput.safeParse({ factIds: ["fact-1"] }).success).toBe(true); expect(ForgetUserFactsInput.safeParse({ category: "health" }).success).toBe(true); expect(ForgetUserFactsInput.safeParse({ all: true }).success).toBe(true); expect(ForgetUserFactsInput.safeParse({}).success).toBe(false); expect(ForgetUserFactsInput.safeParse({ factIds: [] }).success).toBe(false); expect( ForgetUserFactsInput.safeParse({ factIds: ["fact-1"], category: "health" }).success, ).toBe(false); expect(ForgetUserFactsInput.safeParse({ all: false }).success).toBe(false); }); });