fed8b2eed7
Backend release / release (push) Waiting to run
Bandit Security Scan / bandit_scan (push) Waiting to run
Build and push multi-arch DocsGPT Docker image / build (linux/amd64, ubuntu-latest, amd64) (push) Waiting to run
Build and push multi-arch DocsGPT Docker image / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Waiting to run
Build and push multi-arch DocsGPT Docker image / manifest (push) Blocked by required conditions
Build and push DocsGPT FE Docker image for development / build (linux/amd64, ubuntu-latest, amd64) (push) Waiting to run
Build and push DocsGPT FE Docker image for development / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Waiting to run
Build and push DocsGPT FE Docker image for development / manifest (push) Blocked by required conditions
Python linting / ruff (push) Waiting to run
Run python tests with pytest / Run tests and count coverage (3.12) (push) Waiting to run
React Widget Build / build (push) Waiting to run
82 lines
2.3 KiB
Python
82 lines
2.3 KiB
Python
"""Tests for application.devices.normalizer."""
|
|
|
|
from application.devices.normalizer import normalize_command, normalize_segment
|
|
|
|
|
|
def test_normalize_git_checkout():
|
|
assert normalize_segment("git checkout main -- file.txt") == "git checkout *"
|
|
|
|
|
|
def test_normalize_npm_install():
|
|
assert normalize_segment("npm install foo bar") == "npm install *"
|
|
|
|
|
|
def test_normalize_ls_with_args():
|
|
assert normalize_segment("ls -la /tmp") == "ls *"
|
|
|
|
|
|
def test_normalize_cat_path():
|
|
assert normalize_segment("cat /etc/passwd") == "cat *"
|
|
|
|
|
|
def test_normalize_no_args():
|
|
assert normalize_segment("pwd") == "pwd"
|
|
|
|
|
|
def test_normalize_two_word_no_args():
|
|
# ``git status`` has no additional args; pattern is just ``git status``.
|
|
assert normalize_segment("git status") == "git status"
|
|
|
|
|
|
def test_normalize_empty():
|
|
assert normalize_segment("") == ""
|
|
|
|
|
|
def test_normalize_command_compound_joins_all_segments():
|
|
# All segments normalized and joined; not just the first.
|
|
assert normalize_command("ls -la && rm -rf /tmp") == "ls * && rm *"
|
|
|
|
|
|
def test_normalize_command_compound_distinguishes_tail():
|
|
# Sticky for ``ls /tmp && whoami`` must not match ``ls /tmp && rm /tmp/x``.
|
|
assert normalize_command("ls /tmp && whoami") == "ls * && whoami"
|
|
assert (
|
|
normalize_command("ls /tmp && rm /tmp/x")
|
|
!= normalize_command("ls /tmp && whoami")
|
|
)
|
|
|
|
|
|
def test_normalize_command_single_segment_unchanged():
|
|
# A non-compound command yields just its own pattern (no `` && ``).
|
|
assert normalize_command("ls -la /tmp") == "ls *"
|
|
|
|
|
|
def test_normalize_command_skips_empty_segments():
|
|
# Trailing/empty connector segments are dropped, not joined as blanks.
|
|
assert normalize_command("ls -la && ") == "ls *"
|
|
|
|
|
|
def test_normalize_command_none_when_empty():
|
|
assert normalize_command("") is None
|
|
|
|
|
|
def test_normalize_command_none_when_only_connectors():
|
|
assert normalize_command("&& ;") is None
|
|
|
|
|
|
def test_normalize_quoted_args():
|
|
assert normalize_segment('echo "hello world"') == "echo *"
|
|
|
|
|
|
def test_normalize_docker_run():
|
|
assert normalize_segment("docker run -it nginx") == "docker run *"
|
|
|
|
|
|
def test_normalize_kubectl_apply():
|
|
assert normalize_segment("kubectl apply -f deploy.yaml") == "kubectl apply *"
|
|
|
|
|
|
def test_normalize_known_two_word_minimal():
|
|
# Just ``npm`` with no subcmd.
|
|
assert normalize_segment("npm") == "npm"
|