clan-cli: write some unit tests

This commit is contained in:
DavHau 2023-07-21 02:01:39 +02:00 committed by Jörg Thalheim
parent a0701bf988
commit 4c4ff01b64
5 changed files with 42 additions and 15 deletions

View File

@ -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()

View File

@ -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()

View File

@ -25,6 +25,7 @@ let
mypy
pytest
pytest-cov
pytest-subprocess
setuptools
wheel
;

View File

@ -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

View File

@ -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:")