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.
This commit is contained in:
2025-02-28 15:06:50 +01:00
parent d442182ed0
commit b8c7d63d91
2 changed files with 145 additions and 8 deletions

View File

@@ -1,10 +1,13 @@
# tests/conftest.py
import pytest
import uuid
from datetime import datetime, timezone
import pytest
from app.models import GiftItem, GiftStatus, GiftPriority, RSVP, RSVPStatus, EventMedia, MediaType, MediaPurpose, \
EventTheme, Guest, GuestStatus, ActivityType, ActivityLog
from app.models.user import User
from app.utils.test_utils import setup_test_db, teardown_test_db
from app.models import GiftItem, GiftStatus, GiftPriority, RSVP, RSVPStatus, EventMedia, MediaType, MediaPurpose, \
EventTheme, Guest, GuestStatus
@pytest.fixture(scope="function")
@@ -139,10 +142,6 @@ def event_theme_fixture(db_session):
db_session.commit()
return event_theme
import uuid
from datetime import datetime, timezone
from app.models.guest import Guest, GuestStatus
@pytest.fixture
def guest_fixture(db_session, mock_user):
@@ -169,4 +168,28 @@ def guest_fixture(db_session, mock_user):
)
db_session.add(guest)
db_session.commit()
return guest
return guest
@pytest.fixture
def activity_log_fixture(db_session, mock_user, guest_fixture):
"""
Fixture to create and return a default ActivityLog entry.
"""
activity_log_entry = ActivityLog(
id=uuid.uuid4(),
activity_type=ActivityType.USER_LOGIN,
description="User successfully logged in.",
event_id=None,
user_id=mock_user.id,
guest_id=None,
target_id=None,
target_type=None,
ip_address="192.168.1.1",
user_agent="Mozilla/5.0",
activity_data={"extra_info": "Login from web app"},
created_at=datetime.now(timezone.utc)
)
db_session.add(activity_log_entry)
db_session.commit()
return activity_log_entry

View File

@@ -0,0 +1,114 @@
# 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}>"