87 lines
3.0 KiB
Python
87 lines
3.0 KiB
Python
"""Test analytics cache invalidation on meeting completion.
|
|
|
|
Tests cover:
|
|
- Meeting completion triggers analytics cache invalidation
|
|
- Correct workspace_id is passed to invalidate_cache
|
|
- Invalidation is logged
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from unittest.mock import MagicMock
|
|
from uuid import uuid4
|
|
|
|
from noteflow.domain.entities import Meeting
|
|
from noteflow.domain.identity import DEFAULT_WORKSPACE_ID
|
|
from noteflow.domain.value_objects import MeetingId, MeetingState
|
|
from noteflow.grpc.mixins.meeting._post_processing import (
|
|
_complete_meeting, # type: ignore[attr-defined]
|
|
)
|
|
|
|
|
|
class TestCompleteMeetingAnalyticsInvalidation:
|
|
"""Tests for analytics cache invalidation on meeting completion."""
|
|
|
|
def test_complete_meeting_invalidates_analytics_cache(self) -> None:
|
|
"""_complete_meeting invalidates analytics cache when meeting completes."""
|
|
# Arrange
|
|
meeting_id = MeetingId(uuid4())
|
|
meeting_id_str = str(meeting_id)
|
|
meeting = Meeting.create(title="Test Meeting")
|
|
meeting.id = meeting_id
|
|
meeting.start_recording()
|
|
meeting.begin_stopping()
|
|
meeting.stop_recording()
|
|
|
|
# Mock analytics service
|
|
analytics_service = MagicMock()
|
|
analytics_service.invalidate_cache = MagicMock()
|
|
|
|
workspace_id = DEFAULT_WORKSPACE_ID
|
|
|
|
# Act
|
|
_complete_meeting(meeting, meeting_id_str, analytics_service, workspace_id)
|
|
|
|
# Assert
|
|
assert meeting.state == MeetingState.COMPLETED, "Meeting should be in COMPLETED state"
|
|
analytics_service.invalidate_cache.assert_called_once_with(workspace_id)
|
|
|
|
def test_complete_meeting_with_none_analytics_service(self) -> None:
|
|
"""_complete_meeting handles None analytics_service gracefully."""
|
|
# Arrange
|
|
meeting_id = MeetingId(uuid4())
|
|
meeting_id_str = str(meeting_id)
|
|
meeting = Meeting.create(title="Test Meeting")
|
|
meeting.id = meeting_id
|
|
meeting.start_recording()
|
|
meeting.begin_stopping()
|
|
meeting.stop_recording()
|
|
|
|
workspace_id = DEFAULT_WORKSPACE_ID
|
|
|
|
# Act - should not raise
|
|
_complete_meeting(meeting, meeting_id_str, None, workspace_id)
|
|
|
|
# Assert
|
|
assert meeting.state == MeetingState.COMPLETED, "Meeting should be in COMPLETED state"
|
|
|
|
def test_complete_meeting_passes_correct_workspace_id(self) -> None:
|
|
"""_complete_meeting passes correct workspace_id to invalidate_cache."""
|
|
# Arrange
|
|
meeting_id = MeetingId(uuid4())
|
|
meeting_id_str = str(meeting_id)
|
|
meeting = Meeting.create(title="Test Meeting")
|
|
meeting.id = meeting_id
|
|
meeting.start_recording()
|
|
meeting.begin_stopping()
|
|
meeting.stop_recording()
|
|
|
|
analytics_service = MagicMock()
|
|
workspace_id = uuid4()
|
|
|
|
# Act
|
|
_complete_meeting(meeting, meeting_id_str, analytics_service, workspace_id)
|
|
|
|
# Assert
|
|
analytics_service.invalidate_cache.assert_called_once_with(workspace_id)
|