"""Functional tests for getting subscriptions.""" import json from unittest.mock import patch from owsresponse import status from notifications.constants import header def test_get_user_subscriptions(fixture_client): """Test getting user subscriptions.""" stream_response = { 'results': [ { 'feed_id': 'user_email_notifications:alw_123', 'target_id': 'label_analytics_digest:vendor_123', }, { 'feed_id': 'user_email_notifications:alw_123', 'target_id': 'label_spike_detector:vendor_123', }, ] } class StreamFeed: def following(self, limit=10): return stream_response class StreamClient: def feed(self, feed_id, feed_name): return StreamFeed() stream_client = StreamClient() with patch('notifications.models.stream.stream_client', new=stream_client): url = '/user/subscriptions' headers = {header.ORCHARD_USER_ID: 'alw:123'} result = fixture_client.get(url, headers=headers) assert result.status_code == status.OK assert json.loads(result.data.decode('utf-8')) == { 'items': ['label_analytics_digest:vendor_123', 'label_spike_detector:vendor_123'] } def test_get_user_subscriptions_exception(fixture_client): """Test getting user subscriptions when an exception is raised.""" class StreamClient: def feed(self, feed_id, feed_name): raise Exception('error') stream_client = StreamClient() with patch('notifications.models.stream.stream_client', new=stream_client): url = '/user/subscriptions' headers = {header.ORCHARD_USER_ID: 'alw:123'} result = fixture_client.get(url, headers=headers) assert result.status_code == status.INTERNAL_ERROR