prop/config/test.exs
Graham McIntire 1086f52c85
chore: delete dead RTMA + METAR5 code paths
Both RTMA and METAR5 schemas + clients + workers were defined but
never had a consumer. `find_nearest_rtma/3` and `recent_surface_obs/3`
existed in `Microwaveprop.Weather` with zero callers cluster-wide;
RtmaFetchWorker had test coverage but was never enqueued anywhere;
no IEM 5-min ASOS fetcher was ever written. The tables sat empty in
prod and the recalibrate audit was permanently flagging them BROKEN
even though the empty state was the steady state.

Drop the lot — schemas, clients, workers, queue config, Req.Test
stubs, audit checks, and the per-table unique tests in the
observation-changesets suite. New migration drops the now-unreferenced
`rtma_observations` and `metar_5min_observations` tables (both 0
rows in prod). Trim the `:rtma` slot out of `backfill_only_queues`
in runtime.exs so Oban Pro's Smart engine stops trying to manage a
queue with no producer.

Audit thresholds reset on the surviving NARR check: drop the
"WARN < 5000 absolute rows" rule that didn't account for
NarrFetchWorker's 0.13° spatial dedup, and point remediation at
the existing BackfillEnqueueWorker cron instead of the dev-only
`mix narr.backfill` task.

scripts/recalibrate_algo.py: ROW_COUNT_SOURCES + DATA_GAP_SQL +
DATA_GAP_RULES all stop referencing the dropped tables.
2026-05-04 15:09:19 -05:00

131 lines
5.7 KiB
Elixir

import Config
alias Ecto.Adapters.SQL.Sandbox
alias Microwaveprop.Qrz.Client
# Only in tests, remove the complexity from the password hashing algorithm
config :bcrypt_elixir, :log_rounds, 1
# Print only warnings and errors during test
config :logger, level: :warning
config :microwaveprop, Client,
username: "testuser",
password: "testpass",
agent: "microwaveprop-test/1.0",
plug: {Req.Test, Client},
retry: false
# Read-only secondary repo for aprs.me. Configured here so the app boots
# under MIX_ENV=test, but uses the SQL.Sandbox in :manual mode so tests
# that don't touch APRS data don't have to check the DB out. Tests that
# do query the AprsRepo must call `Ecto.Adapters.SQL.Sandbox.checkout/1`
# explicitly.
config :microwaveprop, Microwaveprop.AprsRepo,
username: "postgres",
password: "postgres",
hostname: "localhost",
database: "aprsme_test#{System.get_env("MIX_TEST_PARTITION")}",
pool: Sandbox,
pool_size: 2,
ownership_timeout: 60_000,
timeout: 60_000
config :microwaveprop, Microwaveprop.Geocoder,
plug: {Req.Test, Microwaveprop.Geocoder},
retry: false
# In test we don't send emails
config :microwaveprop, Microwaveprop.Mailer, adapter: Swoosh.Adapters.Test
config :microwaveprop, Microwaveprop.Qrz, cache_ttl_hours: 0
# Configure your database
#
# The MIX_TEST_PARTITION environment variable can be used
# to provide built-in test partitioning in CI environment.
# Run `mix help test` for more information.
config :microwaveprop, Microwaveprop.Repo,
username: "postgres",
password: "postgres",
hostname: "localhost",
database: "microwaveprop_test#{System.get_env("MIX_TEST_PARTITION")}",
pool: Sandbox,
pool_size: System.schedulers_online() * 2,
ownership_timeout: 60_000,
timeout: 60_000
# We don't run a server during test. If one is required,
# you can enable the server option below.
config :microwaveprop, MicrowavepropWeb.Endpoint,
http: [ip: {127, 0, 0, 1}, port: 4002],
secret_key_base: "f7KbnwUezGrPtrv/67l6Wi+W9/+wOqwFG5QJ/ZLs24cVM1gg2lBswZwrKuyWsBAZ",
server: false
# Run Oban jobs inline during tests
config :microwaveprop, Oban, testing: :inline
# Skip the registration-time QRZ lookup in tests — it needs a Mox stub
# that isn't set up across the test suite, and the worker is exercised
# directly in its own dedicated test.
config :microwaveprop, :enable_home_qth_lookup, false
# MetricsLogSuppressionTest hits GET /metrics and asserts no "Sent 200"
# log line; that path needs PromEx alive to return a 200. We can't
# blanket-disable PromEx. Instead, toggle off the Oban-queue poller
# below — its 5 s telemetry measurement issues an Ecto query from a
# process that doesn't hold a sandbox connection and crashes with
# DBConnection.OwnershipError, spamming the test log.
config :microwaveprop, :prom_ex_include_oban_plugin, false
# Score files land under a per-run tmp directory so replace_scores tests
# don't write into a shared location (and we can assert on the file
# contents from inside tests).
config :microwaveprop,
:propagation_scores_dir,
Path.join(System.tmp_dir!(), "microwaveprop_test_scores_#{System.unique_integer([:positive])}")
# Don't open an outbound MQTT connection from `mix test`. The
# Pskr.Aggregator still starts (so unit tests can drive it), but
# Pskr.Client is gated off here.
config :microwaveprop, :pskr_mqtt_enabled, false
# Skip the Overpass road-proximity HTTP call in tests — the rover live
# test exercises the full Calculate pipeline and we don't want it
# reaching out to overpass-api.de.
config :microwaveprop, :rover_road_proximity_enabled, false
config :microwaveprop, cache_contact_count: false
config :microwaveprop, cache_contact_map: false
config :microwaveprop, elevation_req_options: [plug: {Req.Test, Microwaveprop.Terrain.ElevationClient}, retry: false]
config :microwaveprop, gefs_req_options: [plug: {Req.Test, Microwaveprop.Weather.GefsClient}, retry: false]
config :microwaveprop, giro_req_options: [plug: {Req.Test, Microwaveprop.Ionosphere.GiroClient}, retry: false]
# Default the HRRR cycle freshness probe to "always available" in tests.
# Individual cases that exercise the fallback path override via
# `Application.put_env/3` in their setup.
config :microwaveprop, hrrr_cycle_available_fn: fn _run_time -> true end
config :microwaveprop, hrrr_req_options: [plug: {Req.Test, Microwaveprop.Weather.HrrrClient}, retry: false]
config :microwaveprop, iem_rate_limiter_interval_ms: 0
config :microwaveprop, iem_req_options: [plug: {Req.Test, Microwaveprop.Weather.IemClient}, retry: false]
config :microwaveprop, narr_req_options: [plug: {Req.Test, Microwaveprop.Weather.NarrClient}, retry: false]
# Route HTTP requests through Req.Test stubs
config :microwaveprop, nexrad_req_options: [plug: {Req.Test, Microwaveprop.Weather.NexradClient}, retry: false]
config :microwaveprop, solar_req_options: [plug: {Req.Test, Microwaveprop.Weather.SolarClient}]
config :microwaveprop, srtm_req_options: [plug: {Req.Test, Microwaveprop.Terrain.Srtm}, retry: false]
config :microwaveprop, start_freshness_monitor: false
config :microwaveprop, swpc_req_options: [plug: {Req.Test, Microwaveprop.SpaceWeather.SwpcClient}, retry: false]
config :microwaveprop, uwyo_req_options: [plug: {Req.Test, Microwaveprop.Weather.UwyoSoundingClient}, retry: false]
# Initialize plugs at runtime for faster test compilation
config :phoenix, :plug_init_mode, :runtime
# Sort query params output of verified routes for robust url comparisons
config :phoenix,
sort_verified_routes_query_params: true
# Enable helpful, but potentially expensive runtime checks
config :phoenix_live_view,
enable_expensive_runtime_checks: true
# Disable swoosh api client as it is only required for production adapters
config :swoosh, :api_client, false