Spaces:
Running
Running
File size: 2,489 Bytes
fb7515e a1f52bf fb7515e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | """Offline tests for wavereader.breaks (load, validate, resolve, filter)."""
import json
import pytest
from wavereader import breaks as br
def test_load_breaks_count_and_sort():
breaks = br.load_breaks()
assert len(breaks) == 238
assert br.load_breaks.last_skipped == 0
keys = [(b["state"], b["region"], b["name"]) for b in breaks]
assert keys == sorted(keys)
def test_all_records_validate_strict():
breaks = br.load_breaks(strict=True) # raises on any invalid record
assert len(breaks) == 238
def test_is_valid_break_rejects_garbage():
assert not br.is_valid_break({"name": "Nope"})
bells = br.resolve_break("Bells Beach")
assert bells is not None and br.is_valid_break(bells)
def test_resolve_break_exact_and_case_insensitive():
assert br.resolve_break("Bells Beach")["region"] == "Surf Coast"
assert br.resolve_break("bells beach")["name"] == "Bells Beach"
assert br.resolve_break("BELLS BEACH", region="surf coast")["name"] == "Bells Beach"
def test_resolve_break_fuzzy_and_scoped():
assert br.resolve_break("bells")["name"] == "Bells Beach"
# Unknown region falls back to the global pool.
assert br.resolve_break("Bells Beach", region="No Such Region")["name"] == "Bells Beach"
assert br.resolve_break("Bells Beach", region="Surf Coast")["name"] == "Bells Beach"
assert br.resolve_break("definitely not a break xyz") is None
assert br.resolve_break("") is None
def test_resolve_break_region_disambiguates():
pool = [
{"name": "The Pass", "region": "North", "state": "NSW"},
{"name": "The Pass", "region": "South", "state": "NSW"},
]
assert br.resolve_break("The Pass", region="south", breaks=pool)["region"] == "South"
def test_filter_breaks():
breaks = br.load_breaks()
vic = br.filter_breaks(breaks, state="victoria")
assert vic and all(b["state"] == "Victoria" for b in vic)
surf_coast = br.filter_breaks(breaks, region="Surf Coast")
assert surf_coast and all(b["region"] == "Surf Coast" for b in surf_coast)
assert br.filter_breaks(breaks, state="All") == breaks
assert br.filter_breaks(breaks, skill="advanced")
def test_get_coords():
lat, lng = br.get_coords(br.resolve_break("Bells Beach"))
# OSM ground truth (beach feature), verified via scripts/check_coords.py
assert lat == pytest.approx(-38.368985, abs=0.01)
assert lng == pytest.approx(144.282452, abs=0.01)
assert br.get_coords({}) == (None, None)
|