diff --git a/src/csv-loader/fixtures/order_rev.csv b/src/csv-loader/fixtures/order_rev.csv new file mode 100644 index 0000000..e71fa01 --- /dev/null +++ b/src/csv-loader/fixtures/order_rev.csv @@ -0,0 +1,3 @@ +id,user,total +string,string,int +o01,u01,100 diff --git a/src/csv-loader/fixtures/user_rev.csv b/src/csv-loader/fixtures/user_rev.csv new file mode 100644 index 0000000..33e3e89 --- /dev/null +++ b/src/csv-loader/fixtures/user_rev.csv @@ -0,0 +1,5 @@ +# orders := ~order_rev(user) +id,name +string,string +u01,Alice +u02,Bob diff --git a/src/csv-loader/integration.test.ts b/src/csv-loader/integration.test.ts new file mode 100644 index 0000000..a1ef7df --- /dev/null +++ b/src/csv-loader/integration.test.ts @@ -0,0 +1,31 @@ +import { describe, it, expect } from "vitest"; +import { parseCsv } from "./loader"; +import * as path from "path"; +import * as fs from "fs"; + +const fixturesDir = path.join(__dirname, "fixtures"); + +describe("parseCsv - integration: loading two CSV tables from fixtures", () => { + it("should load user_rev and order_rev tables and resolve orders array with correct length", () => { + const userCsv = fs.readFileSync( + path.join(fixturesDir, "user_rev.csv"), + "utf-8", + ); + + const result = parseCsv(userCsv, { + emitTypes: false, + currentFilePath: path.join(fixturesDir, "user_rev.csv"), + }); + + expect(result.data).toHaveLength(2); + + // Alice (u01) should have 1 order + const aliceOrders = result.data[0].orders as Record[]; + expect(aliceOrders).toHaveLength(1); + expect(aliceOrders[0].id).toBe("o01"); + + // Bob (u02) should have 0 orders + const bobOrders = result.data[1].orders as Record[]; + expect(bobOrders).toHaveLength(0); + }); +});