Files
swanadiva 847989df75 refactor: move V1 code into v1/ subdirectory
- git mv cmd/ internal/ pkg/ test/ go.mod go.sum Makefile build.sh docs/ v1/
- Create v1/README.md with V1 documentation
- Update root README for V1 + V2 structure
- V1 still builds (cd v1 && go build ./cmd/hostkeeper) and 105 tests pass
- Root is now clean for V2 development
2026-07-07 11:56:27 +07:00

106 lines
2.3 KiB
Go

package main
import (
"testing"
)
func TestAddCommandExists(t *testing.T) {
if addCmd == nil {
t.Fatal("addCmd should not be nil")
}
if addCmd.Use != "add [name]" {
t.Errorf("expected Use 'add [name]', got '%s'", addCmd.Use)
}
if addCmd.Short == "" {
t.Error("Short description should not be empty")
}
}
func TestAddCommandFlags(t *testing.T) {
expectedFlags := []string{"host", "port", "user", "password", "key", "auth-type", "group", "tags", "notes"}
for _, flagName := range expectedFlags {
if addCmd.Flags().Lookup(flagName) == nil {
t.Errorf("flag '%s' should be defined", flagName)
}
}
}
func TestAddCommandValidation(t *testing.T) {
tests := []struct {
name string
args []string
hostFlag string
userFlag string
passFlag string
wantError bool
errContains string
}{
{
name: "missing hostname",
args: []string{"myserver"},
userFlag: "admin",
passFlag: "pass",
wantError: true,
errContains: "hostname is required",
},
{
name: "missing username",
args: []string{"myserver"},
hostFlag: "192.168.1.10",
passFlag: "pass",
wantError: true,
errContains: "username is required",
},
{
name: "missing auth",
args: []string{"myserver"},
hostFlag: "192.168.1.10",
userFlag: "admin",
wantError: true,
errContains: "authentication is required",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// Reset flags
addHostname = tt.hostFlag
addUser = tt.userFlag
addPassword = tt.passFlag
addPort = 0
addKeyPath = ""
addAuthType = ""
addGroup = ""
addTags = nil
addNotes = ""
// Set HOME to temp dir to avoid polluting real config
t.Setenv("HOME", "/tmp/hostkeeper-test-nonexistent")
err := runAddHost(addCmd, tt.args)
if tt.wantError && err == nil {
t.Errorf("expected error but got none")
}
if !tt.wantError && err != nil {
t.Errorf("unexpected error: %v", err)
}
if tt.errContains != "" && err != nil {
if !contains(err.Error(), tt.errContains) {
t.Errorf("error should contain '%s', got '%s'", tt.errContains, err.Error())
}
}
})
}
}
func contains(s, substr string) bool {
for i := 0; i <= len(s)-len(substr); i++ {
if s[i:i+len(substr)] == substr {
return true
}
}
return false
}