| from omniff.validators.pipeline import ValidationPipeline |
| from omniff.validators.text_validator import TextValidator, ValidationResult |
|
|
|
|
| def _always_pass(output): |
| return ValidationResult(True, 1.0, "pass") |
|
|
|
|
| def _always_fail(output): |
| return ValidationResult(False, 0.0, "fail", "forced failure") |
|
|
|
|
| def test_empty_pipeline(): |
| pipe = ValidationPipeline() |
| result = pipe.run({"text": "hello"}) |
| assert result.passed |
| assert result.results == [] |
|
|
|
|
| def test_single_pass_success(): |
| pipe = ValidationPipeline() |
| pipe.add_pass("length", TextValidator(min_length=1).validate) |
| result = pipe.run({"text": "hello world"}) |
| assert result.passed |
| assert len(result.results) == 1 |
|
|
|
|
| def test_single_pass_failure(): |
| pipe = ValidationPipeline() |
| pipe.add_pass("length", TextValidator(min_length=100).validate, required=True) |
| result = pipe.run({"text": "short"}) |
| assert not result.passed |
| assert result.failed_pass == "length" |
|
|
|
|
| def test_multi_pass_stops_on_required_failure(): |
| pipe = ValidationPipeline() |
| pipe.add_pass("first", _always_fail, required=True) |
| pipe.add_pass("second", _always_pass, required=True) |
| result = pipe.run({}) |
| assert not result.passed |
| assert len(result.results) == 1 |
| assert result.failed_pass == "first" |
|
|
|
|
| def test_optional_failure_continues(): |
| pipe = ValidationPipeline() |
| pipe.add_pass("optional", _always_fail, required=False) |
| pipe.add_pass("required", _always_pass, required=True) |
| result = pipe.run({}) |
| assert result.passed |
| assert len(result.results) == 2 |
|
|
|
|
| def test_pipeline_score(): |
| pipe = ValidationPipeline() |
| pipe.add_pass("a", _always_pass) |
| pipe.add_pass("b", _always_pass) |
| result = pipe.run({}) |
| assert result.score == 1.0 |
|
|
|
|
| def test_pass_count(): |
| pipe = ValidationPipeline() |
| pipe.add_pass("a", _always_pass) |
| pipe.add_pass("b", _always_fail) |
| assert pipe.pass_count == 2 |
|
|