aboutsummaryrefslogtreecommitdiff
path: root/web/server_test.go
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2026-08-21 19:02:05 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2026-08-21 19:02:05 +0200
commit1e63f5c91f0e5ff7dfc582b67d262d5939cc34bc (patch)
tree7965a98e4bd286df502d658e687fa83230895c39 /web/server_test.go
parent9ec4d3dbc1f55ca412f6df67b8576b087b15887c (diff)
Add global analytics page shell and split server.go by concern
Diffstat (limited to 'web/server_test.go')
-rw-r--r--web/server_test.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/web/server_test.go b/web/server_test.go
index 299575e..42b85b1 100644
--- a/web/server_test.go
+++ b/web/server_test.go
@@ -348,6 +348,48 @@ func TestHandlerRendersRideDetailWithoutRoute(t *testing.T) {
assert.NotContains(t, body, `id="ride-map"`)
}
+func TestHandlerRendersAnalyticsChart(t *testing.T) {
+ server, db := newWebTestServer(t)
+ first := rides.Ride{
+ ExternalID: "strava:550e8400-e29b-41d4-a716-446655440001",
+ Name: "Fastish Ride",
+ Type: "Ride",
+ StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
+ DistanceM: 40_000,
+ }
+ second := rides.Ride{
+ ExternalID: "strava:550e8400-e29b-41d4-a716-446655440002",
+ Name: "Climbing Ride",
+ Type: "Ride",
+ StartDate: time.Date(2026, 8, 2, 7, 0, 0, 0, time.UTC),
+ DistanceM: 40_000,
+ }
+ require.NoError(t, rides.Save(db, first))
+ require.NoError(t, rides.Save(db, second))
+ _, err := db.Exec(`
+ UPDATE rides
+ SET cotacol_score = CASE external_id WHEN ? THEN 20 ELSE 120 END,
+ cotacol_algo_version = ?,
+ average_speed_mps = CASE external_id WHEN ? THEN 7.0 ELSE 4.0 END
+ `, first.ExternalID, ride.CotacolAlgorithmVersion, second.ExternalID)
+ require.NoError(t, err)
+
+ req := httptest.NewRequest(http.MethodGet, "/analytics", nil)
+ response := httptest.NewRecorder()
+ server.Handler().ServeHTTP(response, req)
+
+ body := response.Body.String()
+ assert.Equal(t, http.StatusOK, response.Code)
+ assert.Contains(t, body, "Ride analytics")
+ assert.Contains(t, body, `id="analytics-chart"`)
+ assert.Contains(t, body, `id="analytics-points"`)
+ assert.Contains(t, body, `"speedKmh":25.2`)
+ assert.Contains(t, body, `"cotacolPer100Km":50`)
+ assert.NotContains(t, body, "No eligible rides yet")
+ assert.Contains(t, body, `<script type="module" src="/static/analytics.js"></script>`)
+ assert.Contains(t, body, `href="/analytics"`)
+}
+
func TestHandlerReturnsNotFoundForUnknownRide(t *testing.T) {
server, _ := newWebTestServer(t)
req := httptest.NewRequest(http.MethodGet, "/rides/999999", nil)