--- parsePhasesConfig tests ---
(t *testing.T)
| 839 | // --- parsePhasesConfig tests --- |
| 840 | |
| 841 | func TestParsePhasesConfig_FullConfig(t *testing.T) { |
| 842 | raw := []any{ |
| 843 | map[string]any{ |
| 844 | "id": "core-cli", |
| 845 | "name": "v0.2", |
| 846 | "description": "Core CLI features", |
| 847 | "due": "2026-04-01", |
| 848 | }, |
| 849 | map[string]any{ |
| 850 | "id": "web-dashboard", |
| 851 | "name": "v0.3", |
| 852 | "description": "Web dashboard", |
| 853 | }, |
| 854 | } |
| 855 | |
| 856 | phases := parsePhasesConfig(raw) |
| 857 | if len(phases) != 2 { |
| 858 | t.Fatalf("expected 2 phases, got %d", len(phases)) |
| 859 | } |
| 860 | if phases[0].ID != "core-cli" { |
| 861 | t.Errorf("ID = %q, want %q", phases[0].ID, "core-cli") |
| 862 | } |
| 863 | if phases[0].Name != "v0.2" { |
| 864 | t.Errorf("Name = %q, want %q", phases[0].Name, "v0.2") |
| 865 | } |
| 866 | if phases[0].Description != "Core CLI features" { |
| 867 | t.Errorf("Description = %q, want %q", phases[0].Description, "Core CLI features") |
| 868 | } |
| 869 | if phases[0].Due.IsZero() { |
| 870 | t.Error("expected non-zero due date for v0.2") |
| 871 | } |
| 872 | if phases[1].ID != "web-dashboard" { |
| 873 | t.Errorf("ID = %q, want %q", phases[1].ID, "web-dashboard") |
| 874 | } |
| 875 | if phases[1].Name != "v0.3" { |
| 876 | t.Errorf("Name = %q, want %q", phases[1].Name, "v0.3") |
| 877 | } |
| 878 | if !phases[1].Due.IsZero() { |
| 879 | t.Error("expected zero due date for v0.3 (no due set)") |
| 880 | } |
| 881 | } |
| 882 | |
| 883 | func TestParsePhasesConfig_Nil(t *testing.T) { |
| 884 | phases := parsePhasesConfig(nil) |
nothing calls this directly
no test coverage detected