import { describe, expect, it } from "vitest"; import { applyEntitlementSnapshotToView, toView, } from "@/stores/user/user-machine.helpers"; describe("toView", () => { it("fills optional user fields with stable defaults", () => { expect(toView({ id: "user-1", username: "Luna" })).toEqual({ id: "user-1", username: "Luna", email: "", avatarUrl: "", intimacy: 0, dolBalance: 0, creditBalance: 0, vipExpiresAt: null, relationshipStage: "", currentMood: "", isGuest: false, isVip: false, voiceMinutesRemaining: 0, }); }); it("preserves provided user fields", () => { expect( toView({ id: "user-2", username: "Elio", email: "elio@example.com", avatarUrl: "https://example.com/avatar.png", intimacy: 42, dolBalance: 12, creditBalance: 120, vipExpiresAt: "2026-07-26T00:00:00+00:00", relationshipStage: "close_friend", currentMood: "playful", isGuest: true, isVip: true, voiceMinutesRemaining: 30, }), ).toEqual({ id: "user-2", username: "Elio", email: "elio@example.com", avatarUrl: "https://example.com/avatar.png", intimacy: 42, dolBalance: 12, creditBalance: 120, vipExpiresAt: "2026-07-26T00:00:00+00:00", relationshipStage: "close_friend", currentMood: "playful", isGuest: true, isVip: true, voiceMinutesRemaining: 30, }); }); it("merges entitlement snapshot into user view fields", () => { const user = toView({ id: "user-3", username: "Nora", isVip: false }); expect( applyEntitlementSnapshotToView(user, { isVip: true, creditBalance: 120, }), ).toMatchObject({ isVip: true, creditBalance: 120, dolBalance: 120, }); }); });