package ride_test
import (
"strings"
"testing"
"time"
"github.com/martinlehoux/biking_home/ride"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func gpxWithPoints(t *testing.T, points string) ride.Ride {
t.Helper()
data := parserTestGPXPrefix + points + parserTestGPXSuffix
parsed, err := (ride.GPXRideParser{}).Parse(strings.NewReader(data))
require.NoError(t, err)
return parsed
}
func trackPoint(lat, lon string, timestamp string) string {
return `` +
`100` +
`` +
``
}
func TestMovingTimeCountsSteadyRiding(t *testing.T) {
parsed := gpxWithPoints(t,
trackPoint("43.0", "5.0", "2026-01-01T10:00:00Z")+
trackPoint("43.009", "5.0", "2026-01-01T10:01:00Z")+
trackPoint("43.018", "5.0", "2026-01-01T10:02:00Z"),
)
assert.Equal(t, 2*time.Minute, ride.MovingTime(parsed))
}
func TestMovingTimeExcludesSlowInterval(t *testing.T) {
parsed := gpxWithPoints(t,
trackPoint("43.0", "5.0", "2026-01-01T10:00:00Z")+
trackPoint("43.0005", "5.0", "2026-01-01T10:10:00Z")+
trackPoint("43.009", "5.0", "2026-01-01T10:12:00Z"),
)
assert.Equal(t, 2*time.Minute, ride.MovingTime(parsed))
}
func TestMovingTimeExcludesLunchBreak(t *testing.T) {
parsed := gpxWithPoints(t,
trackPoint("43.0", "5.0", "2026-01-01T10:00:00Z")+
trackPoint("43.0001", "5.0", "2026-01-01T10:30:00Z")+
trackPoint("43.009", "5.0", "2026-01-01T10:31:00Z"),
)
assert.Equal(t, time.Minute, ride.MovingTime(parsed))
}
func TestMovingTimeWithoutTimestamps(t *testing.T) {
data := parserTestGPXPrefix +
`100` +
`100` +
parserTestGPXSuffix
parsed, err := (ride.GPXRideParser{}).Parse(strings.NewReader(data))
require.NoError(t, err)
assert.Equal(t, time.Duration(0), ride.MovingTime(parsed))
}
func TestMovingTimeAlgorithmVersion(t *testing.T) {
assert.Equal(t, "v1", ride.MovingTimeAlgorithmVersion)
}