100 lines
2.1 KiB
Python
100 lines
2.1 KiB
Python
import uuid
|
|
|
|
import pytest
|
|
from pydantic import ValidationError
|
|
|
|
from control_backend.schemas.program import (
|
|
BasicNorm,
|
|
Goal,
|
|
KeywordBelief,
|
|
Phase,
|
|
Plan,
|
|
Program,
|
|
Trigger,
|
|
)
|
|
|
|
|
|
def base_norm() -> BasicNorm:
|
|
return BasicNorm(
|
|
id=uuid.uuid4(),
|
|
name="testNormName",
|
|
norm="testNormNorm",
|
|
critical=False,
|
|
)
|
|
|
|
|
|
def base_goal() -> Goal:
|
|
return Goal(
|
|
id=uuid.uuid4(),
|
|
name="testGoalName",
|
|
plan=Plan(
|
|
id=uuid.uuid4(),
|
|
name="testGoalPlanName",
|
|
steps=[],
|
|
),
|
|
can_fail=False,
|
|
)
|
|
|
|
|
|
def base_trigger() -> Trigger:
|
|
return Trigger(
|
|
id=uuid.uuid4(),
|
|
name="testTriggerName",
|
|
condition=KeywordBelief(
|
|
id=uuid.uuid4(),
|
|
name="testTriggerKeywordBeliefTriggerName",
|
|
keyword="Keyword",
|
|
),
|
|
plan=Plan(
|
|
id=uuid.uuid4(),
|
|
name="testTriggerPlanName",
|
|
steps=[],
|
|
),
|
|
)
|
|
|
|
|
|
def base_phase() -> Phase:
|
|
return Phase(
|
|
id=uuid.uuid4(),
|
|
norms=[base_norm()],
|
|
goals=[base_goal()],
|
|
triggers=[base_trigger()],
|
|
)
|
|
|
|
|
|
def base_program() -> Program:
|
|
return Program(phases=[base_phase()])
|
|
|
|
|
|
def invalid_program() -> dict:
|
|
# wrong types inside phases list (not Phase objects)
|
|
return {
|
|
"phases": [
|
|
{"id": uuid.uuid4()}, # incomplete
|
|
{"not_a_phase": True},
|
|
]
|
|
}
|
|
|
|
|
|
def test_valid_program():
|
|
program = base_program()
|
|
validated = Program.model_validate(program)
|
|
assert isinstance(validated, Program)
|
|
assert validated.phases[0].norms[0].norm == "testNormNorm"
|
|
|
|
|
|
def test_valid_deepprogram():
|
|
program = base_program()
|
|
validated = Program.model_validate(program)
|
|
# validate nested components directly
|
|
phase = validated.phases[0]
|
|
assert isinstance(phase.goals[0], Goal)
|
|
assert isinstance(phase.triggers[0], Trigger)
|
|
assert isinstance(phase.norms[0], BasicNorm)
|
|
|
|
|
|
def test_invalid_program():
|
|
bad = invalid_program()
|
|
with pytest.raises(ValidationError):
|
|
Program.model_validate(bad)
|