"""Unit tests for request util.""" from unittest.mock import patch import pytest from marshmallow import ValidationError from royalties.constants.error import ( ERROR_INVALID_LIMIT_OFFSET, ERROR_POST_REQUEST_DUPLICATE_RECORDS, ) from royalties.utils.request import ( get_optional_numeric_list_from_params, validate_pagination_params, validate_post_request_contains_unique_data, ) def test_validate_pagination_params_success(): """Test validate_pagination_params when all parameters are valid.""" params = {'limit': 1, 'offset': 0} expected_response = {'limit': 1, 'offset': 0} res = validate_pagination_params(**params) assert res == expected_response def test_validate_pagination_params_error(): """Test validate_pagination_params for an invalid params.""" params = {'limit': 'test', 'offset': 0} with pytest.raises(ValidationError) as excinfo: validate_pagination_params(**params) assert ERROR_INVALID_LIMIT_OFFSET == str(excinfo.value) @patch('royalties.utils.request.request') def test_get_optional_numeric_list_from_params(mock_request): """Test get_optional_numeric_list_from_params.""" mock_request.json = ['2024', '2025', 2026] res = get_optional_numeric_list_from_params() assert res == [2024, 2025, 2026] def test_validate_post_request_contains_unique_data(): """Test _validate_post_request_contains_unique_data function. if request body contains unique data. """ mock_post_request = [ { 'from_contract_id': 1, 'to_contract_id': 2, 'transfer_type': 'override', 'transfer_amount': '2.167', 'negative': False, }, { 'from_contract_id': 3, 'to_contract_id': 4, 'transfer_type': 'override', 'transfer_amount': '2.167', 'negative': False, }, ] res = validate_post_request_contains_unique_data(mock_post_request) assert res is True def test_validate_post_request_contains_non_unique_data(): """Test _validate_post_request_contains_unique_data function. if request body contains non-unique data. """ mock_post_request = [ { 'from_contract_id': 1, 'to_contract_id': 2, 'transfer_type': 'override', 'transfer_amount': '2.167', 'negative': False, }, { 'from_contract_id': 1, 'to_contract_id': 2, 'transfer_type': 'override', 'transfer_amount': '2.167', 'negative': False, }, ] with pytest.raises(Exception) as excinfo: validate_post_request_contains_unique_data(mock_post_request) (msg,) = excinfo.value.args assert msg == ERROR_POST_REQUEST_DUPLICATE_RECORDS.format(mock_post_request[0])