diff options
Diffstat (limited to 'rides/rides_test.go')
| -rw-r--r-- | rides/rides_test.go | 58 |
1 files changed, 55 insertions, 3 deletions
diff --git a/rides/rides_test.go b/rides/rides_test.go index 90998cd..fc8ff0d 100644 --- a/rides/rides_test.go +++ b/rides/rides_test.go @@ -29,14 +29,14 @@ func sampleRide(t *testing.T) Ride { Type: "Ride", StartDate: time.Date(2026, 8, 1, 7, 30, 0, 0, time.UTC), DistanceM: 42_195, - MovingTimeS: 7_200, + ExternalMovingTimeS: 7_200, ElapsedTimeS: 7_800, TotalElevationGainM: 850, AverageSpeedMps: 5.86, } } -const testGPX = `<?xml version="1.0"?><gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1"><trk><trkseg><trkpt lat="43.0" lon="5.0"><ele>100</ele></trkpt><trkpt lat="43.001" lon="5.001"><ele>200</ele></trkpt></trkseg></trk></gpx>` +const testGPX = `<?xml version="1.0"?><gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1"><trk><trkseg><trkpt lat="43.0" lon="5.0"><ele>100</ele><time>2026-08-01T07:30:00Z</time></trkpt><trkpt lat="43.001" lon="5.001"><ele>200</ele><time>2026-08-01T07:31:00Z</time></trkpt></trkseg></trk></gpx>` func TestUpsertAndGet(t *testing.T) { db := newTestDB(t) @@ -93,6 +93,20 @@ func TestSaveComputesCotacol(t *testing.T) { assert.Equal(t, ride.CotacolAlgorithmVersion, got.CotacolAlgorithmVersion()) } +func TestSaveComputesMovingTimeAndPreservesExternal(t *testing.T) { + db := newTestDB(t) + require.NoError(t, Save(db, sampleRide(t))) + + got, ok, err := GetByExternalID(db, "strava:1234") + require.NoError(t, err) + require.True(t, ok) + moving, found := got.MovingTimeS() + require.True(t, found) + assert.Equal(t, int64(60), moving) + assert.Equal(t, ride.MovingTimeAlgorithmVersion, got.MovingTimeAlgorithmVersion()) + assert.Equal(t, int64(7_200), got.ExternalMovingTimeS) +} + func TestSaveAllowsRideWithoutGPX(t *testing.T) { db := newTestDB(t) indoor := sampleRide(t) @@ -108,6 +122,44 @@ func TestSaveAllowsRideWithoutGPX(t *testing.T) { _, ready := got.CotacolScore() assert.False(t, ready) assert.Empty(t, got.CotacolAlgorithmVersion()) + _, ready = got.MovingTimeS() + assert.False(t, ready) + assert.Empty(t, got.MovingTimeAlgorithmVersion()) +} + +func TestEffectiveMovingTimePrefersCanonical(t *testing.T) { + db := newTestDB(t) + require.NoError(t, Save(db, sampleRide(t))) + got, ok, err := GetByExternalID(db, "strava:1234") + require.NoError(t, err) + require.True(t, ok) + assert.Equal(t, int64(60), got.EffectiveMovingTimeS()) + + _, err = db.Exec("UPDATE rides SET moving_time_algo_version = 'old' WHERE external_id = ?", got.ExternalID) + require.NoError(t, err) + got, ok, err = GetByExternalID(db, "strava:1234") + require.NoError(t, err) + require.True(t, ok) + assert.Equal(t, int64(7_200), got.EffectiveMovingTimeS()) +} + +func TestListSortedByMovingTimeUsesCanonicalWithExternalFallback(t *testing.T) { + db := newTestDB(t) + first := sampleRide(t) + first.ExternalID = "strava:550e8400-e29b-41d4-a716-446655440000" + second := sampleRide(t) + second.ExternalID = "strava:6ba7b810-9dad-41d1-80b4-00c04fd430c8" + require.NoError(t, Save(db, first)) + require.NoError(t, Save(db, second)) + _, err := db.Exec("UPDATE rides SET external_moving_time_s = 1000, moving_time_s = 500 WHERE external_id = ?", first.ExternalID) + require.NoError(t, err) + _, err = db.Exec("UPDATE rides SET external_moving_time_s = 300, moving_time_s = 500, moving_time_algo_version = 'old' WHERE external_id = ?", second.ExternalID) + require.NoError(t, err) + + items, err := ListSorted(db, SortMovingTime, false) + require.NoError(t, err) + assert.Equal(t, second.ExternalID, items[0].ExternalID) + assert.Equal(t, first.ExternalID, items[1].ExternalID) } func TestBackfill(t *testing.T) { @@ -132,7 +184,7 @@ func TestBackfill(t *testing.T) { func TestBackfillSkipsInvalidRide(t *testing.T) { db := newTestDB(t) _, err := db.Exec(` - INSERT INTO rides (external_id, gpx_path, name, type, start_date, distance_m, moving_time_s, elapsed_time_s, total_elevation_gain_m, average_speed_mps) + INSERT INTO rides (external_id, gpx_path, name, type, start_date, distance_m, external_moving_time_s, elapsed_time_s, total_elevation_gain_m, average_speed_mps) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `, "strava:550e8400-e29b-41d4-a716-446655440000", "missing.gpx", "Broken Ride", "Ride", "2026-08-01T07:00:00Z", 20_000, 0, 0, 0, 0) require.NoError(t, err) |
