"""Tests for zsh completion.""" import subprocess from flow.commands.completion import complete def test_complete_top_level(): result = complete(["flow", ""], 1) assert "dotfiles" in result assert "packages" in result assert "setup" in result assert "remote" in result assert "dev" in result assert "projects" in result def test_complete_top_level_prefix(): result = complete(["flow", "do"], 1) assert result == ["dotfiles"] def test_complete_dotfiles_subcommands(): result = complete(["flow", "dotfiles", ""], 2) assert "link" in result assert "unlink" in result assert "status" in result assert "edit" in result assert "repos" in result # Removed commands should not appear assert "sync" not in result assert "relink" not in result assert "undo" not in result assert "clean" not in result assert "modules" not in result def test_complete_dotfiles_repos_subcommands(): result = complete(["flow", "dotfiles", "repos", ""], 3) assert "list" in result assert "status" in result assert "pull" in result assert "push" in result def test_complete_dotfiles_repos_pull_flags(): result = complete(["flow", "dotfiles", "repos", "pull", "--"], 4) assert "--repo" in result assert "--dry-run" in result def test_complete_dotfiles_edit_packages(): result = complete(["flow", "dotfiles", "edit", "--"], 3) assert "--no-commit" in result def test_complete_dotfiles_link_flags(): result = complete(["flow", "dotfiles", "link", "--"], 3) assert "--profile" in result assert "--dry-run" in result def test_complete_unknown_command(): result = complete(["flow", "unknown", ""], 2) assert result == [] def test_complete_packages_subcommands(): result = complete(["flow", "packages", ""], 2) assert "install" in result assert "remove" in result assert "list" in result def test_complete_dev_attach_returns_empty_on_timeout(monkeypatch): class FakeRuntime: def __init__(self, runner, *, mode="auto"): self.runner = runner def ps(self, **kwargs): assert kwargs["timeout"] == 1.0 raise subprocess.TimeoutExpired("docker ps", kwargs["timeout"]) monkeypatch.setattr("flow.commands.completion.ContainerRuntime", FakeRuntime) result = complete(["flow", "dev", "attach", ""], 3) assert result == []