diff --git a/datagateway_api/src/search_api/filters.py b/datagateway_api/src/search_api/filters.py index 83cf8bce..f832d858 100644 --- a/datagateway_api/src/search_api/filters.py +++ b/datagateway_api/src/search_api/filters.py @@ -148,7 +148,7 @@ def __repr__(self): class SearchAPISkipFilter(PythonICATSkipFilter): def __init__(self, skip_value): - super().__init__(skip_value, filter_use="search_api") + super().__init__(int(skip_value), filter_use="search_api") def apply_filter(self, query): return super().apply_filter(query.icat_query.query) @@ -156,7 +156,7 @@ def apply_filter(self, query): class SearchAPILimitFilter(PythonICATLimitFilter): def __init__(self, limit_value): - super().__init__(limit_value) + super().__init__(int(limit_value)) def apply_filter(self, query): return super().apply_filter(query.icat_query.query) diff --git a/datagateway_api/src/search_api/query_filter_factory.py b/datagateway_api/src/search_api/query_filter_factory.py index 24e366a9..fd669d63 100644 --- a/datagateway_api/src/search_api/query_filter_factory.py +++ b/datagateway_api/src/search_api/query_filter_factory.py @@ -58,7 +58,7 @@ def get_query_filter(request_filter, entity_name=None, related_entity_name=None) ) elif filter_name == "limit": log.info("limit JSON object found") - query_filters.append(SearchAPILimitFilter(int(filter_input))) + query_filters.append(SearchAPILimitFilter(filter_input)) elif filter_name == "skip": log.info("skip JSON object found") query_filters.append(SearchAPISkipFilter(filter_input)) diff --git a/test/search_api/filters/test_search_api_limit_filter.py b/test/search_api/filters/test_search_api_limit_filter.py index af74052a..3dd06283 100644 --- a/test/search_api/filters/test_search_api_limit_filter.py +++ b/test/search_api/filters/test_search_api_limit_filter.py @@ -11,18 +11,21 @@ class TestSearchAPILimitFilter: pytest.param(10, id="typical"), pytest.param(0, id="low boundary"), pytest.param(9999, id="high boundary"), + pytest.param("10", id="string parameter typical"), + pytest.param("0", id="string parameter low boundary"), + pytest.param("9999", id="string parameter high boundary"), ], ) def test_valid_limit_value(self, limit_value, search_api_query_document): test_filter = SearchAPILimitFilter(limit_value) test_filter.apply_filter(search_api_query_document) - assert search_api_query_document.icat_query.query.limit == (0, limit_value) + assert search_api_query_document.icat_query.query.limit == (0, int(limit_value)) @pytest.mark.parametrize( "limit_value", - [pytest.param(-50, id="extreme invalid"), pytest.param(-1, id="boundary")], + [pytest.param(-50, id="extreme invalid"), pytest.param(-1, id="boundary"), pytest.param("Nan", id="Nan string")], ) def test_invalid_limit_value(self, limit_value): - with pytest.raises(FilterError): - SearchAPILimitFilter(limit_value) + with pytest.raises((FilterError, Exception)): + SearchAPILimitFilter(limit_value) \ No newline at end of file diff --git a/test/search_api/filters/test_search_api_skip_filter.py b/test/search_api/filters/test_search_api_skip_filter.py index bffb96cd..fbaf77be 100644 --- a/test/search_api/filters/test_search_api_skip_filter.py +++ b/test/search_api/filters/test_search_api_skip_filter.py @@ -8,14 +8,14 @@ class TestSearchAPISkipFilter: @pytest.mark.parametrize( - "skip_value", [pytest.param(10, id="typical"), pytest.param(0, id="boundary")], + "skip_value", [pytest.param(10, id="typical"), pytest.param(0, id="boundary"),pytest.param("10", id="string format typical"), pytest.param("0", id="string format boundary")], ) def test_valid_skip_value(self, search_api_query_document, skip_value): test_filter = SearchAPISkipFilter(skip_value) test_filter.apply_filter(search_api_query_document) assert search_api_query_document.icat_query.query.limit == ( - skip_value, + int(skip_value), get_icat_properties( Config.config.search_api.icat_url, Config.config.search_api.icat_check_cert, @@ -24,8 +24,8 @@ def test_valid_skip_value(self, search_api_query_document, skip_value): @pytest.mark.parametrize( "skip_value", - [pytest.param(-375, id="extreme invalid"), pytest.param(-1, id="boundary")], + [pytest.param(-375, id="extreme invalid"), pytest.param(-1, id="boundary"), pytest.param("Nan", id="Nan string")], ) def test_invalid_skip_value(self, skip_value): - with pytest.raises(FilterError): + with pytest.raises((FilterError, Exception)): SearchAPISkipFilter(skip_value)