Files
Termix/src/ui/tests/sidebar/HostEditorData.test.ts
T

138 lines
4.0 KiB
TypeScript
Raw Normal View History

+2
2026-06-16 15:59:53 -05:00
import { describe, it, expect } from "vitest";
import {
createHostEditorForm,
buildHostEditorPayload,
type HostProtocols,
+8
2026-07-19 12:29:52 -05:00
} from "../../sidebar/HostEditorData";
+2
2026-06-16 15:59:53 -05:00
const sshOnly: HostProtocols = {
enableSsh: true,
enableRdp: false,
enableVnc: false,
enableTelnet: false,
};
describe("buildHostEditorPayload auth field isolation", () => {
it("only sends the password when authType is password", () => {
const form = {
...createHostEditorForm(null),
authType: "password" as const,
password: "hunter2",
key: "PRIVATE KEY",
keyPassword: "kp",
credentialId: "5",
};
const payload = buildHostEditorPayload(form, sshOnly);
expect(payload.password).toBe("hunter2");
expect(payload.key).toBeNull();
expect(payload.keyPassword).toBeNull();
expect(payload.credentialId).toBeNull();
});
it("drops the credentialId when switching a cloned host away from credential auth", () => {
const form = {
...createHostEditorForm(null),
authType: "password" as const,
password: "newpass",
credentialId: "12",
};
const payload = buildHostEditorPayload(form, sshOnly);
expect(payload.credentialId).toBeNull();
expect(payload.password).toBe("newpass");
});
+8
2026-07-19 12:29:52 -05:00
it("sends credentialId and optional password when authType is credential", () => {
+2
2026-06-16 15:59:53 -05:00
const form = {
...createHostEditorForm(null),
authType: "credential" as const,
credentialId: "7",
+8
2026-07-19 12:29:52 -05:00
password: "host-specific-password",
+2
2026-06-16 15:59:53 -05:00
key: "leftover-key",
};
const payload = buildHostEditorPayload(form, sshOnly);
expect(payload.credentialId).toBe(7);
+8
2026-07-19 12:29:52 -05:00
expect(payload.password).toBe("host-specific-password");
+2
2026-06-16 15:59:53 -05:00
expect(payload.key).toBeNull();
});
2026-06-29 13:28:26 -05:00
it("sends key fields and optional password when authType is key", () => {
+2
2026-06-16 15:59:53 -05:00
const form = {
...createHostEditorForm(null),
authType: "key" as const,
key: "MY KEY",
keyType: "ssh-ed25519",
password: "leftover",
credentialId: "3",
};
const payload = buildHostEditorPayload(form, sshOnly);
expect(payload.key).toBe("MY KEY");
expect(payload.keyType).toBe("ssh-ed25519");
2026-06-29 13:28:26 -05:00
expect(payload.password).toBe("leftover");
+2
2026-06-16 15:59:53 -05:00
expect(payload.credentialId).toBeNull();
});
2026-06-29 13:28:26 -05:00
it("preserves agentSocketPath in terminalConfig when authType is agent", () => {
const form = {
...createHostEditorForm(null),
authType: "agent" as const,
agentSocketPath: "/run/user/1000/gnupg/S.gpg-agent.ssh",
};
const payload = buildHostEditorPayload(form, sshOnly);
const tc = payload.terminalConfig as Record<string, unknown> | null;
expect(tc?.agentSocketPath).toBe("/run/user/1000/gnupg/S.gpg-agent.ssh");
expect(payload.password).toBeNull();
expect(payload.key).toBeNull();
});
it("sets agentSocketPath to null in payload when authType is agent but path is empty", () => {
const form = {
...createHostEditorForm(null),
authType: "agent" as const,
agentSocketPath: "",
};
const payload = buildHostEditorPayload(form, sshOnly);
const tc = payload.terminalConfig as Record<string, unknown> | null;
expect(tc?.agentSocketPath).toBeNull();
});
it("nulls out agentSocketPath when switching away from agent auth", () => {
const form = {
...createHostEditorForm(null),
authType: "password" as const,
password: "mypass",
agentSocketPath: "/run/user/1000/gnupg/S.gpg-agent.ssh",
};
const payload = buildHostEditorPayload(form, sshOnly);
const tc = payload.terminalConfig as Record<string, unknown> | null;
expect(tc?.agentSocketPath).toBeNull();
});
+8
2026-07-19 12:29:52 -05:00
it("preserves sudo password autofill settings", () => {
const form = {
...createHostEditorForm(null),
sudoPasswordAutoFill: true,
sudoPassword: "sudo-secret",
};
const payload = buildHostEditorPayload(form, sshOnly);
const tc = payload.terminalConfig as Record<string, unknown> | null;
expect(tc?.sudoPasswordAutoFill).toBe(true);
expect(tc?.sudoPassword).toBe("sudo-secret");
});
+2
2026-06-16 15:59:53 -05:00
});