121 lines
4.5 KiB
JavaScript
121 lines
4.5 KiB
JavaScript
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
const sessionState = vi.hoisted(() => ({
|
|
runtimeConfigValue: { value: null },
|
|
canAccessAdmin: vi.fn(() => false),
|
|
canAccessSuperUser: vi.fn(() => false),
|
|
getTransactionDraftCustomerNumberConfig: vi.fn(async () => ({ data: { data: [] } })),
|
|
}));
|
|
|
|
vi.mock("@/components/session/token/SessionUser.vue", () => ({
|
|
SessionUser: {
|
|
runtimeConfig: {
|
|
economic: {
|
|
transactionDraftCustomerNumber: sessionState.runtimeConfigValue,
|
|
},
|
|
},
|
|
canAccessAdmin: sessionState.canAccessAdmin,
|
|
canAccessSuperUser: sessionState.canAccessSuperUser,
|
|
superUser: {
|
|
modules: {
|
|
economic: {
|
|
config: {
|
|
transactionDraftCustomerNumber: {
|
|
get: sessionState.getTransactionDraftCustomerNumberConfig,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}));
|
|
|
|
describe("useDraftTransactionCustomer", () => {
|
|
beforeEach(() => {
|
|
vi.resetModules();
|
|
sessionState.runtimeConfigValue.value = null;
|
|
sessionState.canAccessAdmin.mockReset();
|
|
sessionState.canAccessAdmin.mockReturnValue(false);
|
|
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.canAccessAdmin.mockReturnValue(true);
|
|
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("allows superuser sessions to use the configured customer number without admin access", async () => {
|
|
sessionState.canAccessSuperUser.mockReturnValue(true);
|
|
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.canAccessAdmin.mockReturnValue(true);
|
|
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);
|
|
});
|
|
|
|
it("can clear a previously cached fallback customer number", async () => {
|
|
sessionState.canAccessAdmin.mockReturnValue(true);
|
|
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);
|
|
|
|
expect(module.setDraftTransactionCustomerNumber(null)).toBeNull();
|
|
expect(module.getDraftTransactionCustomerNumber()).toBeNull();
|
|
expect(sessionState.runtimeConfigValue.value).toBeNull();
|
|
});
|
|
|
|
it("ignores draft customer config for authenticated customer-only sessions", async () => {
|
|
sessionState.runtimeConfigValue.value = 777;
|
|
|
|
const module = await import("@/composables/useDraftTransactionCustomer.js");
|
|
|
|
expect(module.getDraftTransactionCustomerNumber()).toBeNull();
|
|
await expect(module.ensureDraftTransactionCustomerLoaded()).resolves.toBeNull();
|
|
expect(sessionState.getTransactionDraftCustomerNumberConfig).not.toHaveBeenCalled();
|
|
});
|
|
});
|