Files
pleno-vue/tests/unit/collected-order-invoices-closed-at-modal.spec.js
T
Jeppe Bundgaard b39b458f4f Add .prettierrc.json and refactor test files for improved formatting consistency:
- Introduced `.prettierrc.json` to enforce consistent code formatting across the project.
- Updated unit and e2e test files to address formatting issues, improve readability, and ensure alignment with the new Prettier configuration.
2026-04-13 09:13:27 +02:00

164 lines
5.0 KiB
JavaScript

// @vitest-environment jsdom
import { beforeEach, describe, expect, it, vi } from "vitest";
const mocks = vi.hoisted(() => ({
swalFire: vi.fn(),
swalShowValidationMessage: vi.fn(),
swalClose: vi.fn(),
setColumn: vi.fn(),
showEditObjectFieldForm: vi.fn(),
authenticatedRequest: vi.fn(),
}));
vi.mock("sweetalert2", () => ({
default: {
fire: mocks.swalFire,
showValidationMessage: mocks.swalShowValidationMessage,
close: mocks.swalClose,
},
}));
vi.mock("@/components/session/authenticatedRequest.vue", () => ({
authenticatedRequest: mocks.authenticatedRequest,
}));
vi.mock("@/components/session/token/SessionUser/Objects/ObjectsGlobal.vue", () => ({
ObjectsGlobal: {
set: {
column: mocks.setColumn,
},
showEditObjectFieldForm: mocks.showEditObjectFieldForm,
showCreateObjectForm: vi.fn(),
showDeleteObjectForm: vi.fn(),
add: { object: vi.fn() },
get: { objects: vi.fn(), object: vi.fn() },
delete: { object: vi.fn() },
language: {
field: () => "Rediger arkiveret",
save: "Gem",
cancel: "Annuller",
clear: "Ryd",
},
},
}));
vi.mock("@/components/session/token/SessionUser.vue", () => ({
SessionUser: {
functions: {
parseErrorMessage: vi.fn(() => "error"),
redirectTo: { superUser: vi.fn() },
currency: { toLocal: (value) => String(value) },
},
objects: {
global: {
language: {
no_data: "Ingen data",
},
},
},
},
}));
vi.mock("@/i18n", () => ({
default: {
global: {
t: (key) => key,
},
},
}));
vi.mock("@/services/economicTransferQueue.js", () => ({
buildCollectedInvoiceEconomicPayload: vi.fn(() => ({})),
enqueueEconomicTransferJob: vi.fn(),
fetchEconomicTransferJobStatus: vi.fn(),
retryEconomicTransferJob: vi.fn(),
}));
vi.mock("@/components/displays/modals/PickCustomerInvoiceCollectionModal.vue", () => ({
default: {
name: "PickCustomerInvoiceCollectionModalStub",
template: "<div />",
},
}));
import { CollectedOrderInvoices } from "@/components/session/token/SessionUser/Objects/CollectedOrderInvoices.vue";
describe("CollectedOrderInvoices closed_at edit modal", () => {
beforeEach(() => {
document.body.innerHTML = "";
mocks.swalFire.mockReset();
mocks.swalShowValidationMessage.mockReset();
mocks.swalClose.mockReset();
mocks.setColumn.mockReset();
mocks.showEditObjectFieldForm.mockReset();
mocks.authenticatedRequest.mockReset();
});
it("opens dedicated closed_at modal, normalizes date value, and saves API date", async () => {
const onAfterSubmit = vi.fn();
mocks.setColumn.mockResolvedValue({});
mocks.swalFire.mockImplementation(async (options) => {
document.body.innerHTML = options.html;
options.didOpen?.();
const input = document.getElementById("collected-order-invoice-closed-at-input");
input.value = "2026-04-08";
await options.preConfirm();
return { isConfirmed: true };
});
await CollectedOrderInvoices.showEditObjectFieldForm(14560, "closed_at", "2026-04-08 11:43:01", onAfterSubmit);
expect(mocks.swalFire).toHaveBeenCalledTimes(1);
const modalOptions = mocks.swalFire.mock.calls[0][0];
expect(modalOptions.html).toContain('type="date"');
expect(modalOptions.html).toContain('value="2026-04-08"');
expect(mocks.setColumn).toHaveBeenCalledTimes(1);
const setColumnArgs = mocks.setColumn.mock.calls[0];
expect(setColumnArgs[0]).toBe("/collected-invoices");
expect(setColumnArgs[1]).toBe(14560);
expect(setColumnArgs[2]).toBe("closed_at");
expect(setColumnArgs[3]).toBe("2026-04-08");
expect(onAfterSubmit).toHaveBeenCalledTimes(1);
});
it("supports clearing closed_at and saves null", async () => {
const onAfterSubmit = vi.fn();
mocks.setColumn.mockResolvedValue({});
mocks.swalFire.mockImplementation(async (options) => {
document.body.innerHTML = options.html;
options.didOpen?.();
const clearButton = document.getElementById("collected-order-invoice-closed-at-clear-button");
clearButton.click();
await options.preConfirm();
return { isConfirmed: true };
});
await CollectedOrderInvoices.showEditObjectFieldForm(14561, "closed_at", "2026-04-08 11:43:01", onAfterSubmit);
expect(mocks.setColumn).toHaveBeenCalledTimes(1);
expect(mocks.setColumn.mock.calls[0][3]).toBeNull();
expect(onAfterSubmit).toHaveBeenCalledTimes(1);
expect(mocks.swalShowValidationMessage).not.toHaveBeenCalled();
});
it("falls back to generic object editor for non-closed_at columns", async () => {
const onAfterSubmit = vi.fn();
mocks.showEditObjectFieldForm.mockResolvedValue({});
await CollectedOrderInvoices.showEditObjectFieldForm(11, "name", "Invoice name", onAfterSubmit);
expect(mocks.showEditObjectFieldForm).toHaveBeenCalledTimes(1);
expect(mocks.showEditObjectFieldForm).toHaveBeenCalledWith(
CollectedOrderInvoices,
11,
"name",
"Invoice name",
onAfterSubmit
);
expect(mocks.swalFire).not.toHaveBeenCalled();
});
});