test: add MapLive.Index zoom threshold and tracking tests

This commit is contained in:
Graham McIntire 2026-04-23 17:05:58 -05:00
parent b4d0093a8f
commit 3eec54439b
No known key found for this signature in database
GPG key ID: F4ABF488E6029E59

View file

@ -445,4 +445,87 @@ defmodule AprsmeWeb.MapLive.IndexTest do
assert html =~ "K5ABC" or html =~ "aprs-map"
end
end
describe "MapLive.Index zoom and map state changes" do
test "update_map_state crossing heat map threshold (high → low zoom)", %{conn: conn} do
{:ok, view, _html} = live(conn, "/?lat=40.5&lng=-98.5&z=10", on_error: :warn)
# Drop from zoom 10 → 6 — crosses the zoom-8 heat-map threshold.
assert render_hook(view, "update_map_state", %{
"center" => %{"lat" => 40.5, "lng" => -98.5},
"zoom" => 6
})
end
test "update_map_state crossing heat map threshold (low → high zoom)", %{conn: conn} do
{:ok, view, _html} = live(conn, "/?lat=40.5&lng=-98.5&z=5", on_error: :warn)
# Jump from zoom 5 → 12 — crosses the threshold in the other direction.
assert render_hook(view, "update_map_state", %{
"center" => %{"lat" => 40.5, "lng" => -98.5},
"zoom" => 12
})
end
test "update_map_state with string zoom value", %{conn: conn} do
{:ok, view, _html} = live(conn, "/", on_error: :warn)
assert render_hook(view, "update_map_state", %{
"center" => %{"lat" => "40.5", "lng" => "-98.5"},
"zoom" => "10"
})
end
test "update_map_state clamps extreme zoom values", %{conn: conn} do
{:ok, view, _html} = live(conn, "/", on_error: :warn)
assert render_hook(view, "update_map_state", %{
"center" => %{"lat" => 0.0, "lng" => 0.0},
"zoom" => 99
})
end
test "bounds_changed with very zoomed-in bounds", %{conn: conn} do
{:ok, view, _html} = live(conn, "/", on_error: :warn)
assert render_hook(view, "bounds_changed", %{
"bounds" => %{
"north" => 40.75,
"south" => 40.74,
"east" => -73.98,
"west" => -73.99
}
})
end
end
describe "MapLive.Index tracking flow" do
test "track_callsign with whitespace trims and uppercases", %{conn: conn} do
{:ok, view, _html} = live(conn, "/", on_error: :warn)
# Mixed case + whitespace — should be normalized.
assert render_hook(view, "track_callsign", %{"callsign" => " k5abc "})
end
test "clear_tracking works after starting tracking", %{conn: conn} do
{:ok, view, _html} = live(conn, "/", on_error: :warn)
render_hook(view, "track_callsign", %{"callsign" => "W1XYZ"})
assert render_hook(view, "clear_tracking", %{})
end
test "update_trail_duration with various values", %{conn: conn} do
{:ok, view, _html} = live(conn, "/", on_error: :warn)
for dur <- ["1", "2", "6", "12", "24"] do
assert render_hook(view, "update_trail_duration", %{"trail_duration" => dur})
end
end
test "update_historical_hours with various values", %{conn: conn} do
{:ok, view, _html} = live(conn, "/", on_error: :warn)
for hrs <- ["1", "2", "6", "12", "24"] do
assert render_hook(view, "update_historical_hours", %{"historical_hours" => hrs})
end
end
end
end