127 lines
3.6 KiB
Elixir
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
|