Files
Netcatty/components/GroupDetailsPanel.test.tsx
T
aebe9944ed feat: inherit X11 forwarding from group defaults (#3777)
* feat: inherit X11 forwarding from group defaults

Hosts that leave the toggle unset pick up the nearest group's X11
forwarding setting through applyGroupDefaults. An explicit host value
still wins, and the default stays off.

Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com>

* fix: show inherited X11 from the effective host transport

The host editor treated a raw group X11 default as on even when
applyGroupDefaults suppresses that inheritance for Mosh, ET, or a
non-SSH protocol. Drive the switch and its visibility from that result.

Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: 陈大猫 <binaricat@users.noreply.github.com>
2026-10-20 13:31:02 +08:00

118 lines
3.7 KiB
TypeScript

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 keeps the SSH section when X11 forwarding is set", () => {
assert.equal(hasGroupSshFields({ x11Forwarding: true }), true);
assert.equal(hasGroupSshFields({ x11Forwarding: false }), true);
});
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,
);
});