# tests/integration/security/test_input_validation.py """ Input validation tests for the API. Tests SQL injection prevention, parameter validation, and JSON validation. """ import pytest @pytest.mark.integration @pytest.mark.security class TestInputValidation: def test_sql_injection_prevention(self, client, admin_headers): """Test SQL injection prevention in search parameters""" # Try SQL injection in search parameter malicious_search = "'; DROP TABLE products; --" response = client.get( f"/api/v1/admin/products?search={malicious_search}", headers=admin_headers, ) # Should not crash and should return normal response assert response.status_code == 200 # Database should still be intact (no products dropped) def test_parameter_validation(self, client, admin_headers): """Test parameter validation for API endpoints""" # Test invalid pagination parameters response = client.get("/api/v1/admin/products?limit=-1", headers=admin_headers) assert response.status_code == 422 # Validation error response = client.get("/api/v1/admin/products?skip=-1", headers=admin_headers) assert response.status_code == 422 # Validation error def test_json_validation(self, client, admin_headers, test_company): """Test JSON validation for POST requests""" # Test invalid JSON structure response = client.post( "/api/v1/admin/vendors", headers=admin_headers, content="invalid json content", ) assert response.status_code == 422 # JSON decode error # Test missing required fields response = client.post( "/api/v1/admin/vendors", headers=admin_headers, json={"name": "Test Vendor"}, # Missing required company_id, vendor_code ) assert response.status_code == 422 # Validation error