import test from "node:test"; import assert from "node:assert/strict"; import { parseCsvRows, importDriversCsv, importCarsCsv } from "../src/csv_import.js"; function makeUid() { let next = 0; return (prefix) => `${prefix}_${++next}`; } test("CSV parser supports quoted commas, semicolons, tabs, and BOM headers", () => { assert.deepEqual(parseCsvRows('\uFEFFname,brand\n"Driver, One","Team ""A"""')[0].values, { name: "Driver, One", brand: 'Team "A"', }); assert.equal(parseCsvRows("name;transponder\nDriver One;123")[0].values.transponder, "123"); assert.equal(parseCsvRows("name\ttransponder\nCar One\t456")[0].values.transponder, "456"); }); test("driver CSV import creates classes and merges exported or external rows safely", () => { const result = importDriversCsv( "id;namn;klass;märke;transponder;klubb;land\n;New Driver;2WD;Associated;222;JMK;SE\ndriver_1;Existing Driver;4WD;;111;;", { classes: [{ id: "class_4wd", name: "4WD" }], drivers: [{ id: "driver_1", name: "Old Name", classId: "class_4wd", brand: "Xray", transponder: "111", profileId: "profile_1", club: "JMK", country: "SE" }], uid: makeUid(), } ); assert.equal(result.added, 1); assert.equal(result.updated, 1); assert.equal(result.skipped, 0); assert.equal(result.classes.find((item) => item.name === "2WD")?.id, "class_1"); assert.equal(result.drivers.find((item) => item.id === "driver_1")?.name, "Existing Driver"); assert.equal(result.drivers.find((item) => item.id === "driver_1")?.brand, "Xray"); assert.equal(result.drivers.find((item) => item.transponder === "222")?.classId, "class_1"); }); test("car CSV import matches transponders and skips nameless rows", () => { const result = importCarsCsv( "name,brand,transponder\nUpdated Car,,123\nNew Car,Schumacher,456\n,Missing,789", { cars: [{ id: "car_1", name: "Old Car", brand: "Associated", transponder: "123" }], uid: makeUid(), } ); assert.equal(result.added, 1); assert.equal(result.updated, 1); assert.equal(result.skipped, 1); assert.equal(result.cars.find((item) => item.id === "car_1")?.name, "Updated Car"); assert.equal(result.cars.find((item) => item.id === "car_1")?.brand, "Associated"); });