from tests.support.paths import PROJECT_ROOT import tomllib import unittest import importlib from unittest.mock import patch import pytest @pytest.mark.parametrize("module_name", ["tools.nodes.cli", "tools.models.cli"]) @pytest.mark.parametrize("arguments,code", [([], None), (["--help"], 0), (["unknown"], 2), (["--bad-option"], 2)]) def test_help_and_invalid_arguments_do_not_start_work(module_name, arguments, code, capsys): module = importlib.import_module(module_name) with patch("sys.argv", ["tool", *arguments]), patch.object(module.subprocess, "run") as run: if code is None: module.main() else: with pytest.raises(SystemExit) as error: module.main() assert error.value.code == code run.assert_not_called() captured = capsys.readouterr() assert "usage:" in captured.out + captured.err class ToolCommandsTests(unittest.TestCase): def test_repository_tools_have_uv_commands(self): project = tomllib.loads( (PROJECT_ROOT / "pyproject.toml").read_text(encoding="utf-8") )["project"] self.assertEqual( project["scripts"], { "pack": "tools.pack:main", "node-group": "tools.nodes.cli:main", "model": "tools.models.cli:main", "docs": "tools.docs:main", }, ) if __name__ == "__main__": unittest.main()