package ride_test
import (
"strings"
"testing"
"github.com/martinlehoux/biking_home/ride"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
const parserTestGPXPrefix = ``
const parserTestGPXSuffix = ``
const parserTestGPXMetricsPrefix = ``
func TestGPXRideParserSkipsStationaryPoints(t *testing.T) {
data := parserTestGPXPrefix +
`100` +
`101` +
`102` +
`103` +
parserTestGPXSuffix
parsed, err := (ride.GPXRideParser{}).Parse(strings.NewReader(data))
require.NoError(t, err)
assert.Equal(t, 2, parsed.Len())
assert.Greater(t, parsed.DistanceM(1), 0.0)
}
func TestGPXRideParserRejectsStationaryRide(t *testing.T) {
data := parserTestGPXPrefix +
`100` +
`101` +
parserTestGPXSuffix
_, err := (ride.GPXRideParser{}).Parse(strings.NewReader(data))
require.Error(t, err)
assert.Equal(t, "zero distance", err.Error())
}
func TestGPXRideParserRejectsEmptyTrack(t *testing.T) {
data := parserTestGPXPrefix + parserTestGPXSuffix
_, err := (ride.GPXRideParser{}).Parse(strings.NewReader(data))
require.Error(t, err)
assert.Equal(t, "ride has no track points", err.Error())
}
func TestGPXRideParserReadsGarminMetrics(t *testing.T) {
data := parserTestGPXMetricsPrefix +
`1009070200` +
`1019171201` +
`1029272202` +
parserTestGPXSuffix
parsed, err := (ride.GPXRideParser{}).Parse(strings.NewReader(data))
require.NoError(t, err)
assert.Equal(t, 2, parsed.Len())
heartRate, found := parsed.HeartRateBpm(1)
require.True(t, found)
assert.Equal(t, 92.0, heartRate)
cadence, found := parsed.CadenceRpm(1)
require.True(t, found)
assert.Equal(t, 72.0, cadence)
power, found := parsed.PowerW(1)
require.True(t, found)
assert.Equal(t, 202.0, power)
}
func TestGPXRideParserDropsIncompleteMetricColumn(t *testing.T) {
data := parserTestGPXMetricsPrefix +
`1009070200` +
`102920` +
parserTestGPXSuffix
parsed, err := (ride.GPXRideParser{}).Parse(strings.NewReader(data))
require.NoError(t, err)
_, found := parsed.CadenceRpm(0)
assert.False(t, found)
heartRate, found := parsed.HeartRateBpm(1)
require.True(t, found)
assert.Equal(t, 92.0, heartRate)
power, found := parsed.PowerW(1)
require.True(t, found)
assert.Equal(t, 0.0, power)
}