from click.testing import CliRunner import click import importlib import llm from llm import cli, hookimpl, plugins def test_register_commands(): importlib.reload(cli) def plugin_names(): return [plugin["name"] for plugin in llm.get_plugins()] assert "HelloWorldPlugin" not in plugin_names() class HelloWorldPlugin: __name__ = "HelloWorldPlugin" @hookimpl def register_commands(self, cli): @cli.command(name="hello-world") def hello_world(): "Print hello world" click.echo("Hello world!") try: plugins.pm.register(HelloWorldPlugin(), name="HelloWorldPlugin") importlib.reload(cli) assert "HelloWorldPlugin" in plugin_names() runner = CliRunner() result = runner.invoke(cli.cli, ["hello-world"]) assert result.exit_code == 0 assert result.output == "Hello world!\n" finally: plugins.pm.unregister(name="HelloWorldPlugin") importlib.reload(cli) assert "HelloWorldPlugin" not in plugin_names()