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.
114 lines
3.9 KiB
Python
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}>" |