diff --git a/test/aprsme/packets_test.exs b/test/aprsme/packets_test.exs index f8c454b..e33e654 100644 --- a/test/aprsme/packets_test.exs +++ b/test/aprsme/packets_test.exs @@ -166,6 +166,77 @@ defmodule Aprsme.PacketsTest do end end + describe "store_packet/1 with additional edge cases" do + test "stores a packet with string-keyed data_extended" do + packet_data = %{ + sender: "STRKEY1", + base_callsign: "STRKEY1", + ssid: "0", + destination: "APRS", + raw_packet: "STRKEY1>APRS", + data_type: "position", + data_extended: %{ + "latitude" => 33.0, + "longitude" => -96.0, + "symbol_table_id" => "/", + "symbol_code" => ">" + } + } + + assert {:ok, packet} = Packets.store_packet(packet_data) + assert packet.sender == "STRKEY1" + end + + test "stores a packet with nested position map inside data_extended" do + packet_data = %{ + sender: "NESTPOS1", + base_callsign: "NESTPOS1", + ssid: "0", + destination: "APRS", + raw_packet: "NESTPOS1>APRS", + data_type: "position", + data_extended: %{ + position: %{latitude: 33.0, longitude: -96.0} + } + } + + assert {:ok, packet} = Packets.store_packet(packet_data) + assert packet.sender == "NESTPOS1" + end + + test "device_identifier is set from destination fallback when DeviceParser returns nil" do + packet_data = %{ + sender: "DEVFALL1", + base_callsign: "DEVFALL1", + ssid: "0", + destination: "APUNKNOWN", + raw_packet: "DEVFALL1>APUNKNOWN:=3950.00N/09830.00W>", + data_type: "position", + lat: 39.83, + lon: -98.5 + } + + assert {:ok, packet} = Packets.store_packet(packet_data) + assert is_binary(packet.device_identifier) + end + + test "handles a binary lat/lon that can be parsed" do + packet_data = %{ + sender: "BINCOORD1", + base_callsign: "BINCOORD1", + ssid: "0", + destination: "APRS", + raw_packet: "BINCOORD1>APRS", + data_type: "position", + lat: "39.833", + lon: "-98.5" + } + + assert {:ok, packet} = Packets.store_packet(packet_data) + assert packet.sender == "BINCOORD1" + end + end + describe "store_bad_packet/2" do test "stores bad packet from string" do error = %{message: "Parse error", type: "ParseError"}