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_moves_tracks(db_session, mocked_sqs, redis_client): user_id = "user_id1" code = "us" market = factories.MarketFactory.create(market_name=code) factories.UserMarketFactory.create(user_id=user_id, market_id=market.market_id) factories.UserDeviceFactory.create_batch(size=3, user_id=user_id, is_active=True) today, yesterday = get_formatted_today_yesterday() # set up un starred track track1 = Track( name="track 1", url=f"{SPOTIFY_URL_PREFIX}1", uri=f"{SPOTIFY_TRACK_PREFIX}1", artist_name="artist 1", isrc="USRC11901901", ) track2 = Track( name="track 2", url=f"{SPOTIFY_URL_PREFIX}2", uri=f"{SPOTIFY_TRACK_PREFIX}2", artist_name="artist 2", isrc="USRC11901901", ) factories.SpotifyTrack2Factory.create(id=track1.uri.replace(SPOTIFY_TRACK_PREFIX, ""), isrc=track1.isrc) factories.SpotifyTrack2Factory.create(id=track2.uri.replace(SPOTIFY_TRACK_PREFIX, ""), isrc=track2.isrc) factories.StarredContentFactory.create(user_id=user_id, isrc=track1.isrc) factories.SpotifyChartsFactory.create( position=20, track_url=track1.url, artist_name=track1.artist_name, track_name=track1.name, market=market.market_name, date=yesterday, isrc=track1.isrc, ) factories.SpotifyChartsFactory.create( position=100, track_url=track2.url, artist_name=track2.artist_name, track_name=track2.name, market=market.market_name, date=yesterday, isrc=track2.isrc, ) factories.SpotifyChartsFactory.create( position=10, track_url=track1.url, artist_name=track1.artist_name, track_name=track1.name, market=market.market_name, date=today, isrc=track1.isrc, ) factories.SpotifyChartsFactory.create( position=90, track_url=track2.url, artist_name=track2.artist_name, track_name=track2.name, market=market.market_name, date=today, isrc=track2.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 for push in push_messages: assert push.track_id == track1.url.replace(SPOTIFY_URL_PREFIX, "") assert push.topic == TopicEnum.CHART_MAJOR_MOVES assert push.vendor == VendorEnum.SPOTIFY push_data = json.loads(push.data) assert push_data["change"] == -10 assert push_data["isrc"] == track1.isrc