from datetime import date, datetime import pytest from monday_com_orca_backend.api.routers.data.models import responses class TestIsValidRegex: @pytest.mark.parametrize( "value,pattern,is_valid", [ ("user@example.com", r"^[^@\s]+@[^@\s]+\.[^@\s]+$", True), ("userexample.com", r"^[^@\s]+@[^@\s]+\.[^@\s]+$", False), ("user@foo", r"^user@foo$", True), ("user@foo", r"^user@bar$", False), ("", r"^$", True), ], ) def test_is_valid_regex_basic(self, value, pattern, is_valid): assert responses._is_valid_regex(value, pattern) is is_valid def test_is_valid_regex_cache(self): func = responses._is_valid_regex func.cache_clear() func("user@example.com", r"^[^@\s]+@[^@\s]+\.[^@\s]+$") func("user@example.com", r"^[^@\s]+@[^@\s]+\.[^@\s]+$") stats = func.cache_info() assert stats.hits == 1 assert stats.misses == 1 assert stats.currsize == 1 class TestValidateDateFormat: @pytest.mark.parametrize( "date_str,is_valid", [ ("2023-10-01", True), ("2023-10-01T12:00:00Z", False), # Valid ISO format but not expected format ("01/10/2023", False), # Invalid format ], ) def test_validate_date_format(self, date_str, is_valid): if not is_valid: with pytest.raises(ValueError): responses._validate_date_format(date_str) else: assert responses._validate_date_format( date_str ), "Expected a valid date string for the given format" @pytest.mark.parametrize( "input_value,type_error", [ (20231001, True), (datetime(2023, 10, 1), False), (date(2023, 10, 1), False), ], ) def test_validate_date_format_cast_to_str(self, input_value, type_error): if type_error: with pytest.raises(TypeError): responses._validate_date_format(input_value) else: assert isinstance( responses._validate_date_format(input_value), str ), "Expected a string return type for valid date inputs" def test_validate_date_format_allow_none_returns_none(self): result = responses._validate_date_format(None, allow_none=True) assert result is None, "Expected None to be returned when input is None" def test_validate_date_format_allow_none_raises_error(self): with pytest.raises(ValueError): responses._validate_date_format(None, allow_none=False)