Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion project/app.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from click import command, option, secho, version_option
from click import UsageError, command, option, secho, version_option


@command(
Expand All @@ -22,6 +22,11 @@ def main(name: str = "World"):
Args:
name: the name to be greeted
"""
if len(name) > 100:
raise UsageError("Invalid name: maximum length is 100 characters.")
if any(c < " " for c in name):
raise UsageError("Invalid name: control characters are not allowed.")

secho(f"Hello {name}! πŸ‘‹", fg="green", bold=True)


Expand Down
14 changes: 14 additions & 0 deletions tests/test_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,17 @@ def test_greet():
result = runner.invoke(main, ["--name", "Jules"])
assert result.exit_code == 0
assert "Hello Jules! πŸ‘‹" in result.output


def test_name_too_long():
runner = CliRunner()
result = runner.invoke(main, ["--name", "A" * 101])
assert result.exit_code != 0
assert "maximum length is 100 characters" in result.output


def test_name_control_characters():
runner = CliRunner()
result = runner.invoke(main, ["--name", "Injected\x1b[31mRed\x1b[0m"])
assert result.exit_code != 0
assert "control characters are not allowed" in result.output