Files
flow/tests/test_completion.py
2026-05-13 23:02:47 +03:00

87 lines
2.4 KiB
Python

"""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 == []