aboutsummaryrefslogtreecommitdiff
path: root/mountain_pass/extract_test.go
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2026-08-27 18:05:59 +0200
committerMartin Kagamino Lehoux <martin@lehoux.net>2026-08-27 18:05:59 +0200
commit558f755f5746a4ee819de87579951b7533688e5d (patch)
treeced2f96966a5aee90a7756e0c01f0b1295a2a55d /mountain_pass/extract_test.go
parent751af663f38e174203c10438e5ef36277e93cd68 (diff)
Categorise OSM passes by highway and colour them on the ride detail map
Passes are extracted from OSM PBF nodes (mountain_pass=yes) and linked to containing ways; highway road values map to road, track to track, path/footway to path, plus hiking for rock/climbing. All passes are kept, coloured distinctly (road/track/path/hiking/unknown) for road-bike validation on ride 397. Single squashed migration adds category column, cheap to re-extract.
Diffstat (limited to 'mountain_pass/extract_test.go')
-rw-r--r--mountain_pass/extract_test.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/mountain_pass/extract_test.go b/mountain_pass/extract_test.go
index 7eae33b..952ba08 100644
--- a/mountain_pass/extract_test.go
+++ b/mountain_pass/extract_test.go
@@ -68,3 +68,46 @@ func TestCountingReaderTracksBytes(t *testing.T) {
}
assert.Equal(t, int64(len(content)), reader.n)
}
+
+func TestCategorizePass(t *testing.T) {
+ cases := []struct {
+ name string
+ tags map[string]string
+ highways []string
+ wantCategory string
+ }{
+ {"road secondary", map[string]string{"natural": "saddle"}, []string{"secondary"}, CategoryRoad},
+ {"road wins over path", map[string]string{"natural": "saddle"}, []string{"path", "secondary", "track"}, CategoryRoad},
+ {"track", map[string]string{"natural": "saddle"}, []string{"track"}, CategoryTrack},
+ {"path", map[string]string{"natural": "saddle"}, []string{"path"}, CategoryPath},
+ {"hiking rock path", map[string]string{"natural": "rock", "sport": "climbing"}, []string{"path"}, CategoryHiking},
+ {"hiking rock no way", map[string]string{"natural": "rock"}, nil, CategoryHiking},
+ {"unknown no way", map[string]string{"natural": "saddle"}, nil, CategoryUnknown},
+ {"via_ferrata is path", map[string]string{"natural": "saddle"}, []string{"via_ferrata"}, CategoryPath},
+ {"unknown other highway", map[string]string{"natural": "saddle"}, []string{"construction"}, CategoryUnknown},
+ {"hiking rock but road present is road", map[string]string{"natural": "rock", "sport": "climbing"}, []string{"secondary"}, CategoryRoad},
+ }
+ for _, c := range cases {
+ tags := osm.Tags{}
+ for k, v := range c.tags {
+ tags = append(tags, osm.Tag{Key: k, Value: v})
+ }
+ cat := categorizePass(tags, c.highways)
+ assert.Equal(t, c.wantCategory, cat, c.name)
+ }
+}
+
+func TestIsRoadHighway(t *testing.T) {
+ assert.True(t, isRoadHighway("secondary"))
+ assert.True(t, isRoadHighway("primary"))
+ assert.True(t, isRoadHighway("tertiary"))
+ assert.True(t, isRoadHighway("residential"))
+ assert.False(t, isRoadHighway("track"))
+ assert.False(t, isRoadHighway("path"))
+}
+
+func TestIsPathHighway(t *testing.T) {
+ assert.True(t, isPathHighway("path"))
+ assert.True(t, isPathHighway("footway"))
+ assert.False(t, isPathHighway("secondary"))
+}