From 34a4fa769833ddc0ee92f53981ec6bea6f8c244c Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Mon, 2 Feb 2026 20:51:01 +0000 Subject: [PATCH] Initial upload: Code Privacy Shield v0.1.0 --- tests/test_redactor.py | 103 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 tests/test_redactor.py diff --git a/tests/test_redactor.py b/tests/test_redactor.py new file mode 100644 index 0000000..f7578b4 --- /dev/null +++ b/tests/test_redactor.py @@ -0,0 +1,103 @@ +import pytest +from code_privacy_shield.redactor import Redactor, RedactionMatch +from code_privacy_shield.patterns import PatternLibrary + + +class TestRedactor: + def setup_method(self): + self.pattern_library = PatternLibrary() + self.redactor = Redactor(self.pattern_library) + + def test_redact_api_key(self): + content = "API_KEY = 'sk-abc123def456ghi789'" + result = self.redactor.redact(content) + assert result.redacted != content + assert len(result.matches) > 0 + + def test_redact_email(self): + content = "CONTACT = 'user@example.com'" + result = self.redactor.redact(content) + assert result.redacted != content + assert len(result.matches) > 0 + + def test_redact_postgresql_connection(self): + content = "DB_URL = 'postgresql://user:pass@localhost:5432/db'" + result = self.redactor.redact(content) + assert result.redacted != content + assert len(result.matches) > 0 + + def test_redact_multiple_matches(self): + content = """ + API_KEY = 'sk-abc123def456ghi789jklmno' + EMAIL = 'test@example.com' + """ + result = self.redactor.redact(content) + assert len(result.matches) >= 2 + + def test_no_matches_returns_original(self): + content = "x = 1 + 2" + result = self.redactor.redact(content) + assert result.redacted == content + assert len(result.matches) == 0 + + def test_get_match_summary(self): + content = "email: test@example.com, api_key: sk-abc123" + result = self.redactor.redact(content) + summary = self.redactor.get_match_summary(result) + assert len(summary) > 0 + + def test_custom_pattern(self): + added = self.redactor.add_custom_pattern( + name="Custom Secret", + pattern=r"(?i)CUSTOM_SECRET\s*=\s*['\"]([^'\"]+)['\"]", + category="custom" + ) + assert added + content = "CUSTOM_SECRET = 'my-secret-value'" + result = self.redactor.redact(content) + assert len(result.matches) > 0 + + def test_invalid_custom_pattern(self): + added = self.redactor.add_custom_pattern( + name="Invalid", + pattern=r"[", # Invalid regex + category="custom" + ) + assert not added + + def test_redaction_replacement_format(self): + content = "password = 'mysecretpassword'" + result = self.redactor.redact(content) + match = result.matches[0] + assert match.replacement != content + assert len(match.replacement) > 0 + + def test_categories_tracked(self): + content = "email: test@example.com" + result = self.redactor.redact(content) + assert "pii" in result.categories + + def test_redact_file_creates_result(self, tmp_path): + test_file = tmp_path / "test.py" + test_file.write_text("api_key = 'sk-abc123def456ghi789jklmno'") + result = self.redactor.redact_file(str(test_file)) + assert len(result.matches) > 0 + assert result.original == "api_key = 'sk-abc123def456ghi789jklmno'" + + def test_redactor_default_replacement(self): + redactor = Redactor() + content = "x = 'sk-abc123def456ghi789jklmno'" + result = redactor.redact(content) + assert len(result.matches) > 0 + match = result.matches[0] + assert len(match.replacement) > 0 + assert match.replacement.startswith("█" * 8) + assert match.replacement.endswith("lmno") + + def test_short_content_replacement(self): + redactor = Redactor() + content = "x = 'abc'" # Short content + result = redactor.redact(content) + if result.matches: + match = result.matches[0] + assert len(match.replacement) > 0