test: HistoricalLoader bounds-driven load paths via mock
This commit is contained in:
parent
51c17fb682
commit
965e177841
1 changed files with 103 additions and 1 deletions
|
|
@ -1,9 +1,17 @@
|
||||||
defmodule AprsmeWeb.MapLive.HistoricalLoaderTest do
|
defmodule AprsmeWeb.MapLive.HistoricalLoaderTest do
|
||||||
use ExUnit.Case, async: true
|
# Shares Mox stubs with other tests via the app-level :packets_module env.
|
||||||
|
# Mox.set_mox_from_context + allow() doesn't cleanly scope inside async tests
|
||||||
|
# without a Mox.Test start, so we pin to async: false.
|
||||||
|
use ExUnit.Case, async: false
|
||||||
|
|
||||||
|
import Mox
|
||||||
|
|
||||||
alias AprsmeWeb.MapLive.HistoricalLoader
|
alias AprsmeWeb.MapLive.HistoricalLoader
|
||||||
alias Phoenix.LiveView.Socket
|
alias Phoenix.LiveView.Socket
|
||||||
|
|
||||||
|
setup :verify_on_exit!
|
||||||
|
setup :set_mox_from_context
|
||||||
|
|
||||||
defp build_socket(assigns) do
|
defp build_socket(assigns) do
|
||||||
defaults = %{
|
defaults = %{
|
||||||
map_bounds: nil,
|
map_bounds: nil,
|
||||||
|
|
@ -117,4 +125,98 @@ defmodule AprsmeWeb.MapLive.HistoricalLoaderTest do
|
||||||
assert Process.cancel_timer(timer) == false
|
assert Process.cancel_timer(timer) == false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "load_historical_batch/3 with bounds and mocked packets" do
|
||||||
|
test "handles an empty result set by marking loading complete" do
|
||||||
|
# Mock returns no packets — exercises the empty-batch branch.
|
||||||
|
Mox.stub(Aprsme.PacketsMock, :get_recent_packets, fn _opts -> [] end)
|
||||||
|
|
||||||
|
socket =
|
||||||
|
build_socket(%{
|
||||||
|
map_bounds: %{north: 34.0, south: 32.0, east: -95.0, west: -97.0},
|
||||||
|
map_zoom: 10,
|
||||||
|
historical_loading: true,
|
||||||
|
loading_generation: 1
|
||||||
|
})
|
||||||
|
|
||||||
|
result = HistoricalLoader.load_historical_batch(socket, 0, nil)
|
||||||
|
|
||||||
|
# Loading should be marked complete and batch advanced.
|
||||||
|
refute result.assigns.historical_loading
|
||||||
|
assert result.assigns.loading_batch == 1
|
||||||
|
end
|
||||||
|
|
||||||
|
test "advances loading_batch when packets come back from the mock" do
|
||||||
|
# Return a single packet — exercises the process_loaded_packets branch.
|
||||||
|
Mox.stub(Aprsme.PacketsMock, :get_recent_packets, fn _opts ->
|
||||||
|
[
|
||||||
|
%{
|
||||||
|
id: "p-1",
|
||||||
|
sender: "HIST-1",
|
||||||
|
base_callsign: "HIST",
|
||||||
|
ssid: "1",
|
||||||
|
lat: 33.5,
|
||||||
|
lon: -96.5,
|
||||||
|
has_position: true,
|
||||||
|
symbol_table_id: "/",
|
||||||
|
symbol_code: ">",
|
||||||
|
received_at: DateTime.utc_now(),
|
||||||
|
path: ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
end)
|
||||||
|
|
||||||
|
socket =
|
||||||
|
build_socket(%{
|
||||||
|
map_bounds: %{north: 34.0, south: 32.0, east: -95.0, west: -97.0},
|
||||||
|
map_zoom: 10,
|
||||||
|
historical_loading: true,
|
||||||
|
loading_generation: 1
|
||||||
|
})
|
||||||
|
|
||||||
|
result = HistoricalLoader.load_historical_batch(socket, 0, nil)
|
||||||
|
|
||||||
|
# Either loading complete (under-full batch) or advanced a batch.
|
||||||
|
assert result.assigns.loading_batch >= 1
|
||||||
|
end
|
||||||
|
|
||||||
|
test "handles empty result with pending bounds set" do
|
||||||
|
Mox.stub(Aprsme.PacketsMock, :get_recent_packets, fn _opts -> [] end)
|
||||||
|
|
||||||
|
socket =
|
||||||
|
build_socket(%{
|
||||||
|
map_bounds: %{north: 34.0, south: 32.0, east: -95.0, west: -97.0},
|
||||||
|
map_zoom: 10,
|
||||||
|
pending_bounds: %{north: 1.0, south: 0.0, east: 1.0, west: 0.0},
|
||||||
|
historical_loading: true,
|
||||||
|
loading_generation: 1
|
||||||
|
})
|
||||||
|
|
||||||
|
result = HistoricalLoader.load_historical_batch(socket, 0, nil)
|
||||||
|
refute result.assigns.historical_loading
|
||||||
|
# process_pending_bounds is sent when loading completes with pending bounds.
|
||||||
|
assert_received {:process_pending_bounds}
|
||||||
|
refute result.assigns.historical_loading
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "start_progressive_historical_loading/1 with bounds" do
|
||||||
|
test "calls into load_historical_batch with map_zoom < 10" do
|
||||||
|
Mox.stub(Aprsme.PacketsMock, :get_recent_packets, fn _opts -> [] end)
|
||||||
|
|
||||||
|
socket =
|
||||||
|
build_socket(%{
|
||||||
|
map_bounds: %{north: 34.0, south: 32.0, east: -95.0, west: -97.0},
|
||||||
|
map_zoom: 5,
|
||||||
|
loading_generation: 0
|
||||||
|
})
|
||||||
|
|
||||||
|
result = HistoricalLoader.start_progressive_historical_loading(socket)
|
||||||
|
|
||||||
|
assert result.assigns.loading_generation == 1
|
||||||
|
# With empty mock results at low zoom, the first batch completes and
|
||||||
|
# historical_loading flips back to false.
|
||||||
|
refute result.assigns.historical_loading
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue