aprs.me/test/aprsme_web/live/map_live/map_helpers_test.exs

127 lines
3.6 KiB
Elixir

defmodule AprsmeWeb.MapLive.MapHelpersTest do
use ExUnit.Case, async: true
alias Aprs.Types.MicE
alias AprsmeWeb.MapLive.MapHelpers
describe "get_coordinates/1" do
test "returns lat/lon/data_extended for map with lat/lon" do
packet = %{lat: 10.0, lon: 20.0, data_extended: %{foo: :bar}}
assert MapHelpers.get_coordinates(packet) == {10.0, 20.0, %{foo: :bar}}
end
test "returns lat/lon/data_extended for map with latitude/longitude in data_extended" do
packet = %{data_extended: %{latitude: 11.1, longitude: 22.2}}
assert MapHelpers.get_coordinates(packet) ==
{11.1, 22.2, %{latitude: 11.1, longitude: 22.2}}
end
test "returns lat/lon/mic_e for MicE struct" do
mic_e = %MicE{
lat_degrees: 12,
lat_minutes: 34,
lat_fractional: 0,
lat_direction: :north,
lon_degrees: 56,
lon_minutes: 78,
lon_fractional: 0,
lon_direction: :east
}
packet = %{data_extended: mic_e}
{lat, lon, ext} = MapHelpers.get_coordinates(packet)
assert is_number(lat) and is_number(lon)
assert ext == mic_e
end
test "returns {nil, nil, nil} for missing data" do
assert MapHelpers.get_coordinates(%{}) == {nil, nil, nil}
end
end
describe "get_coordinates_from_mic_e/1" do
test "returns correct lat/lon for valid MicE" do
mic_e = %MicE{
lat_degrees: 10,
lat_minutes: 30,
lat_fractional: 0,
lat_direction: :north,
lon_degrees: 20,
lon_minutes: 40,
lon_fractional: 0,
lon_direction: :east
}
{lat, lon} = MapHelpers.get_coordinates_from_mic_e(mic_e)
assert_in_delta lat, 10.5, 0.0001
assert_in_delta lon, 20.6667, 0.0001
end
test "returns {nil, nil} for out-of-bounds" do
mic_e = %MicE{
lat_degrees: 100,
lat_minutes: 0,
lat_fractional: 0,
lat_direction: :north,
lon_degrees: 200,
lon_minutes: 0,
lon_fractional: 0,
lon_direction: :east
}
assert MapHelpers.get_coordinates_from_mic_e(mic_e) == {nil, nil}
end
end
describe "has_position_data?/1" do
test "true for MicE in data_extended" do
mic_e = %MicE{
lat_degrees: 1,
lat_minutes: 1,
lat_fractional: 0,
lat_direction: :north,
lon_degrees: 1,
lon_minutes: 1,
lon_fractional: 0,
lon_direction: :east
}
assert MapHelpers.has_position_data?(%{data_extended: mic_e})
end
test "true for latitude/longitude in data_extended" do
assert MapHelpers.has_position_data?(%{data_extended: %{latitude: 1, longitude: 2}})
end
test "true for lat/lon at top level" do
assert MapHelpers.has_position_data?(%{lat: 1, lon: 2})
end
test "false for missing position" do
refute MapHelpers.has_position_data?(%{})
end
end
describe "within_bounds?/2" do
test "true for point in bounds" do
bounds = %{north: 10, south: 0, east: 10, west: 0}
assert MapHelpers.within_bounds?(%{lat: 5, lon: 5}, bounds)
end
test "false for point out of bounds" do
bounds = %{north: 10, south: 0, east: 10, west: 0}
refute MapHelpers.within_bounds?(%{lat: 15, lon: 5}, bounds)
end
test "true for tuple input" do
bounds = %{north: 10, south: 0, east: 10, west: 0}
assert MapHelpers.within_bounds?({5, 5}, bounds)
end
test "false for nil input" do
bounds = %{north: 10, south: 0, east: 10, west: 0}
refute MapHelpers.within_bounds?(%{}, bounds)
end
end
end