mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-28 22:25:24 +00:00
62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
getProxmoxSource,
|
|
indexImportedGuests,
|
|
proxmoxSourceKey,
|
|
} from "../../src/backend/guest-sync.js";
|
|
|
|
const source = {
|
|
source: "proxmox",
|
|
sourceHostId: 1,
|
|
node: "pve",
|
|
vmid: 101,
|
|
type: "qemu",
|
|
};
|
|
|
|
describe("getProxmoxSource", () => {
|
|
it("reads the source from an object or a JSON string", () => {
|
|
expect(getProxmoxSource({ source })).toEqual(source);
|
|
expect(getProxmoxSource(JSON.stringify({ source }))).toEqual(source);
|
|
});
|
|
|
|
it("refuses a malformed source", () => {
|
|
expect(getProxmoxSource(null)).toBeNull();
|
|
expect(getProxmoxSource({ source: { ...source, vmid: "101" } })).toBeNull();
|
|
expect(getProxmoxSource({ source: { ...source, type: "vm" } })).toBeNull();
|
|
});
|
|
});
|
|
|
|
describe("indexImportedGuests", () => {
|
|
// The host row carries no proxmoxConfig since 2.9.0; the source only
|
|
// exists in the plugin's host settings.
|
|
const hosts = [
|
|
{ id: 10, name: "guest-a" },
|
|
{ id: 11, name: "guest-b" },
|
|
{ id: 12, name: "manual" },
|
|
];
|
|
|
|
it("matches hosts to guests through their settings", () => {
|
|
const index = indexImportedGuests(
|
|
hosts,
|
|
[
|
|
{ hostId: 10, value: { source, lastSyncAt: "x" } },
|
|
{ hostId: 11, value: { source: { ...source, sourceHostId: 2 } } },
|
|
],
|
|
1,
|
|
);
|
|
expect([...index.keys()]).toEqual([proxmoxSourceKey(source as never)]);
|
|
const entry = index.get("1:pve:qemu:101")!;
|
|
expect(entry.host.id).toBe(10);
|
|
expect(entry.config.lastSyncAt).toBe("x");
|
|
});
|
|
|
|
it("ignores settings for hosts the user does not own", () => {
|
|
const index = indexImportedGuests(
|
|
hosts,
|
|
[{ hostId: 99, value: { source } }],
|
|
1,
|
|
);
|
|
expect(index.size).toBe(0);
|
|
});
|
|
});
|