package official_climb_test import ( "testing" "github.com/martinlehoux/biking_home/internal/dbtest" "github.com/martinlehoux/biking_home/official_climb" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestListWithAggregatesMediansAndUnridden(t *testing.T) { db := dbtest.New(t) unridden, err := official_climb.Create(db, official_climb.OfficialClimb{Name: "Col Fantome", StartCoord: coord(43.9, 5.9), EndCoord: coord(43.92, 5.92)}) require.NoError(t, err) climbed, err := official_climb.Create(db, official_climb.OfficialClimb{Name: "Col Fréquente", StartCoord: coord(43.6, 5.4), EndCoord: coord(43.62, 5.42)}) require.NoError(t, err) rideID := insertRide(t, db) attempt := attemptFixture(rideID, climbed.ID, 0) attempt.DistanceM = 3000 attempt.Cotacol = 80 medianAttempt := attempt medianAttempt.Occurrence = 1 medianAttempt.DistanceM = 3200 medianAttempt.Cotacol = 84 outlier := attempt outlier.Occurrence = 2 outlier.DistanceM = 9000 outlier.Cotacol = 500 require.NoError(t, official_climb.ReplaceRideAttempts(db, rideID, []official_climb.Attempt{attempt, medianAttempt, outlier})) climbs, err := official_climb.ListWithAggregates(db) require.NoError(t, err) require.Len(t, climbs, 2) byID := make(map[int64]official_climb.ListedClimb) for _, climb := range climbs { byID[climb.ID] = climb } frequente := byID[climbed.ID] assert.Equal(t, 3, frequente.Attempts) assert.Equal(t, 3200.0, frequente.DistanceM, "median ignores the 9 km outlier") assert.Equal(t, 84.0, frequente.Cotacol) assert.True(t, frequente.HasBest) assert.Positive(t, frequente.BestDurationS) fantome := byID[unridden.ID] assert.Equal(t, 0, fantome.Attempts) assert.Equal(t, 0.0, fantome.DistanceM) assert.False(t, fantome.HasBest) }