package calendar import ( "fmt" "testing" "time" ) func TestWarsawDate(t *testing.T) { makeTime := func(s string) EventTime { t.Helper() warsaw, err := time.LoadLocation("Europe/Warsaw") if err != nil { t.Fatalf("could not get Warsaw timezone: %v", err) } ti, err := time.ParseInLocation("2006/01/02 15:04", s, warsaw) if err != nil { t.Fatal("could not parse test time %q: %v", s, err) } return EventTime{ Time: ti, } } makeDay := func(s string) EventTime { t.Helper() ti, err := time.Parse("2006/01/02", s) if err != nil { t.Fatal("could not parse test day %q: %v", s, err) } return EventTime{ Time: ti, WholeDay: true, } } for i, te := range []struct { start EventTime end EventTime want string }{ { makeTime("2021/03/14 13:37"), makeTime("2021/04/20 21:37"), "2021/03/14 13:37 - 2021/04/20 21:37", }, { makeTime("2021/04/20 13:37"), makeTime("2021/04/20 21:37"), "2021/04/20 13:37 - 21:37", }, { makeDay("2021/06/01"), makeDay("2021/07/01"), "2021/06/01 - 30", }, { makeDay("2021/03/14"), makeDay("2021/04/21"), "2021/03/14 - 2021/04/20", }, { makeDay("2021/04/20"), makeDay("2021/04/21"), "2021/04/20", }, } { te := te t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { ev := UpcomingEvent{ Start: &te.start, End: &te.end, } got := ev.WarsawDate() if got != te.want { t.Fatalf("wanted %q, got %q", te.want, got) } }) } }