from datetime import datetime, timedelta from apollo_main_db.spotify import SpotifyTrackPlaylistLastWeekHistory from sqlalchemy import func import config from index import process_history_data from tests import factories def test_process_history_data(db_session): """Test process_history_data. """ isrc_count = 3 track_id_per_isrc_count = 3 isrc_copied = 2 days_copied = 3 date_copied = datetime.utcnow().date() - timedelta(days=3) new_days = 2 isrc_list = [f"isrc{i}" for i in range(isrc_count)] track_id_mapping = { isrc: [f"track{j}{i}" for i in range(track_id_per_isrc_count)] for j, isrc in enumerate(isrc_list) } for isrc, track_ids in track_id_mapping.items(): for track_id in track_ids: factories.SpotifyTrack2Factory.create(id=track_id, isrc=isrc) # records to be removed min_date = datetime.utcnow().date() - timedelta(days=config.MAX_HISTORY_INTERVAL) for i in range(10): factories.SpotifyTrackPlaylistLastWeekHistoryFactory.create(date=(min_date - timedelta(days=(i + 1)))) for i in range(days_copied): current_date = date_copied - timedelta(days=i) for j, isrc in enumerate(isrc_list): playlist_id = f"playlist{j}" if j < isrc_copied: factories.SpotifyTrackPlaylistLastWeekHistoryFactory.create( date=current_date, isrc=isrc, playlist_id=playlist_id) for track_id in track_id_mapping[isrc]: factories.SpotifyPlaylistTrackListHistory2Factory.create( track_id=track_id, date=current_date, playlist_id=playlist_id) for date_index in range(1, new_days + 1): current_date = date_copied + timedelta(days=date_index) for i, isrc in enumerate(isrc_list): for j, track_id in enumerate(track_id_mapping[isrc]): factories.SpotifyPlaylistTrackListHistory2Factory.create( track_id=track_id, date=current_date, playlist_id=f"pl{i}{j}") process_history_data() db_records_count = db_session.query(func.count(1)).select_from(SpotifyTrackPlaylistLastWeekHistory).one()[0] assert db_records_count == ( days_copied * isrc_copied + (isrc_count - isrc_copied) + new_days * isrc_count * track_id_per_isrc_count)