"""Unit tests for the tasks.""" from unittest.mock import patch import pytest from activity_detector.flows.spike_detector.notifications import SpikedTrack from activity_detector.flows.spike_detector.notifications import SpikeNotification TRENDING_TRACKS_VARS = [ 'subaccount_name', 'track_name', 'artist_names', 'store', 'isrc', 'release_date', 'image_url', 'num_streams', 'num_streams_avg', 'percent_above_average', 'recent_playlist_placements'] @pytest.yield_fixture def mock_ows(): """Yield executor context.""" p = ( 'activity_detector.flows.spike_detector.' 'notifications.ows_notifications') with patch(p) as m: yield m def test_spike_notification_send_label(mock_ows): """Test send method.""" date = '2018-07-02' release_date = '1990-04-11' label_id = 10 label_name = 'ln' subaccount_name = 'sn' spiked_tracks = [ SpikedTrack( 1, label_name, 'tn', 'an', 'isrc1', release_date, 100, 4, 500, 'iu', 'spotify', [], subaccount_name=subaccount_name), SpikedTrack( 2, label_name, 'tn', 'an', 'isrc2', release_date, 100, 4, 500, 'iu', 'spotify', [], subaccount_name=subaccount_name), SpikedTrack( 2, label_name, 'tn', 'an', 'isrc3', release_date, 100, 4, 500, 'iu', 'spotify', [], subaccount_name=subaccount_name), SpikedTrack( 3, label_name, 'tn', 'an', 'isrc4', release_date, 100, 4, 500, 'iu', 'spotify', [], subaccount_name=subaccount_name), ] SpikeNotification(date, label_id, spiked_tracks, label_name).send() assert mock_ows.create_notification.call_count == 1 payload, *_ = mock_ows.create_notification.call_args[0] assert payload['payload']['account_type'] == 'label' assert payload['payload']['subaccount_name'] is None for track in payload['payload']['trending_tracks']: assert track['subaccount_name'] is not None # ensure all keys are in trending tracks payload for key in TRENDING_TRACKS_VARS: assert key in track def test_spike_notification_send_subaccount(mock_ows): """Test send method.""" date = '2018-07-02' release_date = '1990-04-11' label_id = 10 label_name = 'ln' subaccount_name = 'sn' spiked_tracks = [ SpikedTrack( 1, label_name, 'tn', 'an', 'isrc1', release_date, 100, 4, 500, 'iu', 'spotify', [], subaccount_id=1, subaccount_name=subaccount_name), SpikedTrack( 2, label_name, 'tn', 'an', 'isrc2', release_date, 100, 4, 500, 'iu', 'spotify', [], subaccount_id=1, subaccount_name=subaccount_name), SpikedTrack( 2, label_name, 'tn', 'an', 'isrc3', release_date, 100, 4, 500, 'iu', 'spotify', [], subaccount_id=1, subaccount_name=subaccount_name), SpikedTrack( 3, label_name, 'tn', 'an', 'isrc4', release_date, 100, 4, 500, 'iu', 'spotify', [], subaccount_id=1, subaccount_name=subaccount_name), ] SpikeNotification( date, label_id, spiked_tracks, label_name, subaccount_name, 'subaccount').send() assert mock_ows.create_notification.call_count == 1 payload, *_ = mock_ows.create_notification.call_args[0] assert payload['payload']['account_type'] == 'subaccount' assert payload['payload']['label_name'] is None # ensure all keys are in trending tracks payload for track in payload['payload']['trending_tracks']: for key in TRENDING_TRACKS_VARS: assert key in track def test_spike_notification_empty_spiked_tracks(mock_ows): """Test send method.""" date = '2018-07-02' label_id = 10 spiked_tracks = [] SpikeNotification(date, label_id, spiked_tracks, 'ln').send() assert mock_ows.create_notification.call_count == 0