aprs.me/test/aprsme/enhanced_parser_test.exs
Graham McIntire 81a4b7b815
Fix credo issues
- Remove trailing whitespace from comments
- Fix long line in packet_processor.ex
- Rename is_leader? to leader? following Elixir conventions
2026-02-09 11:17:56 -06:00

181 lines
5.1 KiB
Elixir

defmodule Aprsme.EnhancedParserTest do
use Aprsme.DataCase, async: true
alias Aprsme.Packet
describe "enhanced parser field extraction" do
test "extracts standard parser compatibility fields" do
attrs = %{
srccallsign: "W1AW",
dstcallsign: "APRS",
body: "!1234.56N/12345.67W-Test",
origpacket: "W1AW>APRS:!1234.56N/12345.67W-Test",
header: "W1AW>APRS",
alive: 1,
posambiguity: 0,
symboltable: "/",
symbolcode: "-",
messaging: 0,
sender: "W1AW",
base_callsign: "W1AW",
ssid: "0",
destination: "APRS",
data_type: "position",
received_at: DateTime.utc_now()
}
result = Packet.extract_additional_data(attrs, "W1AW>APRS:!1234.56N/12345.67W-Test")
assert result[:srccallsign] == "W1AW"
assert result[:dstcallsign] == "APRS"
assert result[:body] == "!1234.56N/12345.67W-Test"
assert result[:origpacket] == "W1AW>APRS:!1234.56N/12345.67W-Test"
assert result[:header] == "W1AW>APRS"
assert result[:alive] == 1
assert result[:posambiguity] == 0
assert result[:symboltable] == "/"
assert result[:symbolcode] == "-"
assert result[:messaging] == 0
end
test "extracts radio range field" do
attrs = %{
radiorange: "0050",
sender: "W1AW",
base_callsign: "W1AW",
ssid: "0",
destination: "APRS",
data_type: "position",
received_at: DateTime.utc_now()
}
result = Packet.extract_additional_data(attrs)
assert result[:radiorange] == "0050"
end
test "handles weather data from wx field" do
attrs = %{
sender: "WX1STN",
base_callsign: "WX1STN",
ssid: "0",
destination: "APRS",
data_type: "weather",
received_at: DateTime.utc_now(),
data_extended: %{
wx: %{
temperature: 72.5,
humidity: 65,
pressure: 1013.2,
wind_speed: 12.5,
wind_direction: 180
}
}
}
result = Packet.extract_additional_data(attrs)
assert result[:temperature] == 72.5
assert result[:humidity] == 65
assert result[:pressure] == 1013.2
assert result[:wind_speed] == 12.5
assert result[:wind_direction] == 180
end
test "handles PHG data in string format" do
attrs = %{
sender: "W1AW",
base_callsign: "W1AW",
ssid: "0",
destination: "APRS",
data_type: "position",
received_at: DateTime.utc_now(),
data_extended: %{
phg: "5430"
}
}
result = Packet.extract_additional_data(attrs)
# PHG 5430: power=5^2=25W, height=4->160ft, gain=3dB, dir=0->omni
assert result[:phg_power] == 25
assert result[:phg_height] == 160
assert result[:phg_gain] == 3
assert result[:phg_directivity] == 0
end
test "handles PHG data in legacy map format" do
attrs = %{
sender: "W1AW",
base_callsign: "W1AW",
ssid: "0",
destination: "APRS",
data_type: "position",
received_at: DateTime.utc_now(),
data_extended: %{
phg: %{
power: 25,
height: 160,
gain: 3,
directivity: 0
}
}
}
result = Packet.extract_additional_data(attrs)
assert result[:phg_power] == 25
assert result[:phg_height] == 160
assert result[:phg_gain] == 3
assert result[:phg_directivity] == 0
end
end
describe "enhanced parser packet storage" do
test "stores packet with enhanced parser fields" do
attrs = %{
sender: "W1AW-1",
base_callsign: "W1AW",
ssid: "1",
destination: "APRS",
data_type: "position",
received_at: DateTime.utc_now(),
raw_packet: "W1AW-1>APRS:!1234.56N/12345.67W-Test RNG0050",
lat: 12.576,
lon: -123.761,
symbol_code: "-",
symbol_table_id: "/",
comment: "Test station",
# Enhanced parser fields
srccallsign: "W1AW-1",
dstcallsign: "APRS",
body: "!1234.56N/12345.67W-Test RNG0050",
origpacket: "W1AW-1>APRS:!1234.56N/12345.67W-Test RNG0050",
header: "W1AW-1>APRS",
alive: 1,
posambiguity: 0,
symboltable: "/",
symbolcode: "-",
messaging: 0,
radiorange: "0050"
}
processed_attrs = Packet.extract_additional_data(attrs)
assert {:ok, packet} = Aprsme.Packets.store_packet(processed_attrs)
# Verify enhanced fields are stored
assert packet.srccallsign == "W1AW-1"
assert packet.dstcallsign == "APRS"
assert packet.body == "!1234.56N/12345.67W-Test RNG0050"
assert packet.origpacket == "W1AW-1>APRS:!1234.56N/12345.67W-Test RNG0050"
assert packet.header == "W1AW-1>APRS"
assert packet.alive == 1
assert packet.posambiguity == 0
assert packet.symboltable == "/"
assert packet.symbolcode == "-"
assert packet.messaging == 0
assert packet.radiorange == "0050"
end
end
end