| """ |
| Tests for rule schema validation. |
| """ |
| from app.schemas.rule import RuleCreate, RuleUpdate |
| import traceback |
|
|
|
|
| def test_valid_min_confidence(): |
| r = RuleCreate( |
| name="Min Confidence", |
| operator="min_confidence", |
| configuration={"value": 0.95}, |
| ) |
| assert r.operator == "min_confidence" |
| assert r.configuration["value"] == 0.95 |
| print("TEST 1 PASS: Valid min_confidence rule") |
|
|
|
|
| def test_invalid_min_confidence_value(): |
| try: |
| RuleCreate( |
| name="Bad", |
| operator="min_confidence", |
| configuration={"value": "not-a-number"}, |
| ) |
| assert False, "Should have raised" |
| except Exception as e: |
| assert "numeric" in str(e).lower() |
| print("TEST 2 PASS: Invalid min_confidence rejected") |
|
|
|
|
| def test_min_confidence_out_of_range(): |
| try: |
| RuleCreate( |
| name="Bad", |
| operator="min_confidence", |
| configuration={"value": 1.5}, |
| ) |
| assert False, "Should have raised" |
| except Exception as e: |
| assert "between 0 and 1" in str(e).lower() |
| print("TEST 3 PASS: Out-of-range min_confidence rejected") |
|
|
|
|
| def test_valid_allowed_proposal_types(): |
| r = RuleCreate( |
| name="Types", |
| operator="allowed_proposal_types", |
| configuration={"values": ["CREATE", "UPDATE"]}, |
| ) |
| assert r.configuration["values"] == ["CREATE", "UPDATE"] |
| print("TEST 4 PASS: Valid allowed_proposal_types") |
|
|
|
|
| def test_invalid_allowed_proposal_types(): |
| try: |
| RuleCreate( |
| name="Bad Types", |
| operator="allowed_proposal_types", |
| configuration={"values": "not-a-list"}, |
| ) |
| assert False, "Should have raised" |
| except Exception as e: |
| assert "non-empty" in str(e).lower() |
| print("TEST 5 PASS: Invalid allowed_proposal_types rejected") |
|
|
|
|
| def test_invalid_operator(): |
| try: |
| RuleCreate( |
| name="Bad Op", |
| operator="nonexistent_operator", |
| configuration={}, |
| ) |
| assert False, "Should have raised" |
| except Exception as e: |
| assert "unsupported" in str(e).lower() |
| print("TEST 6 PASS: Invalid operator rejected") |
|
|
|
|
| def test_valid_required_evidence(): |
| r = RuleCreate( |
| name="Evidence", |
| operator="required_evidence", |
| configuration={}, |
| ) |
| assert r.operator == "required_evidence" |
| print("TEST 7 PASS: Valid required_evidence rule") |
|
|
|
|
| def test_update_partial(): |
| r = RuleUpdate(name="Updated Name") |
| assert r.name == "Updated Name" |
| assert r.operator is None |
| print("TEST 8 PASS: Partial update") |
|
|
|
|
| test_valid_min_confidence() |
| test_invalid_min_confidence_value() |
| test_min_confidence_out_of_range() |
| test_valid_allowed_proposal_types() |
| test_invalid_allowed_proposal_types() |
| test_invalid_operator() |
| test_valid_required_evidence() |
| test_update_partial() |
|
|
| print("\n===================================") |
| print("ALL 8 RULE SCHEMA TESTS PASSED") |
| print("===================================") |
|
|