import { beforeEach, describe, expect, it, vi } from "vitest"; const sessionState = vi.hoisted(() => ({ runtimeConfigValue: { value: null }, canAccessSuperUser: vi.fn(() => false), getTransactionDraftCustomerNumberConfig: vi.fn(async () => ({ data: { data: [] } })), })); vi.mock("@/components/session/token/SessionUser.vue", () => ({ SessionUser: { runtimeConfig: { economic: { transactionDraftCustomerNumber: sessionState.runtimeConfigValue, }, }, canAccessSuperUser: sessionState.canAccessSuperUser, superUser: { modules: { economic: { config: { transactionDraftCustomerNumber: { get: sessionState.getTransactionDraftCustomerNumberConfig, }, }, }, }, }, }, })); describe("useDraftTransactionCustomer", () => { beforeEach(() => { vi.resetModules(); sessionState.runtimeConfigValue.value = null; sessionState.canAccessSuperUser.mockReset(); sessionState.canAccessSuperUser.mockReturnValue(false); sessionState.getTransactionDraftCustomerNumberConfig.mockReset(); sessionState.getTransactionDraftCustomerNumberConfig.mockResolvedValue({ data: { data: [] } }); }); it("prefers the runtime-configured customer number when available", async () => { sessionState.runtimeConfigValue.value = 44556677; const module = await import("@/composables/useDraftTransactionCustomer.js"); expect(module.getDraftTransactionCustomerNumber()).toBe(44556677); await expect(module.ensureDraftTransactionCustomerLoaded()).resolves.toBe(44556677); expect(sessionState.getTransactionDraftCustomerNumberConfig).not.toHaveBeenCalled(); }); it("falls back to the e-conomic module config when runtime config is missing", async () => { sessionState.canAccessSuperUser.mockReturnValue(true); sessionState.getTransactionDraftCustomerNumberConfig.mockResolvedValue({ data: { data: [ { variable: "transactionDraftCustomerNumber", value: 778899, }, ], }, }); const module = await import("@/composables/useDraftTransactionCustomer.js"); await expect(module.ensureDraftTransactionCustomerLoaded()).resolves.toBe(778899); expect(module.getDraftTransactionCustomerNumber()).toBe(778899); }); });