import { describe, expect, test } from "bun:test"; import sqlInsertGenerator from "../src/utils/sql-insert-generator"; import sqlValuePlaceholder from "../src/utils/sql-value-placeholder"; describe("sqlValuePlaceholder", () => { test("booleans become 0 / 1", () => { expect(sqlValuePlaceholder({ value: false })).toEqual({ placeholder: "?", value: 0 }); expect(sqlValuePlaceholder({ value: true })).toEqual({ placeholder: "?", value: 1 }); }); test("0 is kept", () => { expect(sqlValuePlaceholder({ value: 0 }).value).toBe(0); }); test("embeddings use VEC_FromText", () => { expect(sqlValuePlaceholder({ value: [0.1, 0.2] })).toEqual({ placeholder: "VEC_FromText(?)", value: "[0.1,0.2]", }); }); test("empty string: kept for text columns, NULL otherwise", () => { expect(sqlValuePlaceholder({ value: "", field: { fieldName: "t", dataType: "VARCHAR" } }).value).toBe(""); expect(sqlValuePlaceholder({ value: "", field: { fieldName: "n", dataType: "INT" } }).value).toBeNull(); expect(sqlValuePlaceholder({ value: "" }).value).toBeNull(); }); test("function values are called once", () => { let calls = 0; const res = sqlValuePlaceholder({ value: () => { calls++; return { value: "POINT(1 2)", placeholder: "ST_GeomFromText(?)" }; }, }); expect(calls).toBe(1); expect(res).toEqual({ placeholder: "ST_GeomFromText(?)", value: "POINT(1 2)" }); }); }); describe("sqlInsertGenerator", () => { test("builds a multi-row insert with quoted identifiers", () => { const res = sqlInsertGenerator({ tableName: "items", data: [ { name: "a", active: false, qty: 0 }, { name: "b", emb: [1, 2] }, ], }); expect(res?.query).toBe( "INSERT INTO `items` (`name`,`active`,`qty`,`emb`) VALUES (?,?,?,?),(?,?,?,VEC_FromText(?))", ); expect(res?.values).toEqual(["a", 0, 0, null, "b", null, null, "[1,2]"]); }); });