diff options
Diffstat (limited to 'official_climb/attempt_test.go')
| -rw-r--r-- | official_climb/attempt_test.go | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/official_climb/attempt_test.go b/official_climb/attempt_test.go index 147c80b..8913807 100644 --- a/official_climb/attempt_test.go +++ b/official_climb/attempt_test.go @@ -6,6 +6,7 @@ import ( "time" "github.com/jftuga/geodist" + "github.com/martinlehoux/biking_home/climb" "github.com/martinlehoux/biking_home/internal/dbtest" "github.com/martinlehoux/biking_home/official_climb" "github.com/stretchr/testify/assert" @@ -16,6 +17,11 @@ func coord(lat, lon float64) geodist.Coord { return geodist.Coord{Lat: lat, Lon: lon} } +// sampleFixture is a plausible sample for tests that do not exercise matching. +func sampleFixture() climb.SegmentSample { + return climb.SegmentSample{DistanceM: 3000, ElevationGainM: 200} +} + func insertRide(t *testing.T, db *sql.DB, opts ...func(*rideInsert)) int64 { t.Helper() insert := rideInsert{startDate: "2026-09-01T08:00:00Z"} @@ -57,7 +63,7 @@ func attemptFixture(rideID, climbID int64, occurrence int) official_climb.Attemp func TestReplaceRideAttemptsRoundTrip(t *testing.T) { db := dbtest.New(t) - created, err := official_climb.Create(db, official_climb.OfficialClimb{Name: "Col de Test", StartCoord: coord(43.6, 5.4), EndCoord: coord(43.62, 5.42)}) + created, err := official_climb.Create(db, official_climb.OfficialClimb{Name: "Col de Test", StartCoord: coord(43.6, 5.4), EndCoord: coord(43.62, 5.42), Sample: sampleFixture()}) require.NoError(t, err) rideID := insertRide(t, db) @@ -80,11 +86,31 @@ func TestReplaceRideAttemptsRoundTrip(t *testing.T) { require.Len(t, rideAttempts, 2) } +func TestReplaceRideAttemptsKeepsRecordedAt(t *testing.T) { + db := dbtest.New(t) + created, err := official_climb.Create(db, official_climb.OfficialClimb{Name: "Col de Test", StartCoord: coord(43.6, 5.4), EndCoord: coord(43.62, 5.42), Sample: sampleFixture()}) + require.NoError(t, err) + rideID := insertRide(t, db) + attempts := []official_climb.Attempt{attemptFixture(rideID, created.ID, 0)} + require.NoError(t, official_climb.ReplaceRideAttempts(db, rideID, attempts)) + + recorded := time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC) + _, err = db.Exec("UPDATE ride_official_climb_attempts SET created_at = ? WHERE ride_id = ?", recorded.Format(time.RFC3339), rideID) + require.NoError(t, err) + + // Re-analyzing the same ride must not restamp the attempt it already has. + require.NoError(t, official_climb.ReplaceRideAttempts(db, rideID, attempts)) + stored, err := official_climb.AttemptsForRide(db, rideID) + require.NoError(t, err) + require.Len(t, stored, 1) + assert.Equal(t, recorded, stored[0].CreatedAt.UTC()) +} + func TestReplaceRideAttemptsDropsStaleRows(t *testing.T) { db := dbtest.New(t) - first, err := official_climb.Create(db, official_climb.OfficialClimb{Name: "Col A", StartCoord: coord(43.6, 5.4), EndCoord: coord(43.62, 5.42)}) + first, err := official_climb.Create(db, official_climb.OfficialClimb{Name: "Col A", StartCoord: coord(43.6, 5.4), EndCoord: coord(43.62, 5.42), Sample: sampleFixture()}) require.NoError(t, err) - second, err := official_climb.Create(db, official_climb.OfficialClimb{Name: "Col B", StartCoord: coord(43.7, 5.5), EndCoord: coord(43.72, 5.52)}) + second, err := official_climb.Create(db, official_climb.OfficialClimb{Name: "Col B", StartCoord: coord(43.7, 5.5), EndCoord: coord(43.72, 5.52), Sample: sampleFixture()}) require.NoError(t, err) rideID := insertRide(t, db) @@ -101,7 +127,7 @@ func TestReplaceRideAttemptsDropsStaleRows(t *testing.T) { func TestReplaceRideAttemptsRejectsForeignRide(t *testing.T) { db := dbtest.New(t) - created, err := official_climb.Create(db, official_climb.OfficialClimb{Name: "Col de Test", StartCoord: coord(43.6, 5.4), EndCoord: coord(43.62, 5.42)}) + created, err := official_climb.Create(db, official_climb.OfficialClimb{Name: "Col de Test", StartCoord: coord(43.6, 5.4), EndCoord: coord(43.62, 5.42), Sample: sampleFixture()}) require.NoError(t, err) rideID := insertRide(t, db) @@ -112,7 +138,7 @@ func TestReplaceRideAttemptsRejectsForeignRide(t *testing.T) { func TestAttemptsForClimbOrdersByRideDate(t *testing.T) { db := dbtest.New(t) - created, err := official_climb.Create(db, official_climb.OfficialClimb{Name: "Col de Test", StartCoord: coord(43.6, 5.4), EndCoord: coord(43.62, 5.42)}) + created, err := official_climb.Create(db, official_climb.OfficialClimb{Name: "Col de Test", StartCoord: coord(43.6, 5.4), EndCoord: coord(43.62, 5.42), Sample: sampleFixture()}) require.NoError(t, err) newer := insertRide(t, db, withStartDate("2026-09-10T08:00:00Z")) older := insertRide(t, db, withStartDate("2026-09-02T08:00:00Z")) |
