diff --git a/src/validator.py b/src/validator.py new file mode 100644 index 0000000..8ad40e9 --- /dev/null +++ b/src/validator.py @@ -0,0 +1,23 @@ +import re +from typing import Tuple, Optional + + +def validate_space_url(url: str) -> Tuple[bool, Optional[str], Optional[str]]: + """ + Validates X Space URL format. + + Args: + url: The URL to validate + + Returns: + Tuple of (is_valid, space_id, error_message) + """ + # Pattern for X Space URLs + pattern = r"https://x\.com/i/spaces/([a-zA-Z0-9]+)" + match = re.match(pattern, url) + + if not match: + return False, None, "Invalid URL format. Expected: https://x.com/i/spaces/{SPACE_ID}" + + space_id = match.group(1) + return True, space_id, None diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_validator.py b/tests/test_validator.py new file mode 100644 index 0000000..75dfd67 --- /dev/null +++ b/tests/test_validator.py @@ -0,0 +1,12 @@ +import pytest +from src.validator import validate_space_url + + +def test_validate_space_url_valid(): + """Test that valid X Space URL is accepted.""" + url = "https://x.com/i/spaces/1ZkKzZWnVRRKv" + is_valid, space_id, error = validate_space_url(url) + + assert is_valid is True + assert space_id == "1ZkKzZWnVRRKv" + assert error is None