Add coverage tests for partition manager, map live message handlers, display manager, weather/device id paths
Bumps total coverage to 88.11%.
This commit is contained in:
parent
f9cfbf630e
commit
57077e2bb1
3 changed files with 121 additions and 0 deletions
|
|
@ -187,4 +187,33 @@ defmodule Aprsme.PartitionManagerTest do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "drop_old_partitions/1 default retention" do
|
||||
test "dropping with the default 7-day retention is a no-op when no partitions are old" do
|
||||
# Ensure today's partition exists.
|
||||
{:ok, _} = PartitionManager.ensure_partitions_exist()
|
||||
# Calling without args uses the default retention_days = 7.
|
||||
assert {:ok, dropped} = PartitionManager.drop_old_partitions()
|
||||
today_name = PartitionManager.partition_name(Date.utc_today())
|
||||
refute today_name in dropped
|
||||
end
|
||||
end
|
||||
|
||||
describe "manage_partitions/0 via :manage_partitions handler with non-trivial work" do
|
||||
test "logs created+dropped partitions via the success branches" do
|
||||
# Pre-create a partition far in the past so manage_partitions has
|
||||
# something to drop.
|
||||
old_date = Date.add(Date.utc_today(), -30)
|
||||
old_name = PartitionManager.partition_name(old_date)
|
||||
{from_dt, to_dt} = PartitionManager.partition_range(old_date)
|
||||
|
||||
Repo.query!(
|
||||
"CREATE TABLE IF NOT EXISTS #{old_name} PARTITION OF packets FOR VALUES FROM ('#{DateTime.to_iso8601(from_dt)}') TO ('#{DateTime.to_iso8601(to_dt)}')"
|
||||
)
|
||||
|
||||
assert {:noreply, %{}} = PartitionManager.handle_info(:manage_partitions, %{})
|
||||
|
||||
refute old_name in PartitionManager.list_partitions()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -267,4 +267,35 @@ defmodule AprsmeWeb.MapLive.DisplayManagerTest do
|
|||
assert push_events == []
|
||||
end
|
||||
end
|
||||
|
||||
describe "add_markers_if_any/2 and remove_markers_batch/2" do
|
||||
test "add_markers_if_any with [] returns socket unchanged", %{socket: socket} do
|
||||
assert ^socket = DisplayManager.add_markers_if_any(socket, [])
|
||||
end
|
||||
|
||||
test "add_markers_if_any with markers pushes the add_markers event", %{socket: socket} do
|
||||
markers = [%{"id" => "m1"}, %{"id" => "m2"}]
|
||||
result_socket = DisplayManager.add_markers_if_any(socket, markers)
|
||||
push_events = get_in(result_socket.private, [:live_temp, :push_events]) || []
|
||||
assert [["add_markers", %{markers: ^markers}]] = push_events
|
||||
end
|
||||
|
||||
test "remove_markers_batch with [] returns socket unchanged", %{socket: socket} do
|
||||
assert ^socket = DisplayManager.remove_markers_batch(socket, [])
|
||||
end
|
||||
|
||||
test "remove_markers_batch with ids pushes the remove_markers_batch event", %{socket: socket} do
|
||||
ids = ["m1", "m2", "m3"]
|
||||
result_socket = DisplayManager.remove_markers_batch(socket, ids)
|
||||
push_events = get_in(result_socket.private, [:live_temp, :push_events]) || []
|
||||
assert [["remove_markers_batch", %{ids: ^ids}]] = push_events
|
||||
end
|
||||
end
|
||||
|
||||
describe "send_heat_map_data/2 routes through send_heat_map_for_packets" do
|
||||
test "calls send_heat_map_for_packets with the values of the packet map", %{socket: socket} do
|
||||
socket = Map.put(socket, :assigns, %{socket.assigns | map_zoom: 5})
|
||||
_ = DisplayManager.send_heat_map_data(socket, %{"a" => %{lat: 33.0, lon: -96.0}, "b" => %{lat: 34.0, lon: -97.0}})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -420,6 +420,67 @@ defmodule AprsmeWeb.MapLive.IndexTest do
|
|||
send(view.pid, {:historical_loading_timeout, -999})
|
||||
assert render(view) =~ "aprs-map"
|
||||
end
|
||||
|
||||
test "postgres_packet for tracked callsign exercises preferred_tracked_packet flow", %{conn: conn} do
|
||||
# Mount with a tracked callsign so the tracked-callsign branch of
|
||||
# handle_info(:postgres_packet) runs (preferred_tracked_packet/newer_packet?).
|
||||
{:ok, view, _html} = live(conn, "/?call=TR-1", on_error: :warn)
|
||||
|
||||
now = DateTime.utc_now()
|
||||
|
||||
first = %{
|
||||
id: "tr-1-old",
|
||||
sender: "TR-1",
|
||||
base_callsign: "TR",
|
||||
ssid: "1",
|
||||
lat: 35.0,
|
||||
lon: -90.0,
|
||||
symbol_table_id: "/",
|
||||
symbol_code: ">",
|
||||
comment: "first",
|
||||
received_at: DateTime.add(now, -120, :second),
|
||||
path: ""
|
||||
}
|
||||
|
||||
second = %{
|
||||
id: "tr-1-new",
|
||||
sender: "TR-1",
|
||||
base_callsign: "TR",
|
||||
ssid: "1",
|
||||
lat: 35.1,
|
||||
lon: -90.1,
|
||||
symbol_table_id: "/",
|
||||
symbol_code: ">",
|
||||
comment: "second",
|
||||
received_at: now,
|
||||
path: ""
|
||||
}
|
||||
|
||||
send(view.pid, {:postgres_packet, first})
|
||||
send(view.pid, {:postgres_packet, second})
|
||||
assert render(view) =~ "aprs-map"
|
||||
end
|
||||
|
||||
test "postgres_packet without coordinates exercises preferred_tracked_packet no-position fallback", %{conn: conn} do
|
||||
{:ok, view, _html} = live(conn, "/?call=NPOS-9", on_error: :warn)
|
||||
|
||||
no_pos = %{
|
||||
id: "npos-1",
|
||||
sender: "NPOS-9",
|
||||
base_callsign: "NPOS",
|
||||
ssid: "9",
|
||||
lat: nil,
|
||||
lon: nil,
|
||||
symbol_table_id: "/",
|
||||
symbol_code: ">",
|
||||
comment: "no position",
|
||||
received_at: DateTime.utc_now(),
|
||||
path: ""
|
||||
}
|
||||
|
||||
send(view.pid, {:postgres_packet, no_pos})
|
||||
assert render(view) =~ "aprs-map"
|
||||
end
|
||||
end
|
||||
|
||||
describe "MapLive.Index with URL params" do
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue