from __future__ import annotations import pytest import dpg_map as dpgm from dpg_map.exceptions import InvalidProviderError, ProviderExistsError, ProviderNotFoundError def test_default_provider_is_registered() -> None: provider = dpgm.get_provider("osm") assert provider.name == "osm" assert "osm" in dpgm.list_providers() assert provider.build_url(x=1, y=2, z=3) == "https://tile.openstreetmap.org/3/1/2.png" def test_provider_registration_roundtrip() -> None: provider = dpgm.TileProvider( name="unit-test-provider", url_template="https://tiles.example.test/{z}/{x}/{y}.png", attribution="Example", ) dpgm.register_provider(provider) try: assert dpgm.get_provider("unit-test-provider") == provider assert "unit-test-provider" in dpgm.list_providers() finally: dpgm.unregister_provider("unit-test-provider") with pytest.raises(ProviderNotFoundError): dpgm.get_provider("unit-test-provider") def test_duplicate_provider_registration_fails() -> None: provider = dpgm.TileProvider( name="unit-test-duplicate", url_template="https://tiles.example.test/{z}/{x}/{y}.png", ) dpgm.register_provider(provider) try: with pytest.raises(ProviderExistsError): dpgm.register_provider(provider) finally: dpgm.unregister_provider("unit-test-duplicate") def test_provider_url_building_with_subdomains_retina_and_extension() -> None: provider = dpgm.TileProvider( name="unit-test-template", url_template="https://{s}.tiles.example.test/{z}/{x}/{y}{r}.{ext}", subdomains=("a", "b", "c"), retina=True, file_extension="webp", ) assert provider.build_url(x=1, y=2, z=3) == "https://a.tiles.example.test/3/1/2@2x.webp" @pytest.mark.parametrize( "template", [ "https://tiles.example.test/{z}/{x}.png", "https://tiles.example.test/{z}/{x}/{y}/{quadkey}.png", "", ], ) def test_invalid_provider_templates_fail(template: str) -> None: with pytest.raises(InvalidProviderError): dpgm.TileProvider(name="bad-template", url_template=template)