"""Test GetStream class.""" from unittest.mock import call from unittest.mock import MagicMock from unittest.mock import patch import pytest from stream import exceptions as stream_exceptions from src.models.getstream import GetStream from .data import trending_track_message @patch('src.models.getstream.get_client', return_value=MagicMock()) @patch( 'config.secrets_manager_client.get_cred', side_effect=['key', 'secret', 'region'] ) def test_init(mock_secret_manager, mock_stream_client): """Test initializing GetStream client.""" client = GetStream() assert mock_secret_manager.called assert mock_secret_manager.call_args_list == [ call('STREAM_API_KEY'), call('STREAM_API_SECRET'), call('STREAM_API_REGION') ] mock_stream_client.assert_called_once_with( 'key', 'secret', location='region' ) assert client.client == mock_stream_client.return_value @patch.object(GetStream, '_init_client') def test_add_activity(mock_client): """Test add event to activity feed.""" client = GetStream() client.add_activity({ 'event': {'something': 'happened'}, 'feed_id': 'my-feed-123', 'feed_group': 'notifications' }) assert mock_client.return_value.feed.call_args_list == [ call('notifications', 'my-feed-123') ] assert mock_client.return_value.feed.return_value.add_activity.call_args_list == [ # noqa:E501 call({'something': 'happened'}) ] @patch.object(GetStream, '_init_client') def test_filter_activities(mock_client): """Test filter out already created activities.""" messages = [ trending_track_message(x, 'InsightsProfile', 123) for x in range(0, 5) ] mock_client.return_value.get_activities.return_value = { 'results': [ { 'foreign_id': messages[0]['event']['foreign_id'], 'time': messages[0]['event']['time'] }, { 'foreign_id': messages[3]['event']['foreign_id'], 'time': messages[3]['event']['time'] } ] } client = GetStream() results = client.filter_activities(messages) assert len(results) == 3 assert results[0]['event']['foreign_id'] == 1 assert results[1]['event']['foreign_id'] == 2 assert results[2]['event']['foreign_id'] == 4 @patch.object(GetStream, '_init_client') def test_filter_activities_too_large(mock_client): """Test activity size check.""" messages = [ trending_track_message(x, 'InsightsProfile', 123) for x in range(0, 11) ] client = GetStream() exception = False try: client.filter_activities(messages) except Exception as e: exception = True assert str(e) == 'unexpectedly large batch of activities' assert exception def test_load_secret_failure(): """Test secret value load error.""" client = None with pytest.raises(stream_exceptions.ApiKeyException, match='unable to load STREAM_API_KEY'): client = GetStream() assert client is None