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)