import pytest from getstream_connector.utils.ratelimit import RatelimitInfo from tests import constants @pytest.mark.parametrize( "headers, expected_limit, expected_remaining, expected_reset_ts, expected_reset_in_seconds", ( # Test for default values ({}, 1000, 1000, 0, 0), # Test for future reset timestamp ( { constants.RATELIMIT_LIMIT_HEADER: "700", constants.RATELIMIT_REMAINING_HEADER: "300", constants.RATELIMIT_RESET_HEADER: str(constants.TIMESTAMP + 100), }, 700, 300, constants.TIMESTAMP + 100, 100, ), # Test for past reset timestamp ( { constants.RATELIMIT_LIMIT_HEADER: "700", constants.RATELIMIT_REMAINING_HEADER: "300", constants.RATELIMIT_RESET_HEADER: str(constants.TIMESTAMP - 100), }, 700, 300, constants.TIMESTAMP - 100, 0, ), # Test for invalid values ( { constants.RATELIMIT_LIMIT_HEADER: "invalid", constants.RATELIMIT_REMAINING_HEADER: "invalid", constants.RATELIMIT_RESET_HEADER: "invalid", }, 1000, 1000, 0, 0, ), ), ) def test_ratelimit( headers, expected_limit, expected_remaining, expected_reset_ts, expected_reset_in_seconds, frozen_time ): info = RatelimitInfo() info.set_from_headers(headers) assert info.limit == expected_limit assert info.remaining == expected_remaining assert info.reset_ts == expected_reset_ts assert info.reset_in_seconds == expected_reset_in_seconds