"""Issue #203 (tg12): meshtastic_map.py was unconditionally including ``MESHTASTIC_OPERATOR_CALLSIGN`` in the outbound User-Agent header, which contradicted the README's "no user data transmitted" claim. The fix preserves the existing default behavior (callsign sent — that's what operators who configured the variable expected) but adds an opt-out env var ``MESHTASTIC_SEND_CALLSIGN_HEADER=false`` for privacy-conscious operators. """ import importlib import sys import pytest def _reload_meshtastic_module(): """Reload meshtastic_map so settings are re-read on demand.""" if "services.fetchers.meshtastic_map" in sys.modules: del sys.modules["services.fetchers.meshtastic_map"] return importlib.import_module("services.fetchers.meshtastic_map") def test_default_behavior_includes_callsign(monkeypatch): """Operators who set the callsign and don't change anything else keep their existing behavior (callsign sent in UA).""" # We test the UA construction logic by exercising the same branches # the fetcher uses. Direct fetch isn't run because it makes a real # network call — we just verify the env-var-driven decision. import os monkeypatch.setenv("MESHTASTIC_OPERATOR_CALLSIGN", "N0CALL") monkeypatch.delenv("MESHTASTIC_SEND_CALLSIGN_HEADER", raising=False) raw = str(os.environ.get("MESHTASTIC_SEND_CALLSIGN_HEADER", "true")).strip().lower() send_callsign_header = raw not in {"0", "false", "no", "off", ""} assert send_callsign_header is True def test_opt_out_suppresses_callsign(monkeypatch): """Setting MESHTASTIC_SEND_CALLSIGN_HEADER=false suppresses the header.""" import os monkeypatch.setenv("MESHTASTIC_OPERATOR_CALLSIGN", "N0CALL") monkeypatch.setenv("MESHTASTIC_SEND_CALLSIGN_HEADER", "false") raw = str(os.environ.get("MESHTASTIC_SEND_CALLSIGN_HEADER", "true")).strip().lower() send_callsign_header = raw not in {"0", "false", "no", "off", ""} assert send_callsign_header is False def test_various_falsy_values_all_opt_out(monkeypatch): """Common falsy strings should all suppress the callsign header.""" import os for falsy in ("0", "false", "FALSE", "no", "off"): monkeypatch.setenv("MESHTASTIC_SEND_CALLSIGN_HEADER", falsy) raw = str(os.environ.get("MESHTASTIC_SEND_CALLSIGN_HEADER", "true")).strip().lower() send_callsign_header = raw not in {"0", "false", "no", "off", ""} assert send_callsign_header is False, f"value {falsy!r} did not opt out"