- Fix leader election guard test for :undefined pid - Fix cpu_sup.util() pattern matching to handle numeric return - Fix encoding_utils to always return explicit nil when needed - Remove unused finite_float? function - Fix signal handler to match :ok return from :os.set_signal/2 - Remove redundant catch-all pattern in database metrics - Fix Gridsquare pattern matching in info_live template - Remove unnecessary nil check for calculate_course result - Fix get_packet_received_at to not check for nil (always returns DateTime) - Remove redundant catch-all pattern in weather format_weather_value - Fix query builder to use from(p in Packet) instead of bare Packet atom Reduced dialyzer errors from 49 to 6. Remaining warnings are mostly false positives from template compilation and overloaded function specs. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
105 lines
3.5 KiB
Elixir
105 lines
3.5 KiB
Elixir
defmodule AprsmeWeb.MapLive.OverlayRenderingTest do
|
|
use ExUnit.Case, async: true
|
|
|
|
alias AprsmeWeb.MapLive.PacketUtils
|
|
|
|
describe "overlay symbol rendering in map" do
|
|
test "W5MRC-15 with D& symbol generates correct HTML" do
|
|
# Create a test packet with overlay symbol D&
|
|
packet = %{
|
|
id: 1,
|
|
sender: "W5MRC-15",
|
|
base_callsign: "W5MRC",
|
|
ssid: "15",
|
|
symbol_table_id: "D",
|
|
symbol_code: "&",
|
|
lat: 30.0,
|
|
lon: -95.0,
|
|
comment: "Test station",
|
|
received_at: DateTime.utc_now(),
|
|
data_type: "position"
|
|
}
|
|
|
|
# Process the packet through PacketUtils
|
|
result = PacketUtils.build_packet_data(packet, true, "en-US")
|
|
|
|
# Check that symbol_html was generated
|
|
assert Map.has_key?(result, "symbol_html")
|
|
symbol_html = result["symbol_html"]
|
|
|
|
# Verify the overlay symbol is rendered correctly with overlay character on top
|
|
# The overlay character (D) from table 2, base symbol (&) from table 1
|
|
assert symbol_html =~
|
|
"background-image: url(/aprs-symbols/aprs-symbols-128-2@2x.png), url(/aprs-symbols/aprs-symbols-128-1@2x.png)"
|
|
|
|
# Verify the positions (overlay character D first at -96.0px -64.0px, then base & at -160.0px 0.0px)
|
|
assert symbol_html =~ "background-position: -96.0px -64.0px, -160.0px 0.0px"
|
|
|
|
# Verify callsign is included
|
|
assert symbol_html =~ "W5MRC-15"
|
|
end
|
|
|
|
test "N# green star overlay symbol generates correct HTML" do
|
|
# Create a test packet with overlay symbol N#
|
|
packet = %{
|
|
id: 2,
|
|
sender: "TEST-1",
|
|
base_callsign: "TEST",
|
|
ssid: "1",
|
|
symbol_table_id: "N",
|
|
symbol_code: "#",
|
|
lat: 35.0,
|
|
lon: -100.0,
|
|
comment: "Green star test",
|
|
received_at: DateTime.utc_now(),
|
|
data_type: "position"
|
|
}
|
|
|
|
# Process the packet
|
|
result = PacketUtils.build_packet_data(packet, true, "en-US")
|
|
symbol_html = result["symbol_html"]
|
|
|
|
# Verify the overlay uses different sprite tables
|
|
# Overlay character N from table 2, base # from table 1
|
|
assert symbol_html =~
|
|
"background-image: url(/aprs-symbols/aprs-symbols-128-2@2x.png), url(/aprs-symbols/aprs-symbols-128-1@2x.png)"
|
|
|
|
# Verify the positions (overlay N first, then base #)
|
|
assert symbol_html =~ "background-position: -416.0px -64.0px, -64.0px 0.0px"
|
|
|
|
# Verify callsign
|
|
assert symbol_html =~ "TEST-1"
|
|
end
|
|
|
|
test "normal symbol /_ generates correct HTML without overlay" do
|
|
# Create a test packet with normal symbol /_
|
|
packet = %{
|
|
id: 3,
|
|
sender: "WEATHER-1",
|
|
base_callsign: "WEATHER",
|
|
ssid: "1",
|
|
symbol_table_id: "/",
|
|
symbol_code: "_",
|
|
lat: 40.0,
|
|
lon: -105.0,
|
|
comment: "Weather station",
|
|
received_at: DateTime.utc_now(),
|
|
data_type: "weather"
|
|
}
|
|
|
|
# Process the packet
|
|
result = PacketUtils.build_packet_data(packet, true, "en-US")
|
|
symbol_html = result["symbol_html"]
|
|
|
|
# Verify it's a single background image (no overlay)
|
|
assert symbol_html =~ "background-image: url(/aprs-symbols/aprs-symbols-128-0@2x.png)"
|
|
refute symbol_html =~ "background-image: url(/aprs-symbols/aprs-symbols-128-0@2x.png), url"
|
|
|
|
# Verify the position for _ symbol
|
|
assert symbol_html =~ "background-position: -448.0px -96.0px"
|
|
|
|
# Verify callsign
|
|
assert symbol_html =~ "WEATHER-1"
|
|
end
|
|
end
|
|
end
|