"""Tests for request schemas module.""" import marshmallow import pytest from conflict_manager.constants import query_parameters as query_consts from conflict_manager.schemas.pagination_schema import PaginationSchema def test_args_schema_without_args(): """Expect default values since no query params are provided.""" query_params = {} result = PaginationSchema().load(query_params) assert result == { 'sort_by': None, 'sort_order': 'asc', 'limit': 50, 'offset': 0} @pytest.mark.parametrize( 'query_param, schema_key, valid_values', [('sort_order', 'sort_order', query_consts.ALLOWED_SORT_ORDER), ('sort_by', 'sort_by', query_consts.NEW_CONFLICT_SORTABLE_COLUMNS), ('sort_by', 'sort_by', [None, '']), ('page_offset', 'offset', [0, 1]), ('page_limit', 'limit', [0, 1])] ) def test_get_new_conflicts_valid_values(query_param, schema_key, valid_values): """Expect success because query param is valid.""" schema = PaginationSchema( sort_by_options=query_consts.NEW_CONFLICT_SORTABLE_COLUMNS) for value in valid_values: query_params = {query_param: value} result = schema.load(query_params) assert result[schema_key] == value @pytest.mark.parametrize( 'query_param, invalid_values', [('sort_order', ['', None, [], 1, 'some word']), ('sort_by', [[], 1, 'some word']), ('page_offset', ['', None, [], -1]), ('page_limit', ['', None, [], -1])]) def test_request_params_invalid_values( query_param, invalid_values): """Expect error depending on query parameter.""" schema = PaginationSchema( sort_by_options=query_consts.NEW_CONFLICT_SORTABLE_COLUMNS) for value in invalid_values: query_params = {query_param: value} with pytest.raises(marshmallow.ValidationError) as exc_info: schema.load(query_params) assert query_param in exc_info.value.messages