| 922 | } |
| 923 | |
| 924 | func TestRefreshMixedDirectories(t *testing.T) { |
| 925 | tmpDir := t.TempDir() |
| 926 | prdsDir := filepath.Join(tmpDir, ".chief", "prds") |
| 927 | |
| 928 | // Empty directory (should be filtered) |
| 929 | if err := os.MkdirAll(filepath.Join(prdsDir, "empty"), 0755); err != nil { |
| 930 | t.Fatalf("Failed to create dir: %v", err) |
| 931 | } |
| 932 | |
| 933 | // Directory with prd.md (should be shown) |
| 934 | validDir := filepath.Join(prdsDir, "valid") |
| 935 | if err := os.MkdirAll(validDir, 0755); err != nil { |
| 936 | t.Fatalf("Failed to create dir: %v", err) |
| 937 | } |
| 938 | if err := os.WriteFile(filepath.Join(validDir, "prd.md"), []byte("# PRD"), 0644); err != nil { |
| 939 | t.Fatalf("Failed to create prd.md: %v", err) |
| 940 | } |
| 941 | |
| 942 | // Another empty directory (should be filtered) |
| 943 | if err := os.MkdirAll(filepath.Join(prdsDir, "also-empty"), 0755); err != nil { |
| 944 | t.Fatalf("Failed to create dir: %v", err) |
| 945 | } |
| 946 | |
| 947 | p := &PRDPicker{ |
| 948 | basePath: tmpDir, |
| 949 | entries: make([]PRDEntry, 0), |
| 950 | } |
| 951 | p.Refresh() |
| 952 | |
| 953 | if len(p.entries) != 1 { |
| 954 | t.Errorf("expected 1 entry (filtering 2 empty dirs), got %d", len(p.entries)) |
| 955 | } |
| 956 | if len(p.entries) > 0 && p.entries[0].Name != "valid" { |
| 957 | t.Errorf("expected entry name 'valid', got %q", p.entries[0].Name) |
| 958 | } |
| 959 | } |
| 960 | |
| 961 | // containsText checks if rendered output contains a substring (ignoring ANSI codes). |
| 962 | func containsText(rendered, substr string) bool { |