- Data now comes from a calendar - Hovering in charts shows day info - Optical enhancements to chart rendering - Allow setting/showing goal weight - Allow toggeling between absolute and zoomed in weight axis
77 lines
1.9 KiB
Go
77 lines
1.9 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|