From d8096476440153625d5fe88ab94e819f1665737f Mon Sep 17 00:00:00 2001 From: Benjamin Webb <40066515+webb-ben@users.noreply.github.com> Date: Wed, 12 Feb 2025 06:18:24 -0500 Subject: [PATCH] Fix API Tile Metadata JSON response (#1934) * Add test for Tile metadata * Serialize tile metadata response to json * Update test_tiles.py --- pygeoapi/api/tiles.py | 6 +++--- tests/api/test_tiles.py | 21 ++++++++++++++++++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/pygeoapi/api/tiles.py b/pygeoapi/api/tiles.py index 32d25ae9e..5e9a8e7d3 100644 --- a/pygeoapi/api/tiles.py +++ b/pygeoapi/api/tiles.py @@ -262,7 +262,6 @@ def get_collection_tiles_data( err.ogc_exception_code, err.message) -# TODO: no test for this function? def get_collection_tiles_metadata( api: API, request: APIRequest, dataset=None, matrix_id=None) -> Tuple[dict, int, str]: @@ -328,9 +327,10 @@ def get_collection_tiles_metadata( 'collections/tiles/metadata.html', tiles_metadata, request.locale) - return headers, HTTPStatus.OK, content else: - return headers, HTTPStatus.OK, tiles_metadata + content = to_json(tiles_metadata, api.pretty_print) + + return headers, HTTPStatus.OK, content def tilematrixsets(api: API, diff --git a/tests/api/test_tiles.py b/tests/api/test_tiles.py index df11ca5f3..783419592 100644 --- a/tests/api/test_tiles.py +++ b/tests/api/test_tiles.py @@ -34,10 +34,12 @@ import json from http import HTTPStatus +import pytest from pygeoapi.api import FORMAT_TYPES, F_HTML from pygeoapi.api.tiles import ( - get_collection_tiles, tilematrixset, tilematrixsets, + get_collection_tiles, tilematrixset, + tilematrixsets, get_collection_tiles_metadata ) from pygeoapi.models.provider.base import TileMatrixSetEnum @@ -83,6 +85,23 @@ def test_tilematrixsets(config, api_): assert rsp_headers['Content-Language'] == 'en-US' +@pytest.mark.parametrize('file_format', ['html', 'json', 'tilejson']) +def test_get_collection_tiles_metadata_bad_request(api_, file_format): + req = mock_api_request({'f': file_format}) + _, code, _ = get_collection_tiles_metadata( + api_, req, 'obs', 'WorldCRS84Quad') + assert code == HTTPStatus.BAD_REQUEST + + +@pytest.mark.parametrize('file_format', ['json', 'tilejson']) +def test_get_collection_tiles_metadata_formats(api_, file_format): + req = mock_api_request({'f': file_format}) + _, code, response = get_collection_tiles_metadata( + api_, req, 'naturalearth/lakes', matrix_id='WebMercatorQuad') + assert code == HTTPStatus.OK + assert json.loads(response) + + def test_tilematrixset(config, api_): req = mock_api_request()