aboutsummaryrefslogtreecommitdiff
path: root/web/server_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'web/server_test.go')
-rw-r--r--web/server_test.go242
1 files changed, 121 insertions, 121 deletions
diff --git a/web/server_test.go b/web/server_test.go
index d75628d..2e9a332 100644
--- a/web/server_test.go
+++ b/web/server_test.go
@@ -89,24 +89,24 @@ const officialClimbTrackGPX = `<?xml version="1.0"?><gpx xmlns="http://www.topog
func TestHandlerRendersRidesPage(t *testing.T) {
server, db := newWebTestServer(t)
require.NoError(t, ride.Save(db, ride.StoredRide{
- ExternalID: "strava:1234",
- GPXPath: testGPXPath(t, "long.gpx"),
- Name: "Long Ride",
- Type: "Ride",
- BikeType: ride.BikeTypeRoad,
- RideType: ride.RideTypeTraining,
- StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
- DistanceM: 20_000,
+ ExternalID: "strava:1234",
+ GPXPath: testGPXPath(t, "long.gpx"),
+ Name: "Long Ride",
+ ExternalSportType: "Ride",
+ BikeType: ride.BikeTypeRoad,
+ RideType: ride.RideTypeTraining,
+ StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
+ DistanceM: 20_000,
}))
require.NoError(t, ride.Save(db, ride.StoredRide{
- ExternalID: "strava:5678",
- GPXPath: testGPXPath(t, "short.gpx"),
- Name: "Short Ride",
- Type: "Ride",
- BikeType: ride.BikeTypeRoad,
- RideType: ride.RideTypeTraining,
- StartDate: time.Date(2026, 8, 2, 7, 0, 0, 0, time.UTC),
- DistanceM: 9_999,
+ ExternalID: "strava:5678",
+ GPXPath: testGPXPath(t, "short.gpx"),
+ Name: "Short Ride",
+ ExternalSportType: "Ride",
+ BikeType: ride.BikeTypeRoad,
+ RideType: ride.RideTypeTraining,
+ StartDate: time.Date(2026, 8, 2, 7, 0, 0, 0, time.UTC),
+ DistanceM: 9_999,
}))
req := httptest.NewRequest(http.MethodGet, "/", nil)
response := httptest.NewRecorder()
@@ -126,14 +126,14 @@ func TestHandlerRendersRidesPage(t *testing.T) {
func TestHandlerRendersRideDetailWithEmbeddedRoute(t *testing.T) {
server, db := newWebTestServer(t)
require.NoError(t, ride.Save(db, ride.StoredRide{
- ExternalID: "strava:550e8400-e29b-41d4-a716-446655440000",
- GPXPath: testGPXPath(t, "detail.gpx"),
- Name: "Detailed Ride",
- Type: "Ride",
- BikeType: ride.BikeTypeRoad,
- RideType: ride.RideTypeTraining,
- StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
- DistanceM: 20_000,
+ ExternalID: "strava:550e8400-e29b-41d4-a716-446655440000",
+ GPXPath: testGPXPath(t, "detail.gpx"),
+ Name: "Detailed Ride",
+ ExternalSportType: "Ride",
+ BikeType: ride.BikeTypeRoad,
+ RideType: ride.RideTypeTraining,
+ StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
+ DistanceM: 20_000,
}))
_, err := db.Exec(`
INSERT INTO mountain_passes (osm_id, name, elevation, latitude, longitude)
@@ -275,14 +275,14 @@ func TestHandlerCreatesOfficialClimbFromRoutePoints(t *testing.T) {
routePath := filepath.Join(t.TempDir(), "official-climb.gpx")
require.NoError(t, os.WriteFile(routePath, []byte(officialClimbTrackGPX), 0o600))
require.NoError(t, ride.Save(db, ride.StoredRide{
- ExternalID: "strava:550e8400-e29b-41d4-a716-446655440000",
- GPXPath: routePath,
- Name: "Climb Candidate",
- Type: "Ride",
- BikeType: ride.BikeTypeRoad,
- RideType: ride.RideTypeTraining,
- StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
- DistanceM: 2_000,
+ ExternalID: "strava:550e8400-e29b-41d4-a716-446655440000",
+ GPXPath: routePath,
+ Name: "Climb Candidate",
+ ExternalSportType: "Ride",
+ BikeType: ride.BikeTypeRoad,
+ RideType: ride.RideTypeTraining,
+ StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
+ DistanceM: 2_000,
}))
item, found, err := ride.GetByExternalID(db, "strava:550e8400-e29b-41d4-a716-446655440000")
require.NoError(t, err)
@@ -334,13 +334,13 @@ func TestHandlerCreatesOfficialClimbFromRoutePoints(t *testing.T) {
func TestHandlerRendersRideDetailWithoutRoute(t *testing.T) {
server, db := newWebTestServer(t)
item := ride.StoredRide{
- ExternalID: "strava:14701658670",
- Name: "Indoor Ride",
- Type: "VirtualRide",
- BikeType: ride.BikeTypeRoad,
- RideType: ride.RideTypeTraining,
- StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
- DistanceM: 20_000,
+ ExternalID: "strava:14701658670",
+ Name: "Indoor Ride",
+ ExternalSportType: "VirtualRide",
+ BikeType: ride.BikeTypeRoad,
+ RideType: ride.RideTypeTraining,
+ StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
+ DistanceM: 20_000,
}
require.NoError(t, ride.Save(db, item))
stored, found, err := ride.GetByExternalID(db, item.ExternalID)
@@ -361,22 +361,22 @@ func TestHandlerRendersRideDetailWithoutRoute(t *testing.T) {
func TestHandlerRendersAnalyticsChart(t *testing.T) {
server, db := newWebTestServer(t)
first := ride.StoredRide{
- ExternalID: "strava:550e8400-e29b-41d4-a716-446655440001",
- Name: "Fastish Ride",
- Type: "Ride",
- BikeType: ride.BikeTypeRoad,
- RideType: ride.RideTypeTraining,
- StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
- DistanceM: 40_000,
+ ExternalID: "strava:550e8400-e29b-41d4-a716-446655440001",
+ Name: "Fastish Ride",
+ ExternalSportType: "Ride",
+ BikeType: ride.BikeTypeRoad,
+ RideType: ride.RideTypeTraining,
+ StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
+ DistanceM: 40_000,
}
second := ride.StoredRide{
- ExternalID: "strava:550e8400-e29b-41d4-a716-446655440002",
- Name: "Climbing Ride",
- Type: "Ride",
- BikeType: ride.BikeTypeRoad,
- RideType: ride.RideTypeTraining,
- StartDate: time.Date(2026, 8, 2, 7, 0, 0, 0, time.UTC),
- DistanceM: 40_000,
+ ExternalID: "strava:550e8400-e29b-41d4-a716-446655440002",
+ Name: "Climbing Ride",
+ ExternalSportType: "Ride",
+ BikeType: ride.BikeTypeRoad,
+ RideType: ride.RideTypeTraining,
+ StartDate: time.Date(2026, 8, 2, 7, 0, 0, 0, time.UTC),
+ DistanceM: 40_000,
}
require.NoError(t, ride.Save(db, first))
require.NoError(t, ride.Save(db, second))
@@ -407,22 +407,22 @@ func TestHandlerRendersAnalyticsChart(t *testing.T) {
func TestHandlerFiltersAnalyticsByDistance(t *testing.T) {
server, db := newWebTestServer(t)
short := ride.StoredRide{
- ExternalID: "strava:550e8400-e29b-41d4-a716-446655440003",
- Name: "Short Ride",
- Type: "Ride",
- BikeType: ride.BikeTypeRoad,
- RideType: ride.RideTypeTraining,
- StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
- DistanceM: 40_000,
+ ExternalID: "strava:550e8400-e29b-41d4-a716-446655440003",
+ Name: "Short Ride",
+ ExternalSportType: "Ride",
+ BikeType: ride.BikeTypeRoad,
+ RideType: ride.RideTypeTraining,
+ StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
+ DistanceM: 40_000,
}
long := ride.StoredRide{
- ExternalID: "strava:550e8400-e29b-41d4-a716-446655440004",
- Name: "Long Ride",
- Type: "Ride",
- BikeType: ride.BikeTypeRoad,
- RideType: ride.RideTypeTraining,
- StartDate: time.Date(2026, 8, 2, 7, 0, 0, 0, time.UTC),
- DistanceM: 100_000,
+ ExternalID: "strava:550e8400-e29b-41d4-a716-446655440004",
+ Name: "Long Ride",
+ ExternalSportType: "Ride",
+ BikeType: ride.BikeTypeRoad,
+ RideType: ride.RideTypeTraining,
+ StartDate: time.Date(2026, 8, 2, 7, 0, 0, 0, time.UTC),
+ DistanceM: 100_000,
}
require.NoError(t, ride.Save(db, short))
require.NoError(t, ride.Save(db, long))
@@ -462,7 +462,7 @@ func TestHandlerReturnsNotFoundForUnknownRide(t *testing.T) {
func TestHandlerShowsErrorForUnavailableRideRoute(t *testing.T) {
server, db := newWebTestServer(t)
_, err := db.Exec(`
- INSERT INTO rides (external_id, gpx_path, name, type, start_date, distance_m, external_moving_time_s, elapsed_time_s, total_elevation_gain_m, average_speed_mps)
+ INSERT INTO rides (external_id, gpx_path, name, external_sport_type, start_date, distance_m, external_moving_time_s, elapsed_time_s, total_elevation_gain_m, average_speed_mps)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`, "strava:6ba7b810-9dad-41d1-80b4-00c04fd430c8", "missing.gpx", "Unavailable Route", "Ride", "2026-08-01T07:00:00Z", 20_000, 0, 0, 0, 0)
require.NoError(t, err)
@@ -634,12 +634,12 @@ func TestSyncRidesResyncsTitleFromList(t *testing.T) {
startDate := time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC)
gpxPath := testGPXPath(t, "existing.gpx")
require.NoError(t, ride.Save(db, ride.StoredRide{
- ExternalID: "strava:789",
- GPXPath: gpxPath,
- Name: "Old Title",
- Type: "Ride",
- StartDate: startDate,
- DistanceM: 20_000,
+ ExternalID: "strava:789",
+ GPXPath: gpxPath,
+ Name: "Old Title",
+ ExternalSportType: "Ride",
+ StartDate: startDate,
+ DistanceM: 20_000,
}))
// Verify the title was corrected on Strava (ride #789).
client := fakeSyncClient{
@@ -666,12 +666,12 @@ func TestSyncRidesSkipsWhenTitleUnchanged(t *testing.T) {
server, db := newWebTestServer(t)
startDate := time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC)
require.NoError(t, ride.Save(db, ride.StoredRide{
- ExternalID: "strava:789",
- GPXPath: testGPXPath(t, "existing2.gpx"),
- Name: "Same Title",
- Type: "Ride",
- StartDate: startDate,
- DistanceM: 20_000,
+ ExternalID: "strava:789",
+ GPXPath: testGPXPath(t, "existing2.gpx"),
+ Name: "Same Title",
+ ExternalSportType: "Ride",
+ StartDate: startDate,
+ DistanceM: 20_000,
}))
client := fakeSyncClient{
activities: []strava.Activity{
@@ -805,14 +805,14 @@ func TestRideSortHeadersToggleDirection(t *testing.T) {
func TestBuildRideViewsUsesStoredCotacol(t *testing.T) {
_, db := newWebTestServer(t)
stored := ride.StoredRide{
- ExternalID: "strava:550e8400-e29b-41d4-a716-446655440000",
- GPXPath: testGPXPath(t, "stored.gpx"),
- Name: "Stored Ride",
- Type: "Ride",
- BikeType: ride.BikeTypeRoad,
- RideType: ride.RideTypeTraining,
- StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
- DistanceM: 20_000,
+ ExternalID: "strava:550e8400-e29b-41d4-a716-446655440000",
+ GPXPath: testGPXPath(t, "stored.gpx"),
+ Name: "Stored Ride",
+ ExternalSportType: "Ride",
+ BikeType: ride.BikeTypeRoad,
+ RideType: ride.RideTypeTraining,
+ StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
+ DistanceM: 20_000,
}
require.NoError(t, ride.Save(db, stored))
_, err := db.Exec("UPDATE rides SET gpx_path = ? WHERE external_id = ?", "missing.gpx", stored.ExternalID)
@@ -831,7 +831,7 @@ func TestBuildRideViewMovingTimePrefersCanonical(t *testing.T) {
ExternalID: "strava:550e8400-e29b-41d4-a716-446655440000",
GPXPath: testGPXPath(t, "moving.gpx"),
Name: "Moving Ride",
- Type: "Ride",
+ ExternalSportType: "Ride",
StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
DistanceM: 20_000,
ExternalMovingTimeS: 7_200,
@@ -847,24 +847,24 @@ func TestBuildRideViewMovingTimePrefersCanonical(t *testing.T) {
func TestHandlerSortsRidesByDistance(t *testing.T) {
server, db := newWebTestServer(t)
require.NoError(t, ride.Save(db, ride.StoredRide{
- ExternalID: "strava:550e8400-e29b-41d4-a716-446655440000",
- GPXPath: testGPXPath(t, "near.gpx"),
- Name: "Near Ride",
- Type: "Ride",
- BikeType: ride.BikeTypeRoad,
- RideType: ride.RideTypeTraining,
- StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
- DistanceM: 20_000,
+ ExternalID: "strava:550e8400-e29b-41d4-a716-446655440000",
+ GPXPath: testGPXPath(t, "near.gpx"),
+ Name: "Near Ride",
+ ExternalSportType: "Ride",
+ BikeType: ride.BikeTypeRoad,
+ RideType: ride.RideTypeTraining,
+ StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
+ DistanceM: 20_000,
}))
require.NoError(t, ride.Save(db, ride.StoredRide{
- ExternalID: "strava:6ba7b810-9dad-41d1-80b4-00c04fd430c8",
- GPXPath: testGPXPath(t, "far.gpx"),
- Name: "Far Ride",
- Type: "Ride",
- BikeType: ride.BikeTypeRoad,
- RideType: ride.RideTypeTraining,
- StartDate: time.Date(2026, 8, 2, 7, 0, 0, 0, time.UTC),
- DistanceM: 40_000,
+ ExternalID: "strava:6ba7b810-9dad-41d1-80b4-00c04fd430c8",
+ GPXPath: testGPXPath(t, "far.gpx"),
+ Name: "Far Ride",
+ ExternalSportType: "Ride",
+ BikeType: ride.BikeTypeRoad,
+ RideType: ride.RideTypeTraining,
+ StartDate: time.Date(2026, 8, 2, 7, 0, 0, 0, time.UTC),
+ DistanceM: 40_000,
}))
req := httptest.NewRequest(http.MethodGet, "/?sort=distance&dir=asc", nil)
@@ -880,24 +880,24 @@ func TestHandlerSortsRidesByDistance(t *testing.T) {
func TestHandlerSortsRidesByCotacol(t *testing.T) {
server, db := newWebTestServer(t)
first := ride.StoredRide{
- ExternalID: "strava:550e8400-e29b-41d4-a716-446655440000",
- GPXPath: testGPXPath(t, "first.gpx"),
- Name: "Low Cotacol",
- Type: "Ride",
- BikeType: ride.BikeTypeRoad,
- RideType: ride.RideTypeTraining,
- StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
- DistanceM: 20_000,
+ ExternalID: "strava:550e8400-e29b-41d4-a716-446655440000",
+ GPXPath: testGPXPath(t, "first.gpx"),
+ Name: "Low Cotacol",
+ ExternalSportType: "Ride",
+ BikeType: ride.BikeTypeRoad,
+ RideType: ride.RideTypeTraining,
+ StartDate: time.Date(2026, 8, 1, 7, 0, 0, 0, time.UTC),
+ DistanceM: 20_000,
}
second := ride.StoredRide{
- ExternalID: "strava:6ba7b810-9dad-41d1-80b4-00c04fd430c8",
- GPXPath: testGPXPath(t, "second.gpx"),
- Name: "High Cotacol",
- Type: "Ride",
- BikeType: ride.BikeTypeRoad,
- RideType: ride.RideTypeTraining,
- StartDate: time.Date(2026, 8, 2, 7, 0, 0, 0, time.UTC),
- DistanceM: 40_000,
+ ExternalID: "strava:6ba7b810-9dad-41d1-80b4-00c04fd430c8",
+ GPXPath: testGPXPath(t, "second.gpx"),
+ Name: "High Cotacol",
+ ExternalSportType: "Ride",
+ BikeType: ride.BikeTypeRoad,
+ RideType: ride.RideTypeTraining,
+ StartDate: time.Date(2026, 8, 2, 7, 0, 0, 0, time.UTC),
+ DistanceM: 40_000,
}
require.NoError(t, ride.Save(db, first))
require.NoError(t, ride.Save(db, second))