Initial Commit
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
import { createDbAdapter, unregisterEngine } from "@suaveplan/api-db-adapter";
|
||||
import type { TenantId } from "@suaveplan/api-types/tenant";
|
||||
import { afterEach, describe, expect, it } from "@suaveplan/testing/runner";
|
||||
import {
|
||||
registerSqliteMemoryEngine,
|
||||
runSqliteMemoryMigrations,
|
||||
type SqliteMigrationsFsReader,
|
||||
} from "../../src/index.js";
|
||||
|
||||
/**
|
||||
* Integration test mirroring how Stage-5 `createTestHost` will wire this
|
||||
* adapter when the api-host helper lands: register the engine, construct a
|
||||
* `DbAdapter` via the same `createDbAdapter` Stage-4 entry point production
|
||||
* uses, drive migrations, and exercise the scoped surface.
|
||||
*/
|
||||
describe("api-db-sqlite-memory integration", () => {
|
||||
afterEach(() => unregisterEngine("sqlite-memory"));
|
||||
|
||||
it('createTestHost resolves engine:"sqlite-memory" to this adapter', {
|
||||
timeout: 5000,
|
||||
}, async () => {
|
||||
registerSqliteMemoryEngine();
|
||||
const adapter = await createDbAdapter({
|
||||
engine: "sqlite-memory",
|
||||
url: ":memory:",
|
||||
});
|
||||
try {
|
||||
expect(adapter.admin.engine).toBe("sqlite-memory");
|
||||
} finally {
|
||||
await adapter.close();
|
||||
}
|
||||
});
|
||||
|
||||
it("end-to-end: migrations + scoped writes + admin reads", {
|
||||
timeout: 5000,
|
||||
}, async () => {
|
||||
registerSqliteMemoryEngine();
|
||||
const adapter = await createDbAdapter({
|
||||
engine: "sqlite-memory",
|
||||
url: ":memory:",
|
||||
tenantColumn: "tenant_id",
|
||||
});
|
||||
try {
|
||||
const fs: SqliteMigrationsFsReader = {
|
||||
readdir: async () => ["001_init.sql"],
|
||||
readFile: async () =>
|
||||
"CREATE TABLE posts (id INTEGER PRIMARY KEY, tenant_id TEXT, title TEXT)",
|
||||
};
|
||||
await runSqliteMemoryMigrations({
|
||||
plugin: "posts",
|
||||
admin: adapter.admin,
|
||||
migrationsDir: "/v",
|
||||
fs,
|
||||
});
|
||||
const acme = adapter.scoped("acme" as TenantId);
|
||||
await acme.execute("INSERT INTO posts (title) VALUES (?)", [
|
||||
"hello",
|
||||
]);
|
||||
const rows = await adapter.admin.query<
|
||||
{ title: string; tenant_id: string }[]
|
||||
>("SELECT title, tenant_id FROM posts");
|
||||
expect(rows).toEqual([{ title: "hello", tenant_id: "acme" }]);
|
||||
} finally {
|
||||
await adapter.close();
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user