Skip to content

Commit 1bb7822

Browse files
authored
Merge pull request #334 from raballew/004-shell-completion
feat: add jmp completion command for bash/zsh/fish
2 parents 5d885f0 + a17e3c9 commit 1bb7822

File tree

3 files changed

+58
-0
lines changed

3 files changed

+58
-0
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import click
2+
from click.shell_completion import get_completion_class
3+
4+
5+
@click.command("completion")
6+
@click.argument("shell", type=click.Choice(["bash", "zsh", "fish"]))
7+
def completion(shell: str):
8+
"""Generate shell completion script."""
9+
from jumpstarter_cli.jmp import jmp
10+
11+
comp_cls = get_completion_class(shell)
12+
comp = comp_cls(jmp, {}, "jmp", "_JMP_COMPLETE")
13+
click.echo(comp.source())
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from click.testing import CliRunner
2+
3+
from .jmp import jmp
4+
5+
6+
def test_completion_bash():
7+
runner = CliRunner()
8+
result = runner.invoke(jmp, ["completion", "bash"])
9+
assert result.exit_code == 0
10+
assert len(result.output) > 0
11+
assert "complete" in result.output.lower()
12+
assert "jmp" in result.output.lower()
13+
14+
15+
def test_completion_zsh():
16+
runner = CliRunner()
17+
result = runner.invoke(jmp, ["completion", "zsh"])
18+
assert result.exit_code == 0
19+
assert len(result.output) > 0
20+
assert "compdef" in result.output.lower()
21+
22+
23+
def test_completion_fish():
24+
runner = CliRunner()
25+
result = runner.invoke(jmp, ["completion", "fish"])
26+
assert result.exit_code == 0
27+
assert len(result.output) > 0
28+
assert "complete" in result.output.lower()
29+
assert "--command jmp" in result.output.lower()
30+
31+
32+
def test_completion_no_args():
33+
runner = CliRunner()
34+
result = runner.invoke(jmp, ["completion"])
35+
assert result.exit_code == 2
36+
assert "Missing argument" in result.output or "bash" in result.output
37+
38+
39+
def test_completion_unsupported_shell():
40+
runner = CliRunner()
41+
result = runner.invoke(jmp, ["completion", "powershell"])
42+
assert result.exit_code == 2
43+
assert "Invalid value" in result.output or "powershell" in result.output

python/packages/jumpstarter-cli/jumpstarter_cli/jmp.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from jumpstarter_cli_driver import driver
77

88
from .auth import auth
9+
from .completion import completion
910
from .config import config
1011
from .create import create
1112
from .delete import delete
@@ -23,6 +24,7 @@ def jmp():
2324

2425

2526
jmp.add_command(auth)
27+
jmp.add_command(completion)
2628
jmp.add_command(create)
2729
jmp.add_command(delete)
2830
jmp.add_command(update)

0 commit comments

Comments
 (0)