muddle/tests/d1.test.ts
2026-10-23 08:53:07 -04:00

66 lines
1.5 KiB
TypeScript

import { afterAll, describe, expect, test } from "bun:test";
import { createD1Driver } from "../modules/database/src/adapters/d1.ts";
const server = Bun.serve({
port: 0,
async fetch(request) {
const payload = (await request.json()) as {
sql?: string;
params?: unknown[];
};
if (payload.sql?.startsWith("SELECT")) {
return Response.json({
success: true,
result: [
{
results: [
{ id: "1", title: "First", position: 1 },
],
success: true,
meta: { changes: 1 },
},
],
});
}
return Response.json({
success: true,
result: [{ results: [], success: true, meta: { changes: 1 } }],
});
},
});
afterAll(() => {
server.stop(true);
});
describe("d1", () => {
test("sends the statements to the api", async () => {
const driver = createD1Driver({
accountId: "account",
databaseId: "database",
apiToken: "token",
endpoint: `http://localhost:${server.port}/query`,
});
const rows = await driver.query("SELECT * FROM notes");
expect(rows).toHaveLength(1);
expect(rows[0]?.title).toBe("First");
const result = await driver.execute("INSERT INTO notes VALUES (1)");
expect(result.changes).toBe(1);
await driver.close();
});
test("uses the placeholders of sqlite", () => {
const driver = createD1Driver({
accountId: "account",
databaseId: "database",
apiToken: "token",
});
expect(driver.placeholder(1)).toBe("?");
expect(driver.dialect).toBe("sqlite");
});
});