Files
Termix/plugins/network-topology/tests/backend/repository.test.ts
T

56 lines
1.7 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { createTestDb, type TestDb } from "@termix/plugin-sdk/testing";
import { graphs } from "../../src/backend/tables.js";
import {
createGraphRepository,
type GraphRepository,
} from "../../src/backend/repository.js";
import { pluginDir } from "./helpers";
let db: TestDb;
let repo: GraphRepository;
beforeEach(async () => {
db = await createTestDb(pluginDir, {
before: (sqlite) =>
sqlite.exec("INSERT INTO users (id) VALUES ('user-1'), ('user-2')"),
});
repo = createGraphRepository(db.database, await db.database.define(graphs));
});
afterEach(() => db.close());
describe("graph repository", () => {
it("finds, creates, and updates topology by user id", async () => {
expect(await repo.findByUserId("user-1")).toBeNull();
await repo.upsertForUser(
"user-1",
JSON.stringify({ nodes: [{ id: "host-1" }], edges: [] }),
);
expect(await repo.findByUserId("user-1")).toMatchObject({
userId: "user-1",
topology: '{"nodes":[{"id":"host-1"}],"edges":[]}',
});
await repo.upsertForUser(
"user-1",
JSON.stringify({ nodes: [], edges: [{ id: "edge-1" }] }),
);
expect(await repo.findByUserId("user-1")).toMatchObject({
userId: "user-1",
topology: '{"nodes":[],"edges":[{"id":"edge-1"}]}',
});
});
it("keeps rows for different users separate", async () => {
await repo.upsertForUser("user-1", '{"nodes":[]}');
await repo.upsertForUser("user-2", '{"nodes":["a"]}');
expect((await repo.findByUserId("user-1"))?.topology).toBe('{"nodes":[]}');
expect((await repo.findByUserId("user-2"))?.topology).toBe(
'{"nodes":["a"]}',
);
});
});