Files

179 lines
5.3 KiB
Python

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