towerops/test/towerops_web
Graham McIntire 0e2cc6b7ce chore(coverage,types): clean dialyzer + new tests + ETH canopy provider
Dialyzer:
* Add Lidar.Tile @type, narrow several @specs to match success-typing,
  prefix discarded function returns with `_ =`, fix the broken
  File.stream! call in the ms-buildings worker (it was causing dialyzer
  to mark every private fun unreachable), broaden Antenna.spec key
  types from `float()` to `number()` to match catalog int literals.
* Add :geo, :geo_postgis, :db_connection to plt_add_apps so the dep
  PLT actually contains the modules we use.
* Result: 0 unsuppressed dialyzer warnings (was 50+ in project code).

Tree canopy:
* Replace the dead landfire.gov URL with the ETH Zurich Global
  Canopy Height 10 m product. ETH publishes proper COGs with
  overviews on libdrive.ethz.ch — confirmed working with
  /vsicurl/ byte-range reads. The module now picks the 3°×3° tile
  containing the bbox centroid, with both a `:metres` decoder
  (ETH Byte raster, NoData=255) and a `:landfire_evh` decoder for
  operators self-hosting LANDFIRE EVH COGs.
* Re-enable canopy by default now that there's a working source.

Tests (+105 tests, 0 failures):
* CoverageLive Index/Show/Form/Map — empty/loaded/auth states,
  LiveView event handlers, formatters.
* Coverages.Building changeset + helpers.
* Coverages.TreeCanopy provider tile-URL builder and decoders.
* Workers.MsBuildingsImportWorker (full import flow incl. blank
  lines, MultiPolygon, idempotency, hash fallback) — also fixed
  the partial-index ON CONFLICT bug that prevented imports from
  ever working: the unique index has WHERE ms_footprint_id IS
  NOT NULL, so the worker now uses an :unsafe_fragment conflict
  target that includes the predicate.
* GraphQLDocsController smoke test (was 0%).

Coverage rose from 73.19% → 74% with the major project modules I
touched all moved from 0% / <50% to >75%.
2026-05-07 09:11:17 -05:00
..
channels fix: increase timeout in flaky debounce test (#210) 2026-03-28 15:57:19 -05:00
components tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
controllers chore(coverage,types): clean dialyzer + new tests + ETH canopy provider 2026-05-07 09:11:17 -05:00
graphql ci: enable PostGIS in test workflows + add tests covering ~3pp more 2026-05-05 10:35:22 -05:00
helpers feat: add 12/24-hour time format setting with consistent timezone display 2026-02-13 15:16:29 -06:00
integration Merge remote-tracking branch 'origin/main' into feature/preseem-integration 2026-02-13 09:11:45 -06:00
live chore(coverage,types): clean dialyzer + new tests + ETH canopy provider 2026-05-07 09:11:17 -05:00
plugs fix: allow Plausible analytics domain in CSP 2026-04-29 14:24:04 -05:00
changelog_parser_test.exs remove-gleam (#218) 2026-03-29 11:03:20 -05:00
graphql_socket_test.exs add mobile token auth to GraphQL endpoint (#48) 2026-03-16 15:23:07 -05:00
permissions_test.exs fix snmp v3 test 2026-02-06 10:21:54 -06:00
plug_exceptions_test.exs handle exceptions gracefully on api endpoints 2026-02-04 12:18:14 -06:00
remote_ip_test.exs dialyzer: replace suppressions with real fixes where possible 2026-04-21 11:01:30 -05:00
telemetry_filter_test.exs Add GeoIP import HTTP tests 2026-03-10 16:02:49 -05:00
telemetry_test.exs tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
user_auth_test.exs perf(tests): remove/reduce Process.sleep calls for faster tests 2026-03-06 07:57:30 -06:00