Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions jupyter_xarray_tiler/tests/fixtures/api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from collections.abc import AsyncGenerator

import pytest_asyncio

from jupyter_xarray_tiler.titiler import _get_server


async def _reset_titiler_api_for_testing() -> None:
# Shutdown the previous server
server = _get_server()
await server.stop_tile_server()
# Clear the cache so next time we'll get a fresh one
_get_server.cache_clear()


@pytest_asyncio.fixture
async def clean_titiler_api() -> AsyncGenerator[None]:
"""Ensure a test's usage of the titiler API is not influenced by other tests.

I.e., the test will receive a fresh TiTiler server.
"""
await _reset_titiler_api_for_testing()
yield
await _reset_titiler_api_for_testing()
2 changes: 1 addition & 1 deletion jupyter_xarray_tiler/tests/fixtures/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@


@pytest_asyncio.fixture
async def titiler_server() -> AsyncGenerator[TiTilerServer]:
async def clean_titiler_server() -> AsyncGenerator[TiTilerServer]:
server = TiTilerServer()
await server.start_tile_server()
yield server
Expand Down
28 changes: 23 additions & 5 deletions jupyter_xarray_tiler/tests/test_titiler_api.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,32 @@
import pytest
from xarray import DataArray

from jupyter_xarray_tiler.titiler import _get_server, get_routes
from jupyter_xarray_tiler.titiler import (
_get_server,
add_data_array,
get_routes,
)


def test_raises_if_get_routes_before_server_started() -> None:
def test_singleton_ish() -> None:
"""Test that the API only uses one TiTiler server instance."""
assert id(_get_server()) == id(_get_server())
assert _get_server() is _get_server()


@pytest.mark.usefixtures("clean_titiler_api")
def test_get_routes_raises_before_server_started() -> None:
"""Test that get_routes raises an error if called before initialization."""
with pytest.raises(RuntimeError):
get_routes()


def test_singleton_ish() -> None:
"""Test that the API only uses one TiTiler server instance."""
assert id(_get_server()) == id(_get_server())
@pytest.mark.usefixtures("clean_titiler_api")
async def test_add_data_array_creates_routes(
random_data_array: DataArray,
) -> None:
await add_data_array(
data_array=random_data_array,
colormap_name="viridis",
)
assert len(get_routes()) > 0
15 changes: 8 additions & 7 deletions jupyter_xarray_tiler/tests/test_titiler_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,39 +12,40 @@ async def test_server_is_not_singleton() -> None:
Now, tests depend on being able to create a fresh instance and the end-user is
protected from starting multiple instances in the public API.
"""
assert id(TiTilerServer()) != id(TiTilerServer())
assert TiTilerServer() is not TiTilerServer()


@pytest.mark.asyncio
async def test_add_data_array_creates_api_routes(
titiler_server: TiTilerServer,
clean_titiler_server: TiTilerServer,
random_data_array: DataArray,
) -> None:
"""Test that FastAPI routes are created when a data array is added to the server."""
assert len(titiler_server.routes) == 0
assert len(clean_titiler_server.routes) == 0

await titiler_server.add_data_array(
await clean_titiler_server.add_data_array(
data_array=random_data_array,
colormap_name="viridis",
)

assert len(titiler_server.routes) > 1
assert len(clean_titiler_server.routes) > 0


@pytest.mark.asyncio
async def test_add_data_array_returns_valid_tile_url(
titiler_server: TiTilerServer,
clean_titiler_server: TiTilerServer,
random_data_array: DataArray,
) -> None:
"""Test that adding a DataArray returns a properly formatted tile URL."""
tile_url = await titiler_server.add_data_array(
tile_url = await clean_titiler_server.add_data_array(
data_array=random_data_array,
colormap_name="viridis",
)

assert tile_url is not None
assert "/proxy/" in tile_url
assert f"/{titiler_server._port}/" in tile_url
assert f"/{clean_titiler_server._port}/" in tile_url
assert "/tiles/WebMercatorQuad/{z}/{x}/{y}.png" in tile_url
assert "colormap_name=viridis" in tile_url
assert "scale=1" in tile_url
Loading