Log audit events before we save them to the DB
This commit is contained in:
		| @@ -31,6 +31,10 @@ class AuditableMixin(object): | ||||
|             event_details=event_details, | ||||
|         ) | ||||
|  | ||||
|         app.logger.info( | ||||
|             "Audit Event {}".format(action), | ||||
|             extra={"audit_event": audit_event.log, "tags": ["audit_event", action]}, | ||||
|         ) | ||||
|         audit_event.save(connection) | ||||
|         return audit_event | ||||
|  | ||||
| @@ -43,29 +47,17 @@ class AuditableMixin(object): | ||||
|     @staticmethod | ||||
|     def audit_insert(mapper, connection, target): | ||||
|         """Listen for the `after_insert` event and create an AuditLog entry""" | ||||
|         event = target.create_audit_event(connection, target, ACTION_CREATE) | ||||
|         app.logger.info( | ||||
|             "Audit Event insert", | ||||
|             extra={"audit_event": event.log, "tags": ["audit_event", "insert"]}, | ||||
|         ) | ||||
|         target.create_audit_event(connection, target, ACTION_CREATE) | ||||
|  | ||||
|     @staticmethod | ||||
|     def audit_delete(mapper, connection, target): | ||||
|         """Listen for the `after_delete` event and create an AuditLog entry""" | ||||
|         event = target.create_audit_event(connection, target, ACTION_DELETE) | ||||
|         app.logger.info( | ||||
|             "Audit Event delete", | ||||
|             extra={"audit_event": event.log, "tags": ["audit_event", "delete"]}, | ||||
|         ) | ||||
|         target.create_audit_event(connection, target, ACTION_DELETE) | ||||
|  | ||||
|     @staticmethod | ||||
|     def audit_update(mapper, connection, target): | ||||
|         if AuditableMixin.get_changes(target): | ||||
|             event = target.create_audit_event(connection, target, ACTION_UPDATE) | ||||
|             app.logger.info( | ||||
|                 "Audit Event update", | ||||
|                 extra={"audit_event": event.log, "tags": ["audit_event", "update"]}, | ||||
|             ) | ||||
|             target.create_audit_event(connection, target, ACTION_UPDATE) | ||||
|  | ||||
|     def get_changes(self): | ||||
|         """ | ||||
|   | ||||
| @@ -4,9 +4,9 @@ from atst.models.mixins.auditable import AuditableMixin | ||||
| from atst.domain.users import Users | ||||
|  | ||||
|  | ||||
| def test_audit_insert(mock_logger): | ||||
| def test_logging_audit_event_on_create(mock_logger): | ||||
|     user = UserFactory.create() | ||||
|     assert "Audit Event insert" in mock_logger.messages | ||||
|     assert "Audit Event create" in mock_logger.messages | ||||
|     assert len(mock_logger.messages) == 1 | ||||
|  | ||||
|     event_log = mock_logger.extras[0]["audit_event"] | ||||
| @@ -15,12 +15,12 @@ def test_audit_insert(mock_logger): | ||||
|     assert event_log["display_name"] == user.full_name | ||||
|     assert event_log["action"] == "create" | ||||
|  | ||||
|     assert "insert" in mock_logger.extras[0]["tags"] | ||||
|     assert "create" in mock_logger.extras[0]["tags"] | ||||
|  | ||||
|  | ||||
| def test_audit_delete(mock_logger): | ||||
| def test_logging_audit_event_on_delete(mock_logger): | ||||
|     user = UserFactory.create() | ||||
|     assert "Audit Event insert" in mock_logger.messages | ||||
|     assert "Audit Event create" in mock_logger.messages | ||||
|  | ||||
|     db.session.delete(user) | ||||
|     db.session.commit() | ||||
| @@ -36,9 +36,9 @@ def test_audit_delete(mock_logger): | ||||
|     assert "delete" in mock_logger.extras[1]["tags"] | ||||
|  | ||||
|  | ||||
| def test_audit_insert(mock_logger): | ||||
| def test_logging_audit_event_on_update(mock_logger): | ||||
|     user = UserFactory.create() | ||||
|     assert "Audit Event insert" in mock_logger.messages | ||||
|     assert "Audit Event create" in mock_logger.messages | ||||
|  | ||||
|     Users.update(user, {"first_name": "Greedo"}) | ||||
|     assert "Audit Event update" in mock_logger.messages | ||||
|   | ||||
		Reference in New Issue
	
	Block a user