import { beforeEach, describe, expect, mock, test } from "bun:test";
import { Database } from "bun:sqlite";
import { readFileSync } from "node:fs";
import { memoryScopes } from "../scoped-db/testing";
type Value = string | number | null;
function fakeD1(db: Database) {
const prepare = (sql: string) => {
let params: Value[] = [];
const statement = {
bind(...values: Value[]) {
params = values;
return statement;
},
async run() {
db.query(sql).run(...params);
return { success: true, meta: {} };
},
async all<T>() {
return { results: db.query(sql).all(...params) as T[] };
},
exec: () => db.query(sql).run(...params),
};
return statement;
};
return {
prepare,
async batch(statements: Array<{ exec: () => unknown }>) {
db.transaction(() => statements.forEach((statement) => statement.exec()))();
return [];
},
};
}
const advisoryDb = new Database(":memory:");
advisoryDb.exec(
readFileSync(new URL("../../../migrations-advisories/0001_published_advisory_packages.sql", import.meta.url), "utf8"),
);
const scopes = memoryScopes();