diff --git a/pkgs/clan-cli/clan.py b/pkgs/clan-cli/clan.py index 7c34a51a..5995e1a7 100755 --- a/pkgs/clan-cli/clan.py +++ b/pkgs/clan-cli/clan.py @@ -1,5 +1,6 @@ # !/usr/bin/env python3 import argparse +import sys import argcomplete @@ -16,4 +17,5 @@ def clan() -> None: clan_admin.make_parser(parser_admin) argcomplete.autocomplete(parser) parser.parse_args() - + if len(sys.argv) == 1: + parser.print_help() diff --git a/pkgs/clan-cli/clan_admin.py b/pkgs/clan-cli/clan_admin.py index 537aa275..bf230ec1 100755 --- a/pkgs/clan-cli/clan_admin.py +++ b/pkgs/clan-cli/clan_admin.py @@ -2,6 +2,7 @@ import argparse import os import subprocess +import sys def create(args: argparse.Namespace) -> None: @@ -18,7 +19,7 @@ def create(args: argparse.Namespace) -> None: ) -def edit(args: argparse.Namespace) -> None: +def edit(args: argparse.Namespace) -> None: # pragma: no cover # TODO add some cli options to change certain options without relying on a text editor clan_flake = f"{args.folder}/flake.nix" if os.path.isfile(clan_flake): @@ -30,11 +31,11 @@ def edit(args: argparse.Namespace) -> None: ) else: print( - f"{args.folder} has no flake.nix, so it does not seem to be the clan root folder" + f"{args.folder} has no flake.nix, so it does not seem to be the clan root folder", ) -def rebuild(args: argparse.Namespace) -> None: +def rebuild(args: argparse.Namespace) -> None: # pragma: no cover # TODO get clients from zerotier cli? if args.host: print(f"would redeploy {args.host} from clan {args.folder}") @@ -42,7 +43,7 @@ def rebuild(args: argparse.Namespace) -> None: print(f"would redeploy all hosts from clan {args.folder}") -def destroy(args: argparse.Namespace) -> None: +def destroy(args: argparse.Namespace) -> None: # pragma: no cover # TODO get clan folder & hosts from somwhere (maybe ~/.config/clan/$name /) # send some kind of kill signal, then remove the folder if args.yes: @@ -53,14 +54,14 @@ def destroy(args: argparse.Namespace) -> None: ) -def backup(args: argparse.Namespace) -> None: +def backup(args: argparse.Namespace) -> None: # pragma: no cover if args.host: print(f"would backup {args.host} from clan {args.folder}") else: print(f"would backup all hosts from clan {args.folder}") -def git(args: argparse.Namespace) -> None: +def git(args: argparse.Namespace) -> None: # pragma: no cover subprocess.Popen( [ "git", @@ -119,8 +120,11 @@ def make_parser(parser: argparse.ArgumentParser) -> None: parser_git.set_defaults(func=git) -# entry point if this file is executed directly -if __name__ == "__main__": +def clan_admin() -> None: # pragma: no cover parser = argparse.ArgumentParser(description="clan-admin") args = parser.parse_args() args.func(args) + +# entry point if this file is executed directly +if __name__ == "__main__": # pragma: no cover + clan_admin() diff --git a/pkgs/clan-cli/default.nix b/pkgs/clan-cli/default.nix index db65e551..9c9cd196 100644 --- a/pkgs/clan-cli/default.nix +++ b/pkgs/clan-cli/default.nix @@ -25,6 +25,7 @@ let mypy pytest pytest-cov + pytest-subprocess setuptools wheel ; diff --git a/pkgs/clan-cli/tests/test_clan_admin.py b/pkgs/clan-cli/tests/test_clan_admin.py new file mode 100644 index 00000000..4440242b --- /dev/null +++ b/pkgs/clan-cli/tests/test_clan_admin.py @@ -0,0 +1,17 @@ +import argparse + +import clan_admin + + +def test_make_parser(): + parser = argparse.ArgumentParser() + clan_admin.make_parser(parser) + +# using fp fixture from pytest-subprocess +def test_create(fp): + cmd = ["nix", "flake", "init", "-t", fp.any()] + fp.register(cmd) + args = argparse.Namespace(folder="./my-clan") + clan_admin.create(args) + assert fp.call_count(cmd) == 1 + diff --git a/pkgs/clan-cli/tests/test_cli.py b/pkgs/clan-cli/tests/test_cli.py index 5311f2bd..94d94cce 100644 --- a/pkgs/clan-cli/tests/test_cli.py +++ b/pkgs/clan-cli/tests/test_cli.py @@ -1,16 +1,19 @@ import sys -import my_tool +import pytest + +import clan def test_no_args(capsys): - my_tool.my_cli() + clan.clan() captured = capsys.readouterr() assert captured.out.startswith("usage:") -def test_version(capsys, monkeypatch): - monkeypatch.setattr(sys, "argv", ["", "--version"]) - my_tool.my_cli() +def test_help(capsys, monkeypatch): + monkeypatch.setattr(sys, "argv", ["", "--help"]) + with pytest.raises(SystemExit): + clan.clan() captured = capsys.readouterr() - assert captured.out.startswith("Version:") + assert captured.out.startswith("usage:")