package gitengine import ( "errors" "reflect" "testing" ) type fakeRunner struct { output string err error args []string } func (f *fakeRunner) Run(_ string, args ...string) (string, error) { f.args = append([]string(nil), args...) return f.output, f.err } func TestStatusClean(t *testing.T) { runner := &fakeRunner{output: "\n"} result, err := Status(runner, "/repo") if err != nil { t.Fatalf("Status: %v", err) } if !result.Clean { t.Fatal("expected clean status") } if !reflect.DeepEqual(runner.args, []string{"status", "--porcelain"}) { t.Fatalf("args: %#v", runner.args) } } func TestChangedFiles(t *testing.T) { runner := &fakeRunner{output: "README.md\nservices/core/main.go\n\n"} files, err := ChangedFiles(runner, "/repo", "abc", "def") if err != nil { t.Fatalf("ChangedFiles: %v", err) } want := []string{"README.md", "services/core/main.go"} if !reflect.DeepEqual(files, want) { t.Fatalf("files: got %#v want %#v", files, want) } } func TestChangedFilesRequiresRevisions(t *testing.T) { _, err := ChangedFiles(&fakeRunner{}, "/repo", "", "def") if !errors.Is(err, ErrInvalidGitInput) { t.Fatalf("expected ErrInvalidGitInput, got %v", err) } }