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