Spaces:
Sleeping
Sleeping
| import unittest | |
| from unittest.mock import MagicMock, patch | |
| from utils.audit import AuditLogger | |
| class TestAuditLogger(unittest.TestCase): | |
| def setUp(self): | |
| self.mock_supabase = MagicMock() | |
| self.logger = AuditLogger(self.mock_supabase) | |
| def test_log_prediction(self): | |
| """Test logging a prediction event.""" | |
| transaction_id = "test_tx_123" | |
| fraud_score = 0.85 | |
| features = {"amount": 100, "type": "TRANSFER"} | |
| self.logger.log_prediction(transaction_id, fraud_score, features) | |
| self.mock_supabase.rpc.assert_called_once() | |
| args, kwargs = self.mock_supabase.rpc.call_args | |
| self.assertEqual(args[0], "log_activity") | |
| payload = args[1] | |
| self.assertEqual(payload['p_action_type'], 'ML_PREDICTION') | |
| self.assertEqual(payload['p_resource_type'], 'transaction') | |
| self.assertEqual(payload['p_resource_id'], transaction_id) | |
| self.assertIn('0.85', payload['p_message']) | |
| self.assertEqual(payload['p_metadata']['fraud_score'], fraud_score) | |
| def test_log_error_handling(self): | |
| """Test that logging errors are caught and do not crash the app.""" | |
| self.mock_supabase.rpc.side_effect = Exception("Connection failed") | |
| # Should not raise exception | |
| try: | |
| self.logger.log_prediction("tx_123", 0.5, {}) | |
| except Exception: | |
| self.fail("AuditLogger raised exception on failure") | |
| if __name__ == '__main__': | |
| unittest.main() | |