74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
import unittest
|
|
|
|
from javis.providers.base import ChatMessage
|
|
from javis.security.privacy import CloudPolicy, PrivacyRouter
|
|
|
|
|
|
class PrivacyRouterTests(unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
self.router = PrivacyRouter()
|
|
|
|
def test_general_technical_question_is_allowed(self) -> None:
|
|
self.assertEqual(
|
|
self.router.classify("Wie funktioniert SQLite in Python?").policy,
|
|
CloudPolicy.ALLOWED,
|
|
)
|
|
|
|
def test_personal_information_requires_approval(self) -> None:
|
|
self.assertEqual(
|
|
self.router.classify("Ich möchte meinen Alltag besser planen.").policy,
|
|
CloudPolicy.ASK,
|
|
)
|
|
|
|
def test_family_information_requires_approval(self) -> None:
|
|
self.assertEqual(
|
|
self.router.classify("Meine Frau hat morgen einen Termin.").policy,
|
|
CloudPolicy.ASK,
|
|
)
|
|
|
|
def test_secret_pattern_is_never(self) -> None:
|
|
decision = self.router.classify("Mein API-Key ist AIza" + "x" * 25)
|
|
self.assertEqual(decision.policy, CloudPolicy.NEVER)
|
|
|
|
def test_financial_and_health_information_are_never(self) -> None:
|
|
self.assertEqual(
|
|
self.router.classify("Meine IBAN ist ein Geheimnis.").policy,
|
|
CloudPolicy.NEVER,
|
|
)
|
|
self.assertEqual(
|
|
self.router.classify("Meine Diagnose soll ausgewertet werden.").policy,
|
|
CloudPolicy.NEVER,
|
|
)
|
|
|
|
def test_unknown_content_is_conservatively_ask(self) -> None:
|
|
self.assertEqual(
|
|
self.router.classify("Erkläre das bitte genauer.").policy,
|
|
CloudPolicy.ASK,
|
|
)
|
|
|
|
def test_explicit_cloud_request_cannot_override_never(self) -> None:
|
|
decision = self.router.classify(
|
|
"Sende mein Passwort an die Cloud.",
|
|
cloud_requested=True,
|
|
)
|
|
self.assertEqual(decision.policy, CloudPolicy.NEVER)
|
|
|
|
def test_minimal_context_excludes_sensitive_history(self) -> None:
|
|
messages = [
|
|
ChatMessage("user", "Meine Diagnose ist privat."),
|
|
ChatMessage("assistant", "Das bleibt lokal."),
|
|
ChatMessage("user", "Wie funktioniert SQLite?"),
|
|
]
|
|
selected = self.router.minimal_context(
|
|
messages,
|
|
current_policy=CloudPolicy.ALLOWED,
|
|
approved=False,
|
|
max_chars=1_000,
|
|
max_messages=6,
|
|
)
|
|
self.assertEqual(selected, [ChatMessage("user", "Wie funktioniert SQLite?")])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|