import datetime import json from collections import namedtuple 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 from logger import logger 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_moves_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() yesterday_chart = factories.AppleMusicChartFactory.create( storefront=market.market_name, chart_name=APPLE_CHART_NAME, date=yesterday ) today_chart = factories.AppleMusicChartFactory.create( storefront=market.market_name, chart_name=APPLE_CHART_NAME, date=today ) # set up un starred song song = Track(name="song 1", id=1, artist_name="artist 1", isrc="USRC11901802") factories.AppleMusicSongFactory.create(id=song.id, isrc=song.isrc) factories.StarredContentFactory.create(user_id=user_id, uri=song.id, isrc=song.isrc) factories.AppleMusicChartSongEntryFactory.create( chart_id=yesterday_chart.id, position=1, song_id=song.id, artist_name=song.artist_name, name=song.name ) factories.AppleMusicChartSongEntryFactory.create( chart_id=today_chart.id, position=10, song_id=song.id, artist_name=song.artist_name, name=song.name ) 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) == 1 for push in push_messages: data = json.loads(push.data) assert push.topic == TopicEnum.CHART_MAJOR_MOVES assert push.vendor == VendorEnum.APPLE assert data["change"]