"""Unit tests for request util.""" from marshmallow import ValidationError import pytest from payment.constants.constants import ( DEFAULT_PAGE_LIMIT, DEFAULT_PAGE_OFFSET, DEFAULT_SORT_BY, DEFAULT_SORT_ORDER, ) from payment.utils.request import validate_pagination_params def test_validate_pagination_params_valid(): """Test no error is raised when params are valid.""" params = { 'limit': '25', 'offset': '1', 'sort_by': 'whatever', 'sort_order': 'asc', 'valid_sortable_columns': ['whatever'], } res = validate_pagination_params(**params) assert res == { 'limit': int(params.get('limit')), 'offset': int(params.get('offset')), 'sort_by': params.get('sort_by'), 'sort_order': params.get('sort_order'), } def test_validate_pagination_params_valid_default(): """Test default pagination params are valid.""" res = validate_pagination_params() assert res == { 'limit': DEFAULT_PAGE_LIMIT, 'offset': DEFAULT_PAGE_OFFSET, 'sort_by': DEFAULT_SORT_BY, 'sort_order': DEFAULT_SORT_ORDER, } def test_validate_pagination_params_invalid_limit(): """Test error is raised when limit is not an int.""" params = {'limit': 'does not exist'} with pytest.raises(ValidationError): validate_pagination_params(**params) def test_validate_pagination_params_invalid_offset(): """Test error is raised when offset is not an int.""" params = {'offset': 'onset'} with pytest.raises(ValidationError): validate_pagination_params(**params) def test_validate_pagination_params_invalid_sort_by(): """Test error is raised when sort_by is not a valid column.""" params = {'sort_by': 'nothing'} with pytest.raises(ValidationError): validate_pagination_params(**params) def test_validate_pagination_params_invalid_sort_order(): """Test error is raised when sort_order is not 'asc' or 'desc'.""" params = {'sort_order': ''} with pytest.raises(ValidationError): validate_pagination_params(**params)