package core import ( "bytes" "path/filepath" "testing" ) func TestNewAppRejectsNilReaders(t *testing.T) { t.Run("nil stdin", func(t *testing.T) { app, err := NewApp(nil, &bytes.Buffer{}, &bytes.Buffer{}) if err == nil { t.Fatal("expected error for nil stdin") } if app != nil { t.Fatal("expected nil app for nil stdin") } }) t.Run("nil stdout", func(t *testing.T) { app, err := NewApp(new(bytes.Buffer), nil, &bytes.Buffer{}) if err == nil { t.Fatal("expected error for nil stdout") } if app != nil { t.Fatal("expected nil app for nil stdout") } }) t.Run("nil stderr", func(t *testing.T) { app, err := NewApp(new(bytes.Buffer), &bytes.Buffer{}, nil) if err == nil { t.Fatal("expected error for nil stderr") } if app != nil { t.Fatal("expected nil app for nil stderr") } }) } func TestDeriveDestination(t *testing.T) { tests := []struct { name string uri string want string }{ {name: "github short", uri: "technicalpickles/pickled-vim", want: "pickled-vim"}, {name: "https", uri: "https://github.com/technicalpickles/pickled-vim.git", want: "pickled-vim"}, {name: "git ssh", uri: "git@github.com:technicalpickles/pickled-vim.git", want: "pickled-vim"}, {name: "file", uri: "file:///tmp/dotfiles.git", want: "dotfiles"}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if got := deriveDestination(tt.uri); got != tt.want { t.Fatalf("deriveDestination(%q) = %q, want %q", tt.uri, got, tt.want) } }) } } func TestNewAppInitializesApp(t *testing.T) { stdin := new(bytes.Buffer) stdout := &bytes.Buffer{} stderr := &bytes.Buffer{} app, err := NewApp(stdin, stdout, stderr) if err != nil { t.Fatalf("unexpected error: %v", err) } if app == nil { t.Fatal("expected app instance") } if app.Stdin != stdin { t.Fatal("expected stdin reader to be assigned") } if app.Stdout != stdout { t.Fatal("expected stdout writer to be assigned") } if app.Stderr != stderr { t.Fatal("expected stderr writer to be assigned") } if app.HomeDir == "" { t.Fatal("expected home directory to be set") } if app.ReposDir != filepath.Join(app.HomeDir, ".homesick", "repos") { t.Fatalf("unexpected repos dir: %q", app.ReposDir) } }