prop/test/microwaveprop/buildings/loader_test.exs
Graham McIntire fd976b0cd5
fix: resolve 391 Credo issues across codebase
- Add jump_credo_checks ~> 0.4 with all 20 checks enabled
- Fix all standard Credo issues: 139 @spec (113 done, 26 remain),
  4 refactoring, 3 alias usage, 9 System.cmd env, 5 unsafe_to_atom,
  2 max line length, 9 assert_receive timeout
- Fix 170+ jump_credo_checks warnings:
  - 117 TopLevelAliasImportRequire: move nested alias/import to module top
  - 32 UseObanProWorker: switch to Oban.Pro.Worker
  - 4 DoctestIExExamples: add doctests / create test file
  - ~20 WeakAssertion: strengthen type-check assertions
  - Various ConditionalAssertion, AssertReceiveTimeout fixes
- Exclude vendor/ from Credo analysis
- Remaining: 175 warnings (mostly opinionated WeakAssertion,
  AvoidSocketAssignsInTest), 26 @spec annotations
2026-06-12 13:51:32 -05:00

65 lines
2 KiB
Elixir

defmodule Microwaveprop.Buildings.LoaderTest do
use ExUnit.Case, async: false
alias Microwaveprop.Buildings.Index
alias Microwaveprop.Buildings.Loader
setup do
Index.clear()
tmp = Path.join(System.tmp_dir!(), "buildings_cache_#{System.unique_integer([:positive])}")
prev = Application.get_env(:microwaveprop, :buildings_cache_dir)
Application.put_env(:microwaveprop, :buildings_cache_dir, tmp)
on_exit(fn ->
File.rm_rf(tmp)
if prev,
do: Application.put_env(:microwaveprop, :buildings_cache_dir, prev),
else: Application.delete_env(:microwaveprop, :buildings_cache_dir)
end)
:ok
end
describe "ensure_loaded/1" do
test "skips loading when quadkey is already loaded" do
Index.mark_loaded("023112330")
assert Loader.ensure_loaded("023112330") == :ok
end
test "marks quadkey as loaded when tile file doesn't exist" do
assert Loader.ensure_loaded("nonexistent_quadkey") == :ok
assert Index.loaded?("nonexistent_quadkey")
end
test "loads records from a real tile file" do
quadkey = "023112330"
cache_dir = Application.get_env(:microwaveprop, :buildings_cache_dir)
File.mkdir_p!(cache_dir)
geojsonl =
then(
~s|{"type": "Feature", "properties": {"height": 5.5}, "geometry": {"type": "Polygon", "coordinates": [[[-97.736, 32.221], [-97.736, 32.222], [-97.735, 32.222], [-97.735, 32.221], [-97.736, 32.221]]]}}|,
&:zlib.gzip/1
)
File.write!(Path.join(cache_dir, "#{quadkey}.csv.gz"), geojsonl)
assert Loader.ensure_loaded(quadkey) == :ok
assert Index.loaded?(quadkey)
assert Index.max_height_near(32.2215, -97.7355, 100) == 5.5
end
end
describe "ensure_loaded_for_bbox/1" do
test "returns list of quadkeys for the bbox" do
bbox = %{"south" => 32.5, "north" => 33.0, "west" => -97.5, "east" => -96.5}
keys = Loader.ensure_loaded_for_bbox(bbox)
assert length(keys) > 0
assert keys != []
assert Enum.all?(keys, &is_binary/1)
end
end
end