Files
pleno-vue/tests/unit/orders-attachments-request.spec.js
2026-07-15 19:42:27 +02:00

89 lines
2.3 KiB
JavaScript

import { beforeEach, describe, expect, it, vi } from "vitest";
const sessionUserRequestMock = vi.hoisted(() =>
vi.fn(async () => ({
data: {
data: [{ id: 301, file_name: "invoice.pdf" }],
},
}))
);
const authenticatedRequestMock = vi.hoisted(() => vi.fn());
vi.mock("sweetalert2", () => ({
default: {
fire: vi.fn(() => Promise.resolve()),
close: vi.fn(),
},
}));
vi.mock("@/i18n", () => ({
default: {
global: {
t: (key) => key,
},
},
}));
vi.mock("@/components/session/token/SessionUser.vue", () => ({
SessionUser: {
objects: {
orders: {
functions: {
get_customer_id: vi.fn(),
},
set: {
customer_id: vi.fn(),
invoice_collection_id: vi.fn(),
},
},
collectedOrderInvoices: {
functions: {
showInvoiceCollectionPickerForm: vi.fn(),
},
},
},
request: sessionUserRequestMock,
functions: {
parseErrorMessage: vi.fn(() => "error"),
},
},
}));
vi.mock("@/components/session/authenticatedRequest.vue", () => ({
authenticatedRequest: authenticatedRequestMock,
}));
import { Orders } from "@/components/session/token/SessionUser/Objects/Orders.vue";
describe("Orders attachments requests", () => {
beforeEach(() => {
sessionUserRequestMock.mockClear();
authenticatedRequestMock.mockReset();
});
it("limits order attachment list GET requests without assigning a queue group", async () => {
await expect(Orders.functions.fetchAttachments(42)).resolves.toEqual([{ id: 301, file_name: "invoice.pdf" }]);
expect(sessionUserRequestMock).toHaveBeenCalledTimes(1);
expect(sessionUserRequestMock).toHaveBeenCalledWith("/orders/attachments", "GET", { id: 42 }, null, null, {
concurrencyLimit: 5,
});
});
it("fetches authenticated attachment content as a blob", async () => {
const blob = new Blob(["pdf"], { type: "application/pdf" });
authenticatedRequestMock.mockResolvedValue({ data: blob });
await expect(Orders.functions.fetchAttachmentContent(42, 301, "inline")).resolves.toBe(blob);
expect(authenticatedRequestMock).toHaveBeenCalledWith(
"/orders/attachments/content",
"GET",
{ order_id: 42, attachment_id: 301, disposition: "inline" },
null,
null,
{ concurrencyLimit: 5, responseType: "blob" }
);
});
});