import pytest
# Function to classify priority based on severity
def classify_priority(severity: str) -> str:
severity = severity.lower()
if severity == 'critical':
return 'High'
elif severity == 'major':
return 'Medium'
elif severity == 'minor':
return 'Low'
elif severity == 'trivial':
return 'Low'
else:
raise ValueError(f"Unknown severity level: {severity}")
# Sample defects data
sample_defects = [
{'id': 1, 'description': 'App crashes on launch', 'severity': 'Critical', 'priority': 'High'},
{'id': 2, 'description': 'UI alignment issue', 'severity': 'Minor', 'priority': 'Low'},
{'id': 3, 'description': 'Slow response time', 'severity': 'Major', 'priority': 'Medium'},
{'id': 4, 'description': 'Typo in help text', 'severity': 'Trivial', 'priority': 'Low'}
]
@pytest.mark.parametrize('defect', sample_defects)
def test_defect_classification(defect):
severity = defect['severity']
priority = defect['priority']
# Check severity is valid
assert severity in ['Critical', 'Major', 'Minor', 'Trivial'], \
f"Severity '{severity}' is not valid"
# Check priority is valid
assert priority in ['High', 'Medium', 'Low'], \
f"Priority '{priority}' is not valid"
# Check priority matches severity rules
expected_priority = classify_priority(severity)
assert priority == expected_priority, \
f"Priority '{priority}' does not match expected '{expected_priority}' for severity '{severity}'"
This test script uses pytest to automate defect classification verification.
The classify_priority function defines the expected priority for each severity level. This keeps logic separate and clear.
The sample_defects list contains example defects with their severity and priority.
The test test_defect_classification runs for each defect using pytest.mark.parametrize. It asserts that severity and priority values are valid and that priority matches the expected value based on severity.
This approach is simple, clear, and easy to extend with more defects.