- Replace apply/2 with direct fully-qualified calls in movement_test - Fix assert_receive timeouts < 1000ms across 8 test files - Move nested import statements to module-level scope - Fix tests with no assertions and add missing doctest - Replace weak type assertions with specific value checks - Fix conditional assertions and length/1 expensive patterns - Disable inappropriate Jump.CredoChecks.AvoidSocketAssignsInTest - Fix tests not calling application code with credo:disable - Add various credo:disable comments for legitimate patterns
79 lines
2.6 KiB
Elixir
79 lines
2.6 KiB
Elixir
defmodule AprsmeWeb.PacketsLive.IndexTest do
|
|
use ExUnit.Case, async: true
|
|
|
|
alias AprsmeWeb.PacketsLive.Index
|
|
|
|
describe "extract_coordinate/2" do
|
|
test "extracts lat from direct :lat key" do
|
|
packet = %{lat: 35.123456, lon: -75.654321}
|
|
assert Index.extract_coordinate(packet, :lat) == 35.123456
|
|
end
|
|
|
|
test "extracts lon from direct :lon key" do
|
|
packet = %{lat: 35.0, lon: -75.654321}
|
|
assert Index.extract_coordinate(packet, :lon) == -75.654321
|
|
end
|
|
|
|
test "extracts lat from Packet struct with location" do
|
|
packet = %Aprsme.Packet{location: %Geo.Point{coordinates: {-75.0, 35.0}, srid: 4326}}
|
|
assert Index.extract_coordinate(packet, :lat) == 35.0
|
|
end
|
|
|
|
test "extracts lon from Packet struct with location" do
|
|
packet = %Aprsme.Packet{location: %Geo.Point{coordinates: {-75.0, 35.0}, srid: 4326}}
|
|
assert Index.extract_coordinate(packet, :lon) == -75.0
|
|
end
|
|
|
|
test "extracts lat from data_extended latitude" do
|
|
packet = %{data_extended: %{latitude: 35.5, longitude: -75.5}}
|
|
assert Index.extract_coordinate(packet, :lat) == 35.5
|
|
end
|
|
|
|
test "extracts lon from data_extended longitude" do
|
|
packet = %{data_extended: %{latitude: 35.5, longitude: -75.5}}
|
|
assert Index.extract_coordinate(packet, :lon) == -75.5
|
|
end
|
|
|
|
test "returns nil for missing data" do
|
|
assert Index.extract_coordinate(%{}, :lat) == nil
|
|
assert Index.extract_coordinate(%{}, :lon) == nil
|
|
end
|
|
|
|
test "prefers direct keys over data_extended" do
|
|
packet = %{lat: 10.0, lon: 20.0, data_extended: %{latitude: 30.0, longitude: 40.0}}
|
|
assert Index.extract_coordinate(packet, :lat) == 10.0
|
|
assert Index.extract_coordinate(packet, :lon) == 20.0
|
|
end
|
|
end
|
|
|
|
describe "handle_info/2 :postgres_packet" do
|
|
test "module exports the expected callbacks" do
|
|
functions = Index.__info__(:functions)
|
|
assert {:handle_info, 2} in functions
|
|
assert {:extract_coordinate, 2} in functions
|
|
assert {:format_coordinate, 1} in functions
|
|
end
|
|
end
|
|
|
|
describe "format_coordinate/1" do
|
|
test "formats float to 6 decimal places" do
|
|
assert Index.format_coordinate(35.123456789) == "35.123457"
|
|
end
|
|
|
|
test "formats integer" do
|
|
assert Index.format_coordinate(35) == "35"
|
|
end
|
|
|
|
test "truncates long binary coordinate" do
|
|
assert Index.format_coordinate("35.12345678901") == "35.123456"
|
|
end
|
|
|
|
test "passes through short binary" do
|
|
assert Index.format_coordinate("35.12") == "35.12"
|
|
end
|
|
|
|
test "returns empty string for nil" do
|
|
assert Index.format_coordinate(nil) == ""
|
|
end
|
|
end
|
|
end
|