From 32d2f62a0c20a17d0ac382324e9ec308afc9a1cf Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Thu, 29 Jan 2026 12:45:43 +0000 Subject: [PATCH] Add test suite for ShellGen CLI --- app/tests/test_safety.py | 178 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 178 insertions(+) create mode 100644 app/tests/test_safety.py diff --git a/app/tests/test_safety.py b/app/tests/test_safety.py new file mode 100644 index 0000000..c9bdbe5 --- /dev/null +++ b/app/tests/test_safety.py @@ -0,0 +1,178 @@ +"""Tests for safety checker.""" + +import pytest + + +class TestSafetyChecker: + """Tests for SafetyChecker class.""" + + def test_initialization(self): + """Test SafetyChecker initializes correctly.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + assert hasattr(checker, '_dangerous_regexes') + assert hasattr(checker, '_safe_regexes') + + def test_safe_command_ls(self): + """Test 'ls' is recognized as safe.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + is_safe, warning = checker.check("ls -la") + + assert is_safe is True + + def test_safe_command_cat(self): + """Test 'cat' is recognized as safe.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + is_safe, warning = checker.check("cat file.txt") + + assert is_safe is True + + def test_safe_command_git(self): + """Test 'git' commands are safe.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + is_safe, warning = checker.check("git status") + + assert is_safe is True + + def test_dangerous_rm_rf_root(self): + """Test 'rm -rf /' is dangerous.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + is_safe, warning = checker.check("rm -rf /") + + assert is_safe is False + assert "dangerous" in warning.lower() + + def test_dangerous_rm_rf_with_path(self): + """Test 'rm -rf /path' is dangerous.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + is_safe, warning = checker.check("rm -rf /home/user/data") + + assert is_safe is False + + def test_dangerous_dd_command(self): + """Test 'dd' is flagged.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + is_safe, warning = checker.check("dd if=/dev/zero of=/dev/sda") + + assert is_safe is False + + def test_dangerous_mkfs(self): + """Test 'mkfs' is dangerous.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + is_safe, warning = checker.check("mkfs.ext4 /dev/sda1") + + assert is_safe is False + + def test_dangerous_format(self): + """Test 'format' is dangerous.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + is_safe, warning = checker.check("format C:") + + assert is_safe is False + + def test_dangerous_shred(self): + """Test 'shred' is dangerous.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + is_safe, warning = checker.check("shred -f file.txt") + + assert is_safe is False + + def test_dangerous_chmod_777(self): + """Test 'chmod 777' is flagged.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + is_safe, warning = checker.check("chmod 777 /etc") + + assert is_safe is False + + def test_empty_command(self): + """Test empty command returns unsafe.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + is_safe, warning = checker.check("") + + assert is_safe is False + assert "empty" in warning.lower() + + def test_whitespace_only(self): + """Test whitespace-only command returns unsafe.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + is_safe, warning = checker.check(" ") + + assert is_safe is False + + def test_comment_only(self): + """Test comment-only command returns unsafe.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + is_safe, warning = checker.check("# this is a comment") + + assert is_safe is False + + def test_is_safe_method(self): + """Test is_safe quick check method.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + + assert checker.is_safe("ls") is True + assert checker.is_safe("rm -rf /") is False + + def test_is_dangerous_method(self): + """Test is_dangerous quick check method.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + + assert checker.is_dangerous("rm -rf /") is True + assert checker.is_dangerous("ls") is False + + def test_get_risk_level_safe(self): + """Test risk level for safe commands.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + + assert checker.get_risk_level("ls") == "safe" + assert checker.get_risk_level("git status") == "safe" + + def test_get_risk_level_dangerous(self): + """Test risk level for dangerous commands.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + + assert checker.get_risk_level("rm -rf /") == "dangerous" + + def test_get_risk_level_caution(self): + """Test risk level for unclear commands.""" + from shellgen.safety.checker import SafetyChecker + + checker = SafetyChecker() + + risk = checker.get_risk_level("python script.py") + assert risk in ["safe", "caution"]