129 lines · 4.9 KB
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();