import argparse import os import shutil from pathlib import Path from tempfile import TemporaryDirectory import pytest from environment import mock_env from host_group import HostGroup from clan_cli.update import deploy_nixos, register_parser def test_cli() -> None: parser = argparse.ArgumentParser() register_parser(parser) with pytest.raises(SystemExit): parser.parse_args(["--help"]) def test_update(clan_flake: Path, host_group: HostGroup) -> None: assert len(host_group.hosts) == 1 host = host_group.hosts[0] with TemporaryDirectory() as tmpdir: host.meta["flake_uri"] = clan_flake host.meta["flake_path"] = str(Path(tmpdir) / "rsync-target") host.ssh_options["SendEnv"] = "REALPATH" bin = Path(tmpdir).joinpath("bin") bin.mkdir() nixos_rebuild = bin.joinpath("nixos-rebuild") bash = shutil.which("bash") assert bash is not None nixos_rebuild.write_text( f"""#!{bash} exit 0 """ ) nixos_rebuild.chmod(0o755) path = f"{tmpdir}/bin:{os.environ['PATH']}" nix_state_dir = Path(tmpdir).joinpath("nix") nix_state_dir.mkdir() with mock_env(REALPATH=path): deploy_nixos(host_group)