package fa import ( "testing" "time" ) func TestParseFADate(t *testing.T) { must := func(layout, s string) time.Time { t.Helper() v, err := time.ParseInLocation(layout, s, time.UTC) if err != nil { t.Fatalf("setup: parse %q: %v", s, err) } return v } cases := []struct { name string in string want time.Time }{ { name: "standard popup_date", in: "Mar 17, 2026 04:21 PM", want: must("Jan 2, 2006 03:04 PM", "Mar 17, 2026 04:21 PM"), }, { name: "ordinal suffix", in: "Mar 17th, 2026 04:21 PM", want: must("Jan 2, 2006 03:04 PM", "Mar 17, 2026 04:21 PM"), }, { name: "no padding", in: "Mar 7, 2026 4:21 PM", want: must("Jan 2, 2006 3:04 PM", "Mar 7, 2026 4:21 PM"), }, { name: "rfc3339", in: "2026-03-17T16:21:00Z", want: must(time.RFC3339, "2026-03-17T16:21:00Z"), }, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { got, err := ParseFADate(tc.in) if err != nil { t.Fatalf("ParseFADate(%q) error = %v", tc.in, err) } if !got.Equal(tc.want) { t.Errorf("ParseFADate(%q) = %s; want %s", tc.in, got, tc.want) } }) } } func TestParseFADate_Empty(t *testing.T) { if _, err := ParseFADate(""); err == nil { t.Fatal("expected error for empty string") } } func TestStripOrdinals(t *testing.T) { cases := map[string]string{ "Mar 1st, 2026": "Mar 1, 2026", "Mar 2nd, 2026": "Mar 2, 2026", "Mar 3rd, 2026": "Mar 3, 2026", "Mar 4th, 2026": "Mar 4, 2026", "already clean": "already clean", "Mar 1st 2nd": "Mar 1 2", } for in, want := range cases { if got := stripOrdinals(in); got != want { t.Errorf("stripOrdinals(%q) = %q; want %q", in, got, want) } } }