package main import ( "os" "strings" "path/filepath" "testing" "time" ) func TestFitnessWeights(t *testing.T) { withBerlin(t) dir := t.TempDir() prev := calendarsDir calendarsDir = dir t.Cleanup(func() { calendarsDir = prev }) if err := os.WriteFile(filepath.Join(dir, ".page-settings"), []byte("type = calendars\nweight = Gewicht\n"), 0644); err != nil { t.Fatal(err) } writeCal(t, dir, "Gewicht", `UID:1 SUMMARY:96 kg DTSTART;VALUE=DATE:20261001`, `UID:2 SUMMARY:95,6kg DTSTART;VALUE=DATE:20261003`, `UID:3 SUMMARY:not a weight DTSTART;VALUE=DATE:20261004`, `UID:4 SUMMARY:90 kg DTSTART;VALUE=DATE:20261010`, ) today := time.Date(2026, 10, 5, 0, 0, 0, 0, time.UTC) got := fitnessWeights(today) want := []weightPoint{ {date: time.Date(2026, 10, 1, 0, 0, 0, 0, time.UTC), value: 96}, {date: time.Date(2026, 10, 3, 0, 0, 0, 0, time.UTC), value: 95.6}, } if len(got) != len(want) { t.Fatalf("got %+v, want %+v", got, want) } for i := range want { if !got[i].date.Equal(want[i].date) || got[i].value != want[i].value { t.Fatalf("point %d: got %+v, want %+v", i, got[i], want[i]) } } } func TestTimeXTicks(t *testing.T) { d := func(y int, m time.Month, day int) time.Time { return time.Date(y, m, day, 0, 0, 0, 0, time.UTC) } for _, c := range []struct { from, to time.Time want string }{ {d(2022, 11, 28), d(2026, 9, 21), "2023 2024 2025 2026"}, {d(2025, 9, 27), d(2026, 9, 27), "Oct 2025|Jan 2026|Apr|Jul"}, {d(2026, 6, 27), d(2026, 9, 27), "Jul 2026|Aug|Sep"}, {d(2026, 8, 27), d(2026, 9, 27), "31 Aug|7 Sep|14 Sep|21 Sep"}, } { var got []string for _, tk := range timeXTicks(chartScale{x0: c.from, x1: c.to}) { got = append(got, tk.Label) } sep := " " if strings.Contains(c.want, "|") { sep = "|" } if g := strings.Join(got, sep); g != c.want { t.Errorf("%s..%s: got %q, want %q", c.from.Format("2006-01-02"), c.to.Format("2006-01-02"), g, c.want) } } }