package main import ( "bytes" "git.zb-server.de/Sebi/ssh-netbox-wrapper/internal/hook" "os" "path/filepath" "strings" "testing" ) func TestLocalNotesCLI(t *testing.T) { t.Setenv("XDG_CONFIG_HOME", t.TempDir()) t.Setenv("NETSSH_CACHE_PATH", filepath.Join(t.TempDir(), "hosts.json")) run := func(args []string, input string) (string, error) { root := rootCmd() var out bytes.Buffer root.SetOut(&out) root.SetErr(&out) root.SetIn(strings.NewReader(input)) root.SetArgs(args) err := root.Execute() return out.String(), err } if _, err := run([]string{"notes", "set", "web01", "--kind", "vm"}, "First\nSecond"); err != nil { t.Fatal(err) } if _, err := run([]string{"notes", "append", "web01", "Third", "--kind", "vm"}, ""); err != nil { t.Fatal(err) } out, err := run([]string{"notes", "show", "web01", "--kind", "vm"}, "") if err != nil || out != "First\nSecond\nThird" { t.Fatalf("show: %q, %v", out, err) } if _, err := run([]string{"notes", "set", "web01", "", "--kind", "vm"}, ""); err != nil { t.Fatal(err) } out, err = run([]string{"notes", "show", "web01", "--kind", "vm"}, "") if err != nil || out != "" { t.Fatalf("clear: %q, %v", out, err) } } func TestShellInitUpdatesAndRemovesCommandAliasWithoutHosts(t *testing.T) { t.Setenv("HOME", t.TempDir()) t.Setenv("XDG_CONFIG_HOME", t.TempDir()) t.Setenv("XDG_CACHE_HOME", t.TempDir()) t.Setenv("NETSSH_CACHE_PATH", filepath.Join(t.TempDir(), "hosts.json")) t.Setenv("NETSSH_NETBOX_URL", "") t.Setenv("NETSSH_SHELL_ALIAS", "j") run := func() { t.Helper() root := rootCmd() root.SetArgs([]string{"shell-init"}) if err := root.Execute(); err != nil { t.Fatal(err) } } run() data, err := os.ReadFile(hook.AliasesPath()) if err != nil || !strings.Contains(string(data), "alias j='netssh'") { t.Fatalf("alias missing: %s, %v", data, err) } t.Setenv("NETSSH_SHELL_ALIAS", "k") run() data, _ = os.ReadFile(hook.AliasesPath()) if strings.Contains(string(data), "alias j=") || !strings.Contains(string(data), "alias k='netssh'") { t.Fatalf("alias change: %s", data) } t.Setenv("NETSSH_SHELL_ALIAS", "") run() data, _ = os.ReadFile(hook.AliasesPath()) if strings.Contains(string(data), "alias k=") { t.Fatalf("stale alias: %s", data) } }