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.Distances[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())
heartRates, ok := parsed.HeartRates()
require.True(t, ok)
assert.Equal(t, 92.0, heartRates[1])
cadences, ok := parsed.Cadences()
require.True(t, ok)
assert.Equal(t, 72.0, cadences[1])
powers, ok := parsed.Powers()
require.True(t, ok)
assert.Equal(t, 202.0, powers[1])
}
func TestGPXRideParserDropsIncompleteMetricColumn(t *testing.T) {
data := parserTestGPXMetricsPrefix +
`1009070200` +
`102920` +
parserTestGPXSuffix
parsed, err := (ride.GPXRideParser{}).Parse(strings.NewReader(data))
require.NoError(t, err)
_, ok := parsed.Cadences()
assert.False(t, ok)
heartRates, ok := parsed.HeartRates()
require.True(t, ok)
assert.Equal(t, 92.0, heartRates[1])
powers, ok := parsed.Powers()
require.True(t, ok)
assert.Equal(t, 0.0, powers[1])
}