diff --git a/tests/test_error_classifier.py b/tests/test_error_classifier.py new file mode 100644 index 000000000..c36eb5474 --- /dev/null +++ b/tests/test_error_classifier.py @@ -0,0 +1,55 @@ +""" +Tests for error classification (#752). +""" + +import pytest +from tools.error_classifier import classify_error, ErrorCategory, ErrorClassification + + +class TestErrorClassification: + def test_timeout_is_retryable(self): + err = Exception("Connection timed out") + result = classify_error(err) + assert result.category == ErrorCategory.RETRYABLE + assert result.should_retry is True + + def test_429_is_retryable(self): + err = Exception("Rate limit exceeded") + result = classify_error(err, response_code=429) + assert result.category == ErrorCategory.RETRYABLE + assert result.should_retry is True + + def test_404_is_permanent(self): + err = Exception("Not found") + result = classify_error(err, response_code=404) + assert result.category == ErrorCategory.PERMANENT + assert result.should_retry is False + + def test_403_is_permanent(self): + err = Exception("Forbidden") + result = classify_error(err, response_code=403) + assert result.category == ErrorCategory.PERMANENT + assert result.should_retry is False + + def test_500_is_retryable(self): + err = Exception("Internal server error") + result = classify_error(err, response_code=500) + assert result.category == ErrorCategory.RETRYABLE + assert result.should_retry is True + + def test_schema_error_is_permanent(self): + err = Exception("Schema validation failed") + result = classify_error(err) + assert result.category == ErrorCategory.PERMANENT + assert result.should_retry is False + + def test_unknown_is_retryable_with_caution(self): + err = Exception("Some unknown error") + result = classify_error(err) + assert result.category == ErrorCategory.UNKNOWN + assert result.should_retry is True + assert result.max_retries == 1 + + +if __name__ == "__main__": + pytest.main([__file__])