step 1: lock public api and pure core
This commit is contained in:
71
tests/test_providers.py
Normal file
71
tests/test_providers.py
Normal file
@@ -0,0 +1,71 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user