diff options
| author | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-08-07 16:52:44 +0200 |
|---|---|---|
| committer | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-08-07 16:52:44 +0200 |
| commit | 5b74dc4321e63f251190a975b151875b64656c56 (patch) | |
| tree | fbb7abb6076abcefbea5faeb599deeaf3e33c2ef /strava/sync_test.go | |
| parent | 22a58e96dddd326f4c331c2a1bdea46f808ae3ad (diff) | |
feat: Add Strava stream metrics
Diffstat (limited to 'strava/sync_test.go')
| -rw-r--r-- | strava/sync_test.go | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/strava/sync_test.go b/strava/sync_test.go index 04f3c64..f810206 100644 --- a/strava/sync_test.go +++ b/strava/sync_test.go @@ -1,12 +1,14 @@ package strava import ( + "bytes" "fmt" "net/http" "net/http/httptest" "testing" "time" + "github.com/martinlehoux/biking_home/ride" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/tkrajina/gpxgo/gpx" @@ -60,7 +62,8 @@ func TestGet(t *testing.T) { _, err := w.Write([]byte(`{"id":42,"name":"Ride A","type":"Ride","sport_type":"Ride","start_date":"2026-01-01T10:00:00Z","distance":42195,"moving_time":7200,"elapsed_time":7800,"total_elevation_gain":850,"average_speed":5.86}`)) require.NoError(t, err) case "/activities/42/streams": - _, err := w.Write([]byte(`{"latlng":{"data":[[43.0,5.0],[43.1,5.1]]},"altitude":{"data":[100,120]},"time":{"data":[0,10]}}`)) + assert.Equal(t, "latlng,altitude,time,heartrate,cadence,watts", r.URL.Query().Get("keys")) + _, err := w.Write([]byte(`{"latlng":{"data":[[43.0,5.0],[43.1,5.1]]},"altitude":{"data":[100,120]},"time":{"data":[0,10]},"heartrate":{"data":[90,91]},"cadence":{"data":[70,null]},"watts":{"data":[200,0]}}`)) require.NoError(t, err) default: http.NotFound(w, r) @@ -76,4 +79,36 @@ func TestGet(t *testing.T) { parsed, err := gpx.ParseBytes(gpxData) require.NoError(t, err) require.Len(t, parsed.Tracks[0].Segments[0].Points, 2) + const garminNamespace = "http://www.garmin.com/xmlschemas/TrackPointExtension/v1" + firstExtension, found := parsed.Tracks[0].Segments[0].Points[0].Extensions.GetNode(gpx.NamespaceURL(garminNamespace), "TrackPointExtension") + require.True(t, found) + heartRate, found := firstExtension.GetNode("hr") + require.True(t, found) + assert.Equal(t, "90", heartRate.Data) + cadence, found := firstExtension.GetNode("cad") + require.True(t, found) + assert.Equal(t, "70", cadence.Data) + power, found := firstExtension.GetNode("watts") + require.True(t, found) + assert.Equal(t, "200", power.Data) + + secondExtension, found := parsed.Tracks[0].Segments[0].Points[1].Extensions.GetNode(gpx.NamespaceURL(garminNamespace), "TrackPointExtension") + require.True(t, found) + _, found = secondExtension.GetNode("cad") + assert.False(t, found) + power, found = secondExtension.GetNode("watts") + require.True(t, found) + assert.Equal(t, "0", power.Data) + + parsedRide, err := (ride.GPXRideParser{}).Parse(bytes.NewReader(gpxData)) + require.NoError(t, err) + assert.Equal(t, 2, parsedRide.Len()) + heartRateValue, found := parsedRide.HeartRateBpm(1) + require.True(t, found) + assert.Equal(t, 91.0, heartRateValue) + _, found = parsedRide.CadenceRpm(0) + assert.False(t, found) + powerValue, found := parsedRide.PowerW(1) + require.True(t, found) + assert.Equal(t, 0.0, powerValue) } |