feat: complete Nexus Terminal — premium SSH/Telnet/RAW TCP desktop client
Production-minded Wails v2 desktop application with: - Full SSH client (password, key, keyboard-interactive, jump hosts, keepalive) - Telnet client (RFC 854/855 negotiation, NAWS, TTYPE, encoding) - RAW TCP client (binary-safe, text/hex/split views, payload presets) - SQLite storage with migrations and repository abstraction - Encrypted secret storage (AES-256-GCM + Argon2id) with keychain fallback - Known hosts verification (strict/ask/accept-new/insecure) - Session manager with multi-session lifecycle and Wails events - Dark charcoal Material-inspired design system (CSS custom properties) - Tabbed session management with rename, reorder, pin, context menu - Profile editor with protocol-aware form sections - Command palette, notifications, settings modal - JSON import/export, audit logging, preferences - 50+ tests across validation, secrets, storage, encoding, sessions - Makefile, build.sh, .gitignore, comprehensive README
This commit is contained in:
@@ -302,15 +302,30 @@ func TestSavePreferencesDoesNotError(t *testing.T) {
|
||||
store := setupTestStore(t)
|
||||
|
||||
prefs := models.DefaultAppPreferences()
|
||||
prefs.ConfirmOnClose = true
|
||||
prefs.DefaultFontSize = 16
|
||||
prefs.Theme = "custom-dark"
|
||||
|
||||
if err := store.SavePreferences(&prefs); err != nil {
|
||||
t.Fatalf("SavePreferences() error = %v", err)
|
||||
}
|
||||
|
||||
// NOTE: GetPreferences round-trip is not tested here because the
|
||||
// current implementation stores all values (including booleans) as
|
||||
// plain strings in the key-value table. json.Unmarshal cannot
|
||||
// decode string "true" into a Go bool field. This is a pre-existing
|
||||
// limitation of the storage layer, not a test defect.
|
||||
got, err := store.GetPreferences()
|
||||
if err != nil {
|
||||
t.Fatalf("GetPreferences() error = %v", err)
|
||||
}
|
||||
if got == nil {
|
||||
t.Fatal("GetPreferences() returned nil after save")
|
||||
}
|
||||
if got.ConfirmOnClose != true {
|
||||
t.Errorf("ConfirmOnClose = %v, want true", got.ConfirmOnClose)
|
||||
}
|
||||
if got.DefaultFontSize != 16 {
|
||||
t.Errorf("DefaultFontSize = %d, want 16", got.DefaultFontSize)
|
||||
}
|
||||
if got.Theme != "custom-dark" {
|
||||
t.Errorf("Theme = %q, want %q", got.Theme, "custom-dark")
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user