diff --git a/pygeoapi/api/maps.py b/pygeoapi/api/maps.py index 23ce03ca1..5926c90cb 100644 --- a/pygeoapi/api/maps.py +++ b/pygeoapi/api/maps.py @@ -52,7 +52,7 @@ from pygeoapi.provider.base import ( ProviderGenericError, ProviderInvalidDataError ) -from pygeoapi.util import to_json, filter_dict_by_key_value +from pygeoapi.util import str2bool, to_json, filter_dict_by_key_value from . import APIRequest, API, validate_datetime, validate_subset @@ -132,7 +132,8 @@ def get_collection_map(api: API, request: APIRequest, LOGGER.debug(f'Using bbox-crs: {query_args['bbox-crs']}') - query_args['transparent'] = request.params.get('transparent', True) + query_args['transparent'] = str2bool( + request.params.get('transparent', True)) try: query_args['width'] = int(request.params.get('width', 500)) diff --git a/tests/api/test_maps.py b/tests/api/test_maps.py index b13228d2f..81759d333 100644 --- a/tests/api/test_maps.py +++ b/tests/api/test_maps.py @@ -34,6 +34,9 @@ from http import HTTPStatus +import pytest + +from pygeoapi.api import maps from pygeoapi.api.maps import get_collection_map from tests.util import mock_api_request @@ -64,6 +67,31 @@ def test_get_collection_map(config, api_): assert code == HTTPStatus.NOT_IMPLEMENTED +@pytest.mark.parametrize('value, expected', [ + (None, True), + ('true', True), + ('True', True), + ('false', False), + ('False', False), +]) +def test_get_collection_map_transparent(api_, monkeypatch, value, expected): + seen = {} + + class Provider: + def query(self, **kwargs): + seen.update(kwargs) + return b'image' + + monkeypatch.setattr(maps, 'load_plugin', lambda *args: Provider()) + + params = {} if value is None else {'transparent': value} + req = mock_api_request(params) + _, code, _ = get_collection_map(api_, req, 'mapserver_world_map') + + assert code == HTTPStatus.OK + assert seen['transparent'] is expected + + def test_map_crs_transform(config, api_): # Florida in EPSG:4326 params = {