Files
NetMesh/components/GroupDetailsPanel.test.tsx

113 lines
3.5 KiB
TypeScript
Raw Permalink Normal View History

import test from "node:test";
import assert from "node:assert/strict";
import {
hasGroupSshFields,
hasGroupTelnetFields,
includeMissingIdentityOption,
resolveGroupFormIdentityId,
selectGroupSshIdentity,
selectGroupTelnetIdentity,
} from "./GroupDetailsPanel.tsx";
test("GroupDetailsPanel treats an empty SSH identity as an explicit setting", () => {
assert.equal(hasGroupSshFields({ identityId: "" }), true);
assert.equal(hasGroupSshFields({}), false);
});
test("GroupDetailsPanel treats cleared telnet credentials as explicit settings", () => {
assert.equal(hasGroupTelnetFields({ telnetUsername: "" }), true);
assert.equal(hasGroupTelnetFields({ telnetPassword: "" }), true);
assert.equal(hasGroupTelnetFields({ telnetIdentityId: "identity-1" }), true);
assert.equal(hasGroupTelnetFields({}), false);
});
test("GroupDetailsPanel replaces manual SSH credentials with a reusable identity", () => {
const result = selectGroupSshIdentity(
{
username: "manual",
password: "secret",
identityFileId: "key-1",
identityFilePaths: ["~/.ssh/id_ed25519"],
},
{
id: "identity-1",
label: "Shared admin",
username: "admin",
authMethod: "password",
created: 1,
},
);
assert.equal(result.identityId, "identity-1");
assert.equal(result.username, "admin");
assert.equal(result.password, undefined);
assert.equal(result.identityFileId, undefined);
assert.equal(result.identityFilePaths, undefined);
});
test("GroupDetailsPanel replaces manual Telnet credentials with a reusable identity", () => {
const result = selectGroupTelnetIdentity(
{ telnetUsername: "manual", telnetPassword: "secret" },
"identity-1",
);
assert.equal(result.telnetIdentityId, "identity-1");
assert.equal(result.telnetUsername, undefined);
assert.equal(result.telnetPassword, undefined);
});
test("GroupDetailsPanel explicitly clears inherited identities for manual credentials", () => {
const ssh = selectGroupSshIdentity({}, undefined, "", "parent-ssh-identity");
const telnet = selectGroupTelnetIdentity({}, "", "parent-telnet-identity");
assert.equal(ssh.identityId, "");
assert.equal(telnet.telnetIdentityId, "");
});
test("GroupDetailsPanel clears key authentication before switching to a manual password", () => {
const selected = selectGroupSshIdentity(
{},
{
id: "key-identity",
label: "Key identity",
username: "admin",
authMethod: "key",
keyId: "key-1",
created: 1,
},
);
const cleared = selectGroupSshIdentity(selected, undefined);
const manual = { ...cleared, username: "operator", password: "secret" };
assert.equal(manual.identityId, undefined);
assert.equal(manual.authMethod, undefined);
assert.equal(manual.username, "operator");
assert.equal(manual.password, "secret");
});
test("GroupDetailsPanel keeps a deleted identity visible so it can be cleared", () => {
const options = includeMissingIdentityOption([], "deleted-identity", "Identity not found");
assert.deepEqual(options, [{ value: "deleted-identity", label: "Identity not found" }]);
});
test("GroupDetailsPanel shows saved child manual credentials instead of a parent identity", () => {
assert.equal(
resolveGroupFormIdentityId(
{ username: "child-user", password: "child-password" },
"parent-ssh-identity",
"ssh",
),
undefined,
);
assert.equal(
resolveGroupFormIdentityId(
{ telnetUsername: "child-user", telnetPassword: "child-password" },
"parent-telnet-identity",
"telnet",
),
undefined,
);
});