Use HTMX fragements on the fitness dashboard
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
"strings"
|
||||
"path/filepath"
|
||||
@@ -74,3 +75,56 @@ func TestTimeXTicks(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestFitnessChartFragment(t *testing.T) {
|
||||
withBerlin(t)
|
||||
root := t.TempDir()
|
||||
cals := filepath.Join(root, "Calendars")
|
||||
fit := filepath.Join(root, "My Fitness")
|
||||
for _, d := range []string{cals, fit} {
|
||||
if err := os.MkdirAll(d, 0755); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
prev := calendarsDir
|
||||
calendarsDir = cals
|
||||
t.Cleanup(func() { calendarsDir = prev })
|
||||
if err := os.WriteFile(filepath.Join(cals, ".page-settings"), []byte("type = calendars\nweight = Gewicht\n"), 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := os.WriteFile(filepath.Join(fit, ".page-settings"), []byte("type = fitness\n"), 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
writeCal(t, cals, "Gewicht", `UID:1
|
||||
SUMMARY:96 kg
|
||||
DTSTART;VALUE=DATE:20200101`)
|
||||
|
||||
h := &handler{root: root}
|
||||
get := func(query string, hx bool) *httptest.ResponseRecorder {
|
||||
r := httptest.NewRequest("GET", "/My%20Fitness/?"+query, nil)
|
||||
if hx {
|
||||
r.Header.Set("HX-Request", "true")
|
||||
}
|
||||
w := httptest.NewRecorder()
|
||||
h.serveDir(w, r, "/My Fitness", fit)
|
||||
return w
|
||||
}
|
||||
|
||||
w := get("chart=weekly&weight=3m&weekly=all&weekly-absolute=1", true)
|
||||
body := w.Body.String()
|
||||
if w.Code != 200 || strings.Contains(body, "<html") || strings.Count(body, `class="fitness-chart panel"`) != 1 ||
|
||||
!strings.Contains(body, `name="weekly"`) || !strings.Contains(body, `value="all" selected`) {
|
||||
t.Errorf("weekly fragment: %d\n%s", w.Code, body)
|
||||
}
|
||||
if got, want := w.Header().Get("HX-Replace-Url"), "/My%20Fitness/?weekly=all&weekly-absolute=1"; got != want {
|
||||
t.Errorf("HX-Replace-Url = %q, want %q", got, want)
|
||||
}
|
||||
|
||||
if w := get("chart=bogus", true); w.Code != 404 {
|
||||
t.Errorf("unknown chart: got %d, want 404", w.Code)
|
||||
}
|
||||
// Without htmx the parameter is ignored and the full page renders.
|
||||
if body := get("chart=weekly", false).Body.String(); strings.Count(body, `class="fitness-chart panel"`) != 2 {
|
||||
t.Errorf("non-htmx request did not render the dashboard:\n%s", body)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user