script_test.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. # mypy: disable-error-code="attr-defined"
  2. import io
  3. import pytest
  4. import subprocess
  5. import typing
  6. import unittest.mock
  7. from pathlib import Path
  8. import cipy
  9. import cipy.script
  10. def mock_run(args, stdout, stderr, check, **kwargs):
  11. return subprocess.CompletedProcess(
  12. args=args,
  13. stdout=None if stdout is None else "",
  14. stderr=None if stderr is None else "",
  15. returncode=0,
  16. )
  17. @pytest.fixture(scope="function", autouse=True)
  18. def disable_subprocess() -> typing.Iterator[None]:
  19. mock = unittest.mock.Mock()
  20. mock.side_effect = mock_run
  21. with unittest.mock.patch("subprocess.run", mock):
  22. yield
  23. def test_node_run_runs_main() -> None:
  24. action = cipy.script.NodeScript(name="example", main=Path("/dev/null"))
  25. action.run(cipy.Context())
  26. assert subprocess.run.call_args_list[0][0] == (["node", "/dev/null"],)
  27. def test_node_cleanup_noop_without_post() -> None:
  28. action = cipy.script.NodeScript(name="example", main=Path("/dev/null"))
  29. action.cleanup(cipy.Context())
  30. subprocess.run.assert_not_called()
  31. def test_node_cleanup_runs_post() -> None:
  32. action = cipy.script.NodeScript(
  33. name="example", main=Path("/dev/null"), post=Path("/dev/zero")
  34. )
  35. action.cleanup(cipy.Context())
  36. assert subprocess.run.call_args_list[0].args == (["node", "/dev/zero"],)