Files
Termix/src/backend/tests/hosts/ssh-options.test.ts
T

73 lines
2.2 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
hasSshOptions,
parseSshOptions,
sshOptionsForWrite,
} from "../../hosts/ssh-options.js";
describe("parseSshOptions", () => {
it("keeps the connection options, typed, and drops everything else", () => {
expect(
parseSshOptions(
JSON.stringify({
keepaliveInterval: "30",
keepaliveCountMax: 3,
allowLegacyAlgorithms: false,
agentSocketPath: "/run/agent",
agentIdentity: null,
agentForwarding: true,
environmentVariables: [{ key: "A", value: 1 }, null],
theme: "nord",
cfAccessClientId: "gone",
}),
),
).toEqual({
keepaliveInterval: 30,
keepaliveCountMax: 3,
allowLegacyAlgorithms: false,
agentSocketPath: "/run/agent",
agentIdentity: null,
agentForwarding: true,
environmentVariables: [{ key: "A", value: "1" }],
});
});
it("reads twice-stringified rows and ignores garbage", () => {
expect(
parseSshOptions(JSON.stringify(JSON.stringify({ keepaliveInterval: 5 }))),
).toEqual({ keepaliveInterval: 5 });
expect(parseSshOptions("nope")).toEqual({});
expect(parseSshOptions(null)).toEqual({});
expect(parseSshOptions([1])).toEqual({});
});
it("says whether a value carries any option", () => {
expect(hasSshOptions({ theme: "nord" })).toBe(false);
expect(hasSshOptions({ agentForwarding: false })).toBe(true);
});
});
describe("sshOptionsForWrite", () => {
it("stores the payload's own options", () => {
expect(
sshOptionsForWrite({ sshOptions: { keepaliveInterval: 9, junk: 1 } }),
).toBe(JSON.stringify({ keepaliveInterval: 9 }));
expect(sshOptionsForWrite({ sshOptions: null })).toBeNull();
});
it("takes them from a 2.8 terminalConfig when the payload has none", () => {
expect(
sshOptionsForWrite({
terminalConfig: { keepaliveCountMax: 2, theme: "nord" },
}),
).toBe(JSON.stringify({ keepaliveCountMax: 2 }));
});
it("leaves the column alone when neither carries any", () => {
expect(sshOptionsForWrite({ terminalConfig: { theme: "nord" } })).toBe(
undefined,
);
expect(sshOptionsForWrite({})).toBeUndefined();
});
});