Files
2026-05-27 23:47:53 +01:00

62 lines
2.4 KiB
TypeScript

import { describe, expect, it } from "@suaveplan/testing/runner";
import { SurrealAdapter } from "../../src/adapter/adapter/adapter.js";
import { SURREAL_CODES } from "../../src/errors/index.js";
import { connectAdapter } from "./helpers/connect.js";
import { randomNamespace } from "./helpers/random-ns.js";
import { surrealUnavailable } from "./integration-setup.js";
describe.skipIf(surrealUnavailable)(
"SurrealAdapter — integration (real SurrealDB v3.0.4)",
() => {
it("connect → query RETURN { n: 1 } → disconnect", async () => {
// SurrealDB v3 dropped table-less SELECT — `SELECT 1 AS n` requires
// FROM in v3. RETURN evaluates an expression and returns it directly.
const { adapter } = await connectAdapter();
try {
const rows = await adapter.query<{ n: number }>(
"RETURN { n: 1 }"
);
expect(rows).toEqual([{ n: 1 }]);
} finally {
await adapter.disconnect();
}
}, 30000);
it("parameterised query round-trips values (regression for content-drop class)", async () => {
const { adapter } = await connectAdapter();
try {
const rows = await adapter.query<{ v: string }>(
"RETURN { v: $p0 }",
["abc"]
);
expect(rows).toEqual([{ v: "abc" }]);
} finally {
await adapter.disconnect();
}
}, 30000);
it("DDL persists across queries on the live engine", async () => {
const ns = randomNamespace();
const { adapter } = await connectAdapter({
namespaceOverride: ns,
databaseOverride: ns,
});
try {
await adapter.execute("DEFINE TABLE t SCHEMAFULL");
const info =
await adapter.query<Record<string, unknown>>("INFO FOR DB");
expect(info.length).toBeGreaterThan(0);
} finally {
await adapter.disconnect();
}
}, 30000);
it("query before connect throws DB.NOT_CONNECTED", async () => {
const adapter = new SurrealAdapter();
await expect(adapter.query("SELECT 1")).rejects.toMatchObject({
code: SURREAL_CODES.NOT_CONNECTED,
});
}, 5000);
}
);