import datetime from collections import namedtuple from logging import getLogger from apollo_notifications.charts.client import AppleChart from apollo_notifications.constants import APPLE_CHART_NAME 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 logger = getLogger() Track = namedtuple("Track", ["name", "id", "artist_name", "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_id" 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) # create charts and chart entities today, yesterday = get_formatted_today_yesterday() factories.AppleMusicChartFactory.create(storefront=market.market_name, chart_name=APPLE_CHART_NAME, date=yesterday) chart = factories.AppleMusicChartFactory.create( storefront=market.market_name, chart_name=APPLE_CHART_NAME, date=today ) # set up un starred song track = Track(name="song 1", id=1, artist_name="artist 1", isrc="USRC11901903") factories.AppleMusicSongFactory.create(id=track.id, isrc=track.isrc) factories.AppleMusicChartSongEntryFactory.create( chart_id=chart.id, position=1, song_id=track.id, artist_name=track.artist_name, name=track.name ) # setup starred songs for i in range(2, 22): starred_track = Track(name=f"song {i}", id=i, artist_name=f"artist {i}", isrc=f"usrc119018{i:02d}") factories.AppleMusicSongFactory.create(id=starred_track.id, isrc=starred_track.isrc) factories.AppleMusicChartSongEntryFactory.create( chart_id=chart.id, position=i, song_id=starred_track.id, artist_name=starred_track.artist_name, name=starred_track.name, ) # mark track as starred factories.StarredContentFactory.create(user_id=user_id, uri=starred_track.id, isrc=starred_track.isrc) push_client = PushClient(logger_client=logger, sqs_client=mocked_sqs, config=config) notifications_client = AppleChart(config) process_market(notifications_client, push_client, code, [user_id]) push_messages = db_session.query(PushMessage).all() assert len(push_messages) == 20 for push in push_messages: assert push.topic == TopicEnum.CHART_ADDITIONS assert push.vendor == VendorEnum.APPLE