clan-cli: write some unit tests
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
# !/usr/bin/env python3
|
# !/usr/bin/env python3
|
||||||
import argparse
|
import argparse
|
||||||
|
import sys
|
||||||
|
|
||||||
import argcomplete
|
import argcomplete
|
||||||
|
|
||||||
@@ -16,4 +17,5 @@ def clan() -> None:
|
|||||||
clan_admin.make_parser(parser_admin)
|
clan_admin.make_parser(parser_admin)
|
||||||
argcomplete.autocomplete(parser)
|
argcomplete.autocomplete(parser)
|
||||||
parser.parse_args()
|
parser.parse_args()
|
||||||
|
if len(sys.argv) == 1:
|
||||||
|
parser.print_help()
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import argparse
|
import argparse
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
def create(args: argparse.Namespace) -> None:
|
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
|
# TODO add some cli options to change certain options without relying on a text editor
|
||||||
clan_flake = f"{args.folder}/flake.nix"
|
clan_flake = f"{args.folder}/flake.nix"
|
||||||
if os.path.isfile(clan_flake):
|
if os.path.isfile(clan_flake):
|
||||||
@@ -30,11 +31,11 @@ def edit(args: argparse.Namespace) -> None:
|
|||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
print(
|
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?
|
# TODO get clients from zerotier cli?
|
||||||
if args.host:
|
if args.host:
|
||||||
print(f"would redeploy {args.host} from clan {args.folder}")
|
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}")
|
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 /)
|
# TODO get clan folder & hosts from somwhere (maybe ~/.config/clan/$name /)
|
||||||
# send some kind of kill signal, then remove the folder
|
# send some kind of kill signal, then remove the folder
|
||||||
if args.yes:
|
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:
|
if args.host:
|
||||||
print(f"would backup {args.host} from clan {args.folder}")
|
print(f"would backup {args.host} from clan {args.folder}")
|
||||||
else:
|
else:
|
||||||
print(f"would backup all hosts from clan {args.folder}")
|
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(
|
subprocess.Popen(
|
||||||
[
|
[
|
||||||
"git",
|
"git",
|
||||||
@@ -119,8 +120,11 @@ def make_parser(parser: argparse.ArgumentParser) -> None:
|
|||||||
parser_git.set_defaults(func=git)
|
parser_git.set_defaults(func=git)
|
||||||
|
|
||||||
|
|
||||||
# entry point if this file is executed directly
|
def clan_admin() -> None: # pragma: no cover
|
||||||
if __name__ == "__main__":
|
|
||||||
parser = argparse.ArgumentParser(description="clan-admin")
|
parser = argparse.ArgumentParser(description="clan-admin")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
args.func(args)
|
args.func(args)
|
||||||
|
|
||||||
|
# entry point if this file is executed directly
|
||||||
|
if __name__ == "__main__": # pragma: no cover
|
||||||
|
clan_admin()
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ let
|
|||||||
mypy
|
mypy
|
||||||
pytest
|
pytest
|
||||||
pytest-cov
|
pytest-cov
|
||||||
|
pytest-subprocess
|
||||||
setuptools
|
setuptools
|
||||||
wheel
|
wheel
|
||||||
;
|
;
|
||||||
|
|||||||
17
pkgs/clan-cli/tests/test_clan_admin.py
Normal file
17
pkgs/clan-cli/tests/test_clan_admin.py
Normal 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
|
||||||
|
|
||||||
@@ -1,16 +1,19 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
import my_tool
|
import pytest
|
||||||
|
|
||||||
|
import clan
|
||||||
|
|
||||||
|
|
||||||
def test_no_args(capsys):
|
def test_no_args(capsys):
|
||||||
my_tool.my_cli()
|
clan.clan()
|
||||||
captured = capsys.readouterr()
|
captured = capsys.readouterr()
|
||||||
assert captured.out.startswith("usage:")
|
assert captured.out.startswith("usage:")
|
||||||
|
|
||||||
|
|
||||||
def test_version(capsys, monkeypatch):
|
def test_help(capsys, monkeypatch):
|
||||||
monkeypatch.setattr(sys, "argv", ["", "--version"])
|
monkeypatch.setattr(sys, "argv", ["", "--help"])
|
||||||
my_tool.my_cli()
|
with pytest.raises(SystemExit):
|
||||||
|
clan.clan()
|
||||||
captured = capsys.readouterr()
|
captured = capsys.readouterr()
|
||||||
assert captured.out.startswith("Version:")
|
assert captured.out.startswith("usage:")
|
||||||
|
|||||||
Reference in New Issue
Block a user