wavereader / tests /test_breaks.py
lucashudsn's picture
agent fully implemented, cleaned ui merged data etc
a1f52bf
Raw History Blame Contribute Delete
2.49 kB
"""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)