Improvements to fitness page
- 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
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user