import datetime import json from collections import namedtuple from apollo_notifications.charts.client import SpotifyChart from apollo_notifications.constants import SPOTIFY_TRACK_PREFIX, SPOTIFY_URL_PREFIX from apollo_push_client import PushClient from tests import factories from apollo_main_db.push_notifications.models import PushMessage, TopicEnum, VendorEnum from config import config from index import process_market from logger import logger Track = namedtuple("Track", ["name", "url", "artist_name", "uri", "isrc"]) def get_formatted_today_yesterday(): today = datetime.date.today() yesterday = today - datetime.timedelta(days=1) return today.strftime("%Y-%m-%d"), yesterday.strftime("%Y-%m-%d") def test_process_added_tracks(db_session, mocked_sqs, redis_client): user_id = "user_id1" code = "us" factories.UserDeviceFactory.create_batch(size=3, user_id=user_id, is_active=True) today, yesterday = get_formatted_today_yesterday() # set up un starred track starred_track = Track( name="track 1", url=f"{SPOTIFY_URL_PREFIX}1", uri=f"{SPOTIFY_TRACK_PREFIX}1", artist_name="artist 1", isrc="USRC11901901", ) factories.StarredContentFactory.create(user_id=user_id, isrc=starred_track.isrc) track = Track( name="track 2", url=f"{SPOTIFY_URL_PREFIX}2", uri=f"{SPOTIFY_TRACK_PREFIX}2", artist_name="artist 2", isrc="USRC11901902", ) factories.SpotifyTrack2Factory.create(id=track.uri.replace(SPOTIFY_TRACK_PREFIX, ""), isrc=track.isrc) factories.SpotifyTrack2Factory.create( id=starred_track.uri.replace(SPOTIFY_TRACK_PREFIX, ""), isrc=starred_track.isrc ) # create charts entities factories.SpotifyChartsFactory.create( position=1, track_url=starred_track.url, artist_name=starred_track.artist_name, track_name=starred_track.name, market=code, date=yesterday, isrc="USRC11901902", ) for i, t in enumerate([starred_track, track], start=1): factories.SpotifyChartsFactory.create( position=i, track_url=t.url, artist_name=t.artist_name, track_name=t.name, market=code, date=today, isrc=t.isrc, ) push_client = PushClient(logger_client=logger, sqs_client=mocked_sqs, config=config) notifications_client = SpotifyChart(config) process_market(notifications_client, push_client, code, [user_id]) push_messages = db_session.query(PushMessage).all() assert len(push_messages) == 1 push = push_messages[0] assert push.track_id == starred_track.url.replace(SPOTIFY_URL_PREFIX, "") assert push.topic == TopicEnum.CHART_ADDITIONS assert push.vendor == VendorEnum.SPOTIFY push_data = json.loads(push.data) assert push_data["position"] == 1 assert push_data["isrc"] == starred_track.isrc