88 lines
3.6 KiB
TypeScript
88 lines
3.6 KiB
TypeScript
import { TransactionsController } from "../src/transactions/transactions.controller";
|
|
|
|
describe("TransactionsController", () => {
|
|
const createController = () => {
|
|
const service = {
|
|
list: jest.fn().mockResolvedValue([]),
|
|
sync: jest.fn().mockResolvedValue({ created: 0 }),
|
|
summary: jest.fn().mockResolvedValue({ total: "0.00", count: 0 }),
|
|
updateDerived: jest.fn().mockResolvedValue({}),
|
|
createManualTransaction: jest.fn().mockResolvedValue({ id: "tx_1" }),
|
|
previewCsv: jest.fn().mockResolvedValue({ headers: ["Date", "Description", "Amount"] }),
|
|
importCsvBatch: jest.fn().mockResolvedValue({ totalFiles: 2, imported: 3 }),
|
|
cashflow: jest.fn().mockResolvedValue([]),
|
|
merchantInsights: jest.fn().mockResolvedValue([])
|
|
};
|
|
return { controller: new TransactionsController(service as any), service };
|
|
};
|
|
|
|
it("lists transactions", async () => {
|
|
const { controller, service } = createController();
|
|
const result = await controller.list("user_1");
|
|
expect(service.list).toHaveBeenCalledWith(
|
|
"user_1",
|
|
expect.objectContaining({ page: 1, limit: 25 })
|
|
);
|
|
expect(result.data).toEqual([]);
|
|
});
|
|
|
|
it("syncs transactions", async () => {
|
|
const { controller, service } = createController();
|
|
const result = await controller.sync("user_1", "2025-01-01", "2025-01-31");
|
|
expect(service.sync).toHaveBeenCalledWith("user_1", "2025-01-01", "2025-01-31");
|
|
expect(result.data).toEqual({ created: 0 });
|
|
});
|
|
|
|
it("returns summary", async () => {
|
|
const { controller, service } = createController();
|
|
const result = await controller.summary("user_1", "2025-01-01", "2025-01-31");
|
|
expect(service.summary).toHaveBeenCalledWith("user_1", "2025-01-01", "2025-01-31");
|
|
expect(result.data.total).toBe("0.00");
|
|
});
|
|
|
|
it("creates manual transaction", async () => {
|
|
const { controller, service } = createController();
|
|
const result = await controller.manual("user_1", {
|
|
date: "2025-01-01",
|
|
description: "Manual",
|
|
amount: 10
|
|
});
|
|
expect(service.createManualTransaction).toHaveBeenCalledWith("user_1", {
|
|
date: "2025-01-01",
|
|
description: "Manual",
|
|
amount: 10
|
|
});
|
|
expect(result.data.id).toBe("tx_1");
|
|
});
|
|
|
|
it("imports a batch of CSV files", async () => {
|
|
const { controller, service } = createController();
|
|
const files = [{ originalname: "one.csv" }, { originalname: "two.csv" }] as Express.Multer.File[];
|
|
const result = await controller.importCsvBatch("user_1", files, "{\"date\":\"Date\"}");
|
|
expect(service.importCsvBatch).toHaveBeenCalledWith("user_1", files, { mapping: "{\"date\":\"Date\"}", mappings: undefined });
|
|
expect(result.data).toEqual({ totalFiles: 2, imported: 3 });
|
|
});
|
|
|
|
it("previews a CSV file", async () => {
|
|
const { controller, service } = createController();
|
|
const file = { originalname: "preview.csv" } as Express.Multer.File;
|
|
const result = await controller.previewCsv("user_1", file);
|
|
expect(service.previewCsv).toHaveBeenCalledWith("user_1", file);
|
|
expect(result.data.headers).toEqual(["Date", "Description", "Amount"]);
|
|
});
|
|
|
|
it("returns cashflow", async () => {
|
|
const { controller, service } = createController();
|
|
const result = await controller.cashflow("user_1", 3);
|
|
expect(service.cashflow).toHaveBeenCalledWith("user_1", 3);
|
|
expect(result.data).toEqual([]);
|
|
});
|
|
|
|
it("returns merchant insights", async () => {
|
|
const { controller, service } = createController();
|
|
const result = await controller.merchants("user_1", 5);
|
|
expect(service.merchantInsights).toHaveBeenCalledWith("user_1", 5);
|
|
expect(result.data).toEqual([]);
|
|
});
|
|
});
|