package status import ( "testing" "time" ) func TestRepoStatusString(t *testing.T) { cases := []struct { s RepoStatus want string }{ {StatusUnknown, "unknown"}, {StatusClean, "clean"}, {StatusModified, "modified"}, {StatusAhead, "ahead"}, {StatusBehind, "behind"}, {StatusDiverged, "diverged"}, {StatusDetached, "detached"}, {StatusBare, "bare"}, {StatusError, "error"}, } for _, tc := range cases { if got := tc.s.String(); got != tc.want { t.Errorf("RepoStatus(%d).String() = %q, want %q", tc.s, got, tc.want) } } } func TestRepoStatusNeedsAttention(t *testing.T) { cases := []struct { s RepoStatus want bool }{ {StatusUnknown, false}, {StatusClean, false}, {StatusModified, true}, {StatusAhead, true}, {StatusBehind, true}, {StatusDiverged, true}, {StatusDetached, true}, {StatusBare, true}, {StatusError, true}, } for _, tc := range cases { if got := tc.s.NeedsAttention(); got != tc.want { t.Errorf("RepoStatus(%d).NeedsAttention() = %v, want %v", tc.s, got, tc.want) } } } func TestRepoInfoFileCount(t *testing.T) { info := RepoInfo{ StagedFiles: []string{"a", "b"}, ModifiedFiles: []string{"c"}, UntrackedFiles: []string{"d", "e", "f"}, } if got := info.FileCount(); got != 6 { t.Errorf("FileCount() = %d, want 6", got) } } func TestScanResultSummary(t *testing.T) { result := ScanResult{ ScannedAt: time.Now(), ParentDir: "/tmp", Repos: []RepoInfo{ {Status: StatusClean}, {Status: StatusModified, StagedFiles: []string{"a"}, ModifiedFiles: []string{"b"}}, {Status: StatusDiverged, UntrackedFiles: []string{"c"}}, {Status: StatusError, Error: "boom"}, {Status: StatusUnknown}, }, } got := result.Summary() want := Summary{Total: 5, Clean: 1, Attention: 2, Errored: 1, Staged: 1, Modified: 1, Untracked: 1} if got != want { t.Errorf("Summary() = %+v, want %+v", got, want) } } func TestScanResultNeedsAttention(t *testing.T) { result := ScanResult{ Repos: []RepoInfo{ {Path: "/a", Status: StatusClean}, {Path: "/b", Status: StatusBehind}, {Path: "/c", Status: StatusError}, }, } got := result.NeedsAttention() if len(got) != 2 { t.Fatalf("NeedsAttention() returned %d repos, want 2", len(got)) } for _, r := range got { if r.Path == "/a" { t.Errorf("clean repo /a listed as needing attention") } } }