aprs.me/test/aprsme/spatial_pubsub_test.exs
Graham McIntire 7b488e9fd7
Fix code review findings batch 2: dead code, encoding, correctness
- Delete dead modules: Archiver, PacketPipelineSetup, SystemMonitor
- Encoding: fast-path for clean ASCII, fix latin1 C1 control chars (128-159)
- SpatialPubSub: fix date line grid cell wrapping
- QueryBuilder: use indexed has_weather column instead of 10-way OR
- PacketProcessor/HistoricalLoader: wire up heat map via DisplayManager
- MapLive: add PacketBatcher crash recovery with Process.monitor
- MapLive: fix time display re-render by touching assign
- DeviceCache: remove unreachable outer try/rescue
- Remove dead stubs: RateLimiterWrapper count/reset, DeviceIdentification enqueue_refresh_job
- Simplify Application.pubsub_config/0
- Add tests for SpatialPubSub, PacketBatcher, encoding, weather_only
2026-02-20 07:29:27 -06:00

61 lines
2.1 KiB
Elixir

defmodule Aprsme.SpatialPubSubTest do
use ExUnit.Case, async: false
alias Aprsme.SpatialPubSub
describe "viewport registration" do
test "date-line-crossing viewport registers without timeout" do
bounds = %{north: 10.0, south: -10.0, east: -170.0, west: 170.0}
client_id = "test_dateline_#{:rand.uniform(100_000)}"
# Before the fix, west=170 east=-170 generated ~341 grid cells.
# Now it correctly generates ~21 cells.
assert {:ok, _topic} = SpatialPubSub.register_viewport(client_id, bounds)
SpatialPubSub.unregister_client(client_id)
end
test "normal viewport registers successfully" do
bounds = %{north: 41.0, south: 40.0, east: -73.0, west: -74.0}
client_id = "test_normal_#{:rand.uniform(100_000)}"
assert {:ok, _topic} = SpatialPubSub.register_viewport(client_id, bounds)
SpatialPubSub.unregister_client(client_id)
end
test "update_viewport succeeds after registration" do
bounds = %{north: 41.0, south: 40.0, east: -73.0, west: -74.0}
new_bounds = %{north: 42.0, south: 41.0, east: -72.0, west: -73.0}
client_id = "test_update_#{:rand.uniform(100_000)}"
{:ok, _topic} = SpatialPubSub.register_viewport(client_id, bounds)
assert :ok = SpatialPubSub.update_viewport(client_id, new_bounds)
SpatialPubSub.unregister_client(client_id)
end
end
describe "stats" do
test "get_stats returns expected keys" do
stats = SpatialPubSub.get_stats()
assert is_map(stats)
assert Map.has_key?(stats, :total_packets)
assert Map.has_key?(stats, :grid_cells)
end
test "grid cells increase after registering viewport" do
bounds = %{north: 41.0, south: 40.0, east: -73.0, west: -74.0}
client_id = "test_stats_#{:rand.uniform(100_000)}"
before_stats = SpatialPubSub.get_stats()
{:ok, _topic} = SpatialPubSub.register_viewport(client_id, bounds)
after_stats = SpatialPubSub.get_stats()
assert after_stats.grid_cells >= before_stats.grid_cells
SpatialPubSub.unregister_client(client_id)
end
end
end