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:
@@ -1,10 +1,13 @@
|
|||||||
# tests/conftest.py
|
# tests/conftest.py
|
||||||
import pytest
|
|
||||||
import uuid
|
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.models.user import User
|
||||||
from app.utils.test_utils import setup_test_db, teardown_test_db
|
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")
|
@pytest.fixture(scope="function")
|
||||||
@@ -139,10 +142,6 @@ def event_theme_fixture(db_session):
|
|||||||
db_session.commit()
|
db_session.commit()
|
||||||
return event_theme
|
return event_theme
|
||||||
|
|
||||||
import uuid
|
|
||||||
from datetime import datetime, timezone
|
|
||||||
from app.models.guest import Guest, GuestStatus
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def guest_fixture(db_session, mock_user):
|
def guest_fixture(db_session, mock_user):
|
||||||
@@ -169,4 +168,28 @@ def guest_fixture(db_session, mock_user):
|
|||||||
)
|
)
|
||||||
db_session.add(guest)
|
db_session.add(guest)
|
||||||
db_session.commit()
|
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
|
||||||
|
|||||||
114
backend/tests/models/test_activity_log.py
Normal file
114
backend/tests/models/test_activity_log.py
Normal 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}>"
|
||||||
Reference in New Issue
Block a user