Files
eventspace/backend/tests/models/test_activity_log.py
Felipe Cardoso b8c7d63d91 Add ActivityLog fixtures and tests for logging activities
Introduce a new pytest fixture for creating ActivityLog entries. Add comprehensive tests to verify ActivityLog creation and logging functionality, including user, event, and guest activities. Ensure proper test coverage for key methods and representations.
2025-02-28 15:06:50 +01:00

114 lines
3.9 KiB
Python

# tests/models/test_activity_log.py
import uuid
from app.models.activity_log import ActivityLog, ActivityType
def test_create_activity_log(db_session, mock_user):
# Arrange
log_entry = ActivityLog(
id=uuid.uuid4(),
activity_type=ActivityType.EVENT_CREATED,
description="An event was created.",
event_id=uuid.uuid4(),
user_id=mock_user.id,
guest_id=None,
target_id=None,
target_type=None,
ip_address="127.0.0.1",
user_agent="TestBrowser/1.0",
activity_data={"event_name": "Birthday Party", "organizer": "John Doe"}
)
db_session.add(log_entry)
# Act
db_session.commit()
created_log = db_session.query(ActivityLog).filter_by(id=log_entry.id).first()
# Assert
assert created_log is not None
assert created_log.activity_type == ActivityType.EVENT_CREATED
assert created_log.description == "An event was created."
assert created_log.event_id is not None
assert created_log.user_id == mock_user.id
assert created_log.ip_address == "127.0.0.1"
assert created_log.user_agent == "TestBrowser/1.0"
assert created_log.activity_data == {"event_name": "Birthday Party", "organizer": "John Doe"}
def test_log_event_activity(db_session, mock_user):
# Act
event_id = uuid.uuid4()
log_entry = ActivityLog.log_event_activity(
activity_type=ActivityType.EVENT_UPDATED,
event_id=event_id,
user_id=mock_user.id,
description="Event details updated",
ip_address="10.0.0.1",
user_agent="MobileApp/2.1",
updated_fields=["name", "date"]
)
db_session.add(log_entry)
db_session.commit()
# Assert
assert log_entry.activity_type == ActivityType.EVENT_UPDATED
assert log_entry.user_id == mock_user.id
assert log_entry.event_id == event_id
assert log_entry.description == "Event details updated"
assert log_entry.ip_address == "10.0.0.1"
assert log_entry.user_agent == "MobileApp/2.1"
assert log_entry.activity_data == {"updated_fields": ["name", "date"]}
def test_log_user_activity(db_session, mock_user):
# Act
log_entry = ActivityLog.log_user_activity(
activity_type=ActivityType.USER_LOGOUT,
user_id=mock_user.id,
description="User logged out.",
ip_address="192.168.0.1",
user_agent="Chrome/95.0",
extra_data={"session_duration": "2 hours"}
)
db_session.add(log_entry)
db_session.commit()
# Assert
assert log_entry.activity_type == ActivityType.USER_LOGOUT
assert log_entry.description == "User logged out."
assert log_entry.user_id == mock_user.id
assert log_entry.ip_address == "192.168.0.1"
assert log_entry.user_agent == "Chrome/95.0"
assert log_entry.activity_data == {"extra_data": {"session_duration": "2 hours"}}
def test_log_guest_activity(db_session, guest_fixture):
# Act
log_entry = ActivityLog.log_guest_activity(
activity_type=ActivityType.GUEST_RSVP,
guest_id=guest_fixture.id,
event_id=guest_fixture.event_id,
description="Guest RSVP confirmed.",
ip_address="192.168.0.2",
user_agent="iOSApp/3.4",
rsvp_status="confirmed"
)
db_session.add(log_entry)
db_session.commit()
# Assert
assert log_entry.activity_type == ActivityType.GUEST_RSVP
assert log_entry.description == "Guest RSVP confirmed."
assert log_entry.guest_id == guest_fixture.id
assert log_entry.event_id == guest_fixture.event_id
assert log_entry.ip_address == "192.168.0.2"
assert log_entry.user_agent == "iOSApp/3.4"
assert log_entry.activity_data == {"rsvp_status": "confirmed"}
def test_repr_method(activity_log_fixture):
# Act
repr_output = repr(activity_log_fixture)
# Assert
assert repr_output == f"<ActivityLog {activity_log_fixture.activity_type.value} event_id={activity_log_fixture.event_id}>"