diff --git a/requirements-optional.txt b/requirements-optional.txt index a79ed6b13..d1d95b2e6 100644 --- a/requirements-optional.txt +++ b/requirements-optional.txt @@ -7,5 +7,6 @@ imageio multiprocess>=0.70 statsmodels prettytable +contextily>=1.0.0; python_version < '3.14' pyvista>=0.45 imageio-ffmpeg>=0.5 \ No newline at end of file diff --git a/tests/unit/simulation/test_monte_carlo_plots_background.py b/tests/unit/simulation/test_monte_carlo_plots_background.py index 8a9de5cf6..89a554a85 100644 --- a/tests/unit/simulation/test_monte_carlo_plots_background.py +++ b/tests/unit/simulation/test_monte_carlo_plots_background.py @@ -1,4 +1,5 @@ # pylint: disable=unused-argument,assignment-from-no-return +import math import os import urllib.error from unittest.mock import MagicMock, patch @@ -19,6 +20,33 @@ ) +@pytest.fixture(autouse=True) +def mock_background_tiles(monkeypatch): + """Return deterministic map tiles without contacting a tile provider.""" + contextily = import_optional_dependency("contextily") + + def mock_bounds2img(west, south, east, north, **kwargs): + earth_radius = 6378137.0 + + def to_mercator(longitude, latitude): + x = earth_radius * math.radians(longitude) + y = earth_radius * math.log( + math.tan(math.pi / 4 + math.radians(latitude) / 2) + ) + return x, y + + min_x, min_y = to_mercator(west, south) + max_x, max_y = to_mercator(east, north) + return np.zeros((2, 2, 3), dtype=np.uint8), ( + min_x, + max_x, + min_y, + max_y, + ) + + monkeypatch.setattr(contextily, "bounds2img", mock_bounds2img) + + class MockMonteCarlo(MonteCarlo): """Create a mock class to test the method without running a real simulation.