-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_audit_service.py
More file actions
56 lines (42 loc) · 2.06 KB
/
test_audit_service.py
File metadata and controls
56 lines (42 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import unittest
from unittest.mock import patch, MagicMock
from services.audit_service import process_audit_question
class TestAuditService(unittest.TestCase):
@patch("services.audit_service.generate_audit_sql")
@patch("services.audit_service.get_connection")
@patch("services.audit_service.summarize_audit_results")
def test_process_audit_question_success(
self, mock_summarize, mock_get_conn, mock_generate_sql
):
# Setup mocks
mock_generate_sql.return_value = "SELECT * FROM write_audit_log LIMIT 5"
mock_conn = MagicMock()
mock_cursor = MagicMock()
mock_get_conn.return_value = mock_conn
mock_conn.cursor.return_value = mock_cursor
# Mock DB results
mock_cursor.description = [("user_email",), ("operation",)]
mock_cursor.fetchall.return_value = [("test@example.com", "insert")]
# Mock Summary Response
mock_response = MagicMock()
mock_response.summary = "Summary of results."
mock_response.visualization = None
mock_summarize.return_value = mock_response
# Execute
result = process_audit_question("Show me inserts")
# Assertions
self.assertEqual(result["sql_query"], "SELECT * FROM write_audit_log LIMIT 5")
self.assertEqual(len(result["results"]), 1)
self.assertEqual(result["results"][0]["user_email"], "test@example.com")
self.assertEqual(result["summary"], "Summary of results.")
mock_generate_sql.assert_called_once()
mock_cursor.execute.assert_called_with("SELECT * FROM write_audit_log LIMIT 5")
mock_summarize.assert_called_once()
@patch("services.audit_service.generate_audit_sql")
def test_process_audit_question_invalid_sql(self, mock_generate_sql):
mock_generate_sql.return_value = "DELETE FROM write_audit_log"
result = process_audit_question("Delete everything")
self.assertIn("Error executing query", result["summary"])
self.assertIn("Only SELECT", result["summary"])
if __name__ == "__main__":
unittest.main()