diff options
| author | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-08-27 18:05:59 +0200 |
|---|---|---|
| committer | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-08-27 18:05:59 +0200 |
| commit | 558f755f5746a4ee819de87579951b7533688e5d (patch) | |
| tree | ced2f96966a5aee90a7756e0c01f0b1295a2a55d /mountain_pass/extract_test.go | |
| parent | 751af663f38e174203c10438e5ef36277e93cd68 (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.go | 43 |
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")) +} |
