diff --git a/atst/models/audit_event.py b/atst/models/audit_event.py index 0e60dcdc..dd5f94a2 100644 --- a/atst/models/audit_event.py +++ b/atst/models/audit_event.py @@ -1,5 +1,5 @@ from sqlalchemy import String, Column, ForeignKey, inspect -from sqlalchemy.dialects.postgresql import UUID, JSON +from sqlalchemy.dialects.postgresql import UUID, JSONB from sqlalchemy.orm import relationship from atst.models import Base, types @@ -20,8 +20,8 @@ class AuditEvent(Base, TimestampsMixin): request_id = Column(UUID(as_uuid=True), ForeignKey("requests.id"), index=True) request = relationship("Request", backref="audit_events") - changed_state = Column(JSON()) - event_details = Column(JSON()) + changed_state = Column(JSONB()) + event_details = Column(JSONB()) resource_type = Column(String(), nullable=False) resource_id = Column(UUID(as_uuid=True), index=True, nullable=False) diff --git a/atst/models/workspace_role.py b/atst/models/workspace_role.py index 9627c58a..b23563a1 100644 --- a/atst/models/workspace_role.py +++ b/atst/models/workspace_role.py @@ -45,19 +45,24 @@ class WorkspaceRole(Base, mixins.TimestampsMixin, mixins.AuditableMixin): @property def history(self): previous_state = mixins.AuditableMixin.get_history(self) - auditable_previous_state = {} + change_set = {} if "role_id" in previous_state: from_role_id = previous_state["role_id"] from_role = db.session.query(Role).filter(Role.id == from_role_id).one() to_role = self.role_displayname - auditable_previous_state["role"] = [from_role.display_name, to_role] + change_set["role"] = [from_role.display_name, to_role] if "status" in previous_state: - auditable_previous_state["status"]= previous_state["status"].value - return auditable_previous_state + from_status = previous_state["status"].value + to_status = self.status.value + change_set["status"] = [from_status, to_status] + return change_set @property def event_details(self): - return {"updated_user": self.user_name, "updated_user_id": str(self.user_id)} + return { + "updated_user_name": self.user_name, + "updated_user_id": str(self.user_id), + } @property def latest_invitation(self): diff --git a/templates/audit_log.html b/templates/audit_log.html index 5e143aa9..5e679dfe 100644 --- a/templates/audit_log.html +++ b/templates/audit_log.html @@ -29,7 +29,7 @@
{% if event.event_details %} - for User {{ event.event_details.updated_user_id }} ({{ event.event_details.updated_user }}) + for User {{ event.event_details.updated_user_id }} ({{ event.event_details.updated_user_name }})
{% endif %} diff --git a/tests/models/test_workspace_role.py b/tests/models/test_workspace_role.py index 6418b72e..476ce09f 100644 --- a/tests/models/test_workspace_role.py +++ b/tests/models/test_workspace_role.py @@ -20,14 +20,15 @@ def test_has_no_history(session): workspace = Workspaces.create(RequestFactory.create(creator=owner)) workspace_role = WorkspaceRoles.add(user, workspace.id, "developer") - audit_events = ( + create_event = ( session.query(AuditEvent) - .filter(AuditEvent.resource_id == workspace_role.id) - .all() + .filter( + AuditEvent.resource_id == workspace_role.id, AuditEvent.action == "create" + ) + .one() ) - create_event = [event for event in audit_events if event.action == "create"] - assert not create_event[0].changed_state + assert not create_event.changed_state def test_has_history(session): @@ -44,7 +45,8 @@ def test_has_history(session): ) changed_events = [event for event in audit_events if event.changed_state] - assert changed_events[0].changed_state["role"] + assert changed_events[0].changed_state["role"][0] + assert changed_events[0].changed_state["role"][1] def test_event_details(): @@ -54,7 +56,7 @@ def test_event_details(): workspace = Workspaces.create(RequestFactory.create(creator=owner)) workspace_role = WorkspaceRoles.add(user, workspace.id, "developer") - assert workspace_role.event_details["updated_user"] == user.displayname + assert workspace_role.event_details["updated_user_name"] == user.displayname assert workspace_role.event_details["updated_user_id"] == str(user.id)