"""Test for the flask request util.""" from unittest.mock import MagicMock import pytest from vectororder.constants import pagination as const_pagination from vectororder.utils import pagination def test_get_pagination() -> None: """Test pagination is returned as namedtuple.""" expected_offset = 10 expected_limit = 100 mock_request = MagicMock() mock_request.args.get.side_effect = [expected_offset, expected_limit] result = pagination.get_pagination(mock_request) assert result.offset == expected_offset assert result.limit == expected_limit def test_get_pagination_uses_defaults() -> None: """Test pagination is returned as named tuple for default values.""" mock_request = MagicMock() mock_request.args.get.side_effect = [None, None] result = pagination.get_pagination(mock_request) assert result.offset == const_pagination.PAGE_OFFSET_DEFAULT assert result.limit == const_pagination.PAGE_LIMIT_DEFAULT @pytest.mark.parametrize( "offset, limit, expected_offset, expected_limit", ( (10, "limit string", 10, const_pagination.PAGE_LIMIT_DEFAULT), ("offset string", 10, const_pagination.PAGE_OFFSET_DEFAULT, 10), ("10", "limit string", 10, const_pagination.PAGE_LIMIT_DEFAULT), ("offset string", "10", const_pagination.PAGE_OFFSET_DEFAULT, 10), ( "offset string", "limit string", const_pagination.PAGE_OFFSET_DEFAULT, const_pagination.PAGE_LIMIT_DEFAULT, ), (-1, 10, const_pagination.PAGE_OFFSET_DEFAULT, 10), (10, -1, 10, const_pagination.PAGE_LIMIT_DEFAULT), ("-1", 10, const_pagination.PAGE_OFFSET_DEFAULT, 10), (10, "-1", 10, const_pagination.PAGE_LIMIT_DEFAULT), ), ) def test_get_pagination_handles_non_ints( offset: int, limit: int, expected_offset: int, expected_limit: int ) -> None: """Test pagination handles non integers.""" mock_request = MagicMock() mock_request.args.get.side_effect = [offset, limit] result = pagination.get_pagination(mock_request) assert result.offset == expected_offset assert result.limit == expected_limit