action_test.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import pytest
  2. import unittest.mock
  3. import cipy
  4. import cipy.action
  5. class NoOp(cipy.action.Action):
  6. def run(self, context: cipy.Context) -> cipy.Status:
  7. return cipy.Status.NOT_RUN
  8. def mock_action(*, name: str = "Mock", id: str = "") -> unittest.mock.MagicMock:
  9. rval = unittest.mock.MagicMock(
  10. wraps=NoOp(name=name, id=id), spec=cipy.action.Action
  11. )
  12. rval.name = name
  13. rval.id = id
  14. rval.inputs = cipy.Inputs()
  15. rval.outputs = cipy.Outputs()
  16. return rval
  17. def test_action() -> None:
  18. action = NoOp(name="Stub")
  19. assert action.run(cipy.Context()) is cipy.Status.NOT_RUN
  20. def test_call_proxies_functions() -> None:
  21. action = mock_action()
  22. call = cipy.Call(action)
  23. call.is_enabled(cipy.Status.NOT_RUN, cipy.Context())
  24. action.is_enabled.assert_called_once()
  25. call.run(cipy.Context())
  26. action.run.assert_called_once()
  27. call.cleanup(cipy.Context())
  28. action.cleanup.assert_called_once()
  29. def test_call_can_pass_args() -> None:
  30. class Inputs(cipy.Inputs):
  31. foo: int = cipy.required()
  32. action = mock_action()
  33. action.inputs = Inputs()
  34. call = cipy.Call(action, foo=3)
  35. call.run(cipy.Context())
  36. action.run.assert_called_once()
  37. assert action.inputs.foo == 3