"""Tests for input validation module.""" import pytest from src.validation.inputs import ( PlayerSearchInput, is_valid_search_term, validate_search_term, ) class TestPlayerSearchInput: """Tests for PlayerSearchInput validation.""" def test_valid_simple_name(self) -> None: """Test valid simple name passes validation.""" result = PlayerSearchInput(search_term="James") assert result.search_term == "James" def test_valid_full_name(self) -> None: """Test valid full name passes validation.""" result = PlayerSearchInput(search_term="LeBron James") assert result.search_term == "LeBron James" def test_valid_name_with_apostrophe(self) -> None: """Test name with apostrophe passes validation.""" result = PlayerSearchInput(search_term="Shaquille O'Neal") assert result.search_term == "Shaquille O'Neal" def test_valid_name_with_period(self) -> None: """Test name with period passes validation.""" result = PlayerSearchInput(search_term="J.R. Smith") assert result.search_term == "J.R. Smith" def test_valid_name_with_hyphen(self) -> None: """Test name with hyphen passes validation.""" result = PlayerSearchInput(search_term="Kareem Abdul-Jabbar") assert result.search_term == "Kareem Abdul-Jabbar" def test_strips_whitespace(self) -> None: """Test that whitespace is stripped.""" result = PlayerSearchInput(search_term=" James ") assert result.search_term == "James" class TestSqlInjectionRejection: """Tests for SQL injection pattern rejection.""" @pytest.mark.parametrize( "malicious_input", [ "'; DROP TABLE NBA;--", "James'; DELETE FROM NBA--", "' OR '1'='1", "James' UNION SELECT * FROM passwords--", "James; SELECT * FROM users", "/*comment*/James", "James*/DROP TABLE/*", "' OR 1=1--", "James' AND 1=1--", "Robert'); DROP TABLE Students;--", ], ) def test_rejects_sql_injection(self, malicious_input: str) -> None: """Test that SQL injection patterns are rejected.""" with pytest.raises(ValueError) as exc_info: PlayerSearchInput(search_term=malicious_input) # Should mention invalid characters assert "Invalid" in str(exc_info.value) or "invalid" in str(exc_info.value) @pytest.mark.parametrize( "invalid_input", [ "James