mirror of
https://github.com/zvx-echo6/central.git
synced 2026-06-10 11:54:37 +02:00
47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
|
|
"""Bug 2 (v0.7.0): out-of-range map bbox must not reach the SQL envelope.
|
||
|
|
|
||
|
|
Leaflet returns longitudes outside [-180, 180] when the map is panned past the
|
||
|
|
dateline at low zoom (e.g. east=411.3281, west=-608.2031). The map JS now
|
||
|
|
normalizes/omits those, but _parse_events_params also defends in depth: a
|
||
|
|
degenerate or out-of-range region is treated as "no bbox" rather than erroring
|
||
|
|
or building a bogus ST_MakeEnvelope that silently matches the wrong rows.
|
||
|
|
"""
|
||
|
|
from central.gui.routes import _parse_events_params
|
||
|
|
|
||
|
|
|
||
|
|
def _params(**kw):
|
||
|
|
base = {"limit": "50"}
|
||
|
|
base.update(kw)
|
||
|
|
return base
|
||
|
|
|
||
|
|
|
||
|
|
def test_out_of_range_bbox_is_dropped_not_errored():
|
||
|
|
"""The exact pan-past-dateline artifact from the bug report -> no bbox."""
|
||
|
|
parsed, error = _parse_events_params(_params(
|
||
|
|
region_north="42.0", region_south="31.0",
|
||
|
|
region_east="411.3281", region_west="-608.2031",
|
||
|
|
))
|
||
|
|
assert error is None
|
||
|
|
assert parsed is not None
|
||
|
|
assert parsed["bbox"] is None
|
||
|
|
|
||
|
|
|
||
|
|
def test_valid_bbox_is_preserved():
|
||
|
|
parsed, error = _parse_events_params(_params(
|
||
|
|
region_north="42.0", region_south="31.0",
|
||
|
|
region_east="-102.0", region_west="-124.5",
|
||
|
|
))
|
||
|
|
assert error is None
|
||
|
|
assert parsed["bbox"] == {
|
||
|
|
"north": 42.0, "south": 31.0, "east": -102.0, "west": -124.5,
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
def test_inverted_bbox_is_dropped():
|
||
|
|
"""west >= east (a wrapped dateline-straddle) is degenerate -> no bbox."""
|
||
|
|
parsed, error = _parse_events_params(_params(
|
||
|
|
region_north="42.0", region_south="31.0",
|
||
|
|
region_east="-124.5", region_west="-102.0",
|
||
|
|
))
|
||
|
|
assert error is None
|
||
|
|
assert parsed["bbox"] is None
|