117 lines
4.1 KiB
Python
117 lines
4.1 KiB
Python
"""Tests for the ambiguity detection module."""
|
|
|
|
import pytest
|
|
from nl2gherkin.nlp.ambiguity import AmbiguityDetector, AmbiguityType
|
|
|
|
|
|
class TestAmbiguityDetector:
|
|
"""Test cases for AmbiguityDetector."""
|
|
|
|
@pytest.fixture
|
|
def detector(self):
|
|
"""Create a detector instance."""
|
|
return AmbiguityDetector()
|
|
|
|
def test_pronoun_detection(self, detector):
|
|
"""Test detection of ambiguous pronouns."""
|
|
text = "When the user clicks it, the system should show the results"
|
|
result = detector.detect(text)
|
|
|
|
assert len(result) >= 0
|
|
|
|
def test_vague_quantifier_some(self, detector):
|
|
"""Test detection of 'some' quantifier."""
|
|
text = "The system should handle some requests efficiently"
|
|
result = detector.detect(text)
|
|
|
|
quantifier_types = [w.type for w in result]
|
|
assert AmbiguityType.VAGUE_QUANTIFIER in quantifier_types
|
|
|
|
def test_vague_quantifier_many(self, detector):
|
|
"""Test detection of 'many' quantifier."""
|
|
text = "Many users should be able to login"
|
|
result = detector.detect(text)
|
|
|
|
quantifier_types = [w.type for w in result]
|
|
assert AmbiguityType.VAGUE_QUANTIFIER in quantifier_types
|
|
|
|
def test_vague_quantifier_few(self, detector):
|
|
"""Test detection of 'few' quantifier."""
|
|
text = "Only few options are available"
|
|
result = detector.detect(text)
|
|
|
|
quantifier_types = [w.type for w in result]
|
|
assert AmbiguityType.VAGUE_QUANTIFIER in quantifier_types
|
|
|
|
def test_temporal_ambiguity(self, detector):
|
|
"""Test detection of temporal ambiguities."""
|
|
text = "The task should be completed soon"
|
|
result = detector.detect(text)
|
|
|
|
temporal_types = [w.type for w in result]
|
|
assert AmbiguityType.TEMPORAL in temporal_types
|
|
|
|
def test_missing_condition(self, detector):
|
|
"""Test detection of missing conditions."""
|
|
text = "The user must login to access the dashboard"
|
|
result = detector.detect(text)
|
|
|
|
condition_types = [w.type for w in result]
|
|
assert AmbiguityType.MISSING_CONDITION in condition_types
|
|
|
|
def test_passive_voice_detection(self, detector):
|
|
"""Test detection of passive voice."""
|
|
text = "The file was created by the system"
|
|
result = detector.detect(text)
|
|
|
|
voice_types = [w.type for w in result]
|
|
assert AmbiguityType.PASSIVE_VOICE in voice_types
|
|
|
|
def test_clear_requirement_no_warnings(self, detector):
|
|
"""Test that clear requirements have few warnings."""
|
|
text = "When the user clicks the submit button, the form data is validated on the server"
|
|
result = detector.detect(text)
|
|
|
|
assert len(result) <= 2
|
|
|
|
def test_warning_has_suggestion(self, detector):
|
|
"""Test that warnings include suggestions."""
|
|
text = "Some data should be processed"
|
|
result = detector.detect(text)
|
|
|
|
if result:
|
|
assert any(w.suggestion is not None for w in result)
|
|
|
|
def test_warning_severity_levels(self, detector):
|
|
"""Test that warnings have severity levels."""
|
|
text = "The report was generated"
|
|
result = detector.detect(text)
|
|
|
|
for warning in result:
|
|
assert warning.severity in ["low", "medium", "high"]
|
|
|
|
def test_to_dict_method(self, detector):
|
|
"""Test that warnings can be converted to dict."""
|
|
text = "It should work"
|
|
result = detector.detect(text)
|
|
|
|
if result:
|
|
warning_dict = result[0].to_dict()
|
|
assert "type" in warning_dict
|
|
assert "message" in warning_dict
|
|
assert "suggestion" in warning_dict
|
|
|
|
def test_multiple_ambiguities(self, detector):
|
|
"""Test detection of multiple ambiguities in one text."""
|
|
text = "When it happens, some users might see many results eventually"
|
|
result = detector.detect(text)
|
|
|
|
assert len(result) >= 2
|
|
|
|
def test_empty_text(self, detector):
|
|
"""Test handling of empty text."""
|
|
result = detector.detect("")
|
|
|
|
assert isinstance(result, list)
|
|
assert len(result) == 0
|