- 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.
164 lines
5.0 KiB
JavaScript
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();
|
|
});
|
|
});
|