diff --git a/test/parser/position_test.exs b/test/parser/position_test.exs index 855ebcd..c54be43 100644 --- a/test/parser/position_test.exs +++ b/test/parser/position_test.exs @@ -20,6 +20,24 @@ defmodule Parser.PositionTest do assert result == nil or match?(%PositionStruct{latitude: nil, longitude: nil}, result) end end + + test "parses position with DAO extension in comment" do + result = Position.parse("4903.50N/07201.75W>Test!ABZ! position") + assert %PositionStruct{} = result + assert result.dao == %{lat_dao: "A", lon_dao: "B", datum: "WGS84"} + end + + test "parses ambiguous position (spaces in lat/lon)" do + result = Position.parse("49 3.50N/07201.7 W>Ambiguous") + assert %PositionStruct{} = result + assert result.position_ambiguity == 1 + end + + test "returns struct with nil lat/lon for structurally valid but invalid lat/lon" do + # Valid length but not matching regex + result = Position.parse("abcdefgh/ijklmnopq>Invalid") + assert %PositionStruct{latitude: nil, longitude: nil} = result + end end property "returns nil or struct with nil lat/lon for random invalid strings" do @@ -45,6 +63,17 @@ defmodule Parser.PositionTest do test "returns nils for invalid strings" do assert %{latitude: nil, longitude: nil} = Position.parse_aprs_position("bad", "data") end + + test "parses southern and eastern hemispheres" do + result = Position.parse_aprs_position("1234.56S", "04540.70E") + assert Decimal.compare(result.latitude, Decimal.new(0)) == :lt + assert Decimal.compare(result.longitude, Decimal.new(0)) == :gt + end + + test "returns nil for malformed but structurally valid input" do + result = Position.parse_aprs_position("12345678", "123456789") + assert %{latitude: nil, longitude: nil} = result + end end describe "calculate_position_ambiguity/2" do diff --git a/test/support/mock_helpers.ex b/test/support/mock_helpers.ex index 25afc61..6efe0d9 100644 --- a/test/support/mock_helpers.ex +++ b/test/support/mock_helpers.ex @@ -3,14 +3,7 @@ defmodule Aprs.MockHelpers do Provides mocks and stubs for tests. """ - alias Aprs.BadPacket - def stub_packets_mock do - # Only define the mock if it doesn't already exist - if !Code.ensure_loaded?(PacketsMock) do - Mox.defmock(PacketsMock, for: Aprs.PacketsBehaviour) - end - Mox.stub(PacketsMock, :get_historical_packet_count, fn _opts -> 0 end) Mox.stub(PacketsMock, :stream_packets_for_replay, fn _opts -> [] end) Mox.stub(PacketsMock, :get_packets_for_replay, fn _opts -> [] end) @@ -20,10 +13,6 @@ defmodule Aprs.MockHelpers do end def stub_badpackets_mock do - if !Code.ensure_loaded?(BadPacketsMock) do - Mox.defmock(BadPacketsMock, for: BadPacket) - end - Mox.stub_with(BadPacketsMock, BadPacketsStub) end end diff --git a/test/test_helper.exs b/test/test_helper.exs index dfe59c1..6e7c17c 100644 --- a/test/test_helper.exs +++ b/test/test_helper.exs @@ -4,6 +4,7 @@ Ecto.Adapters.SQL.Sandbox.mode(Aprs.Repo, :manual) # Configure Mox Mox.defmock(Aprs.PacketsMock, for: Aprs.PacketsBehaviour) Mox.defmock(Aprs.PacketReplayMock, for: Aprs.PacketReplayBehaviour) +Mox.defmock(PacketsMock, for: Aprs.PacketsBehaviour) # Ensure no external APRS connections during tests Application.put_env(:aprs, :disable_aprs_connection, true)