Files
noteflow/tests/grpc/test_post_processing_analytics.py
Travis Vasceannie 2641a9fc03
Some checks failed
CI / test-python (push) Failing after 17m22s
CI / test-rust (push) Has been cancelled
CI / test-typescript (push) Has been cancelled
optimization
2026-01-25 01:40:14 +00:00

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)