import logging from itertools import product import allure import pytest from allure import step from assertpy import assert_that from ui_automation_framework.utils import AppConfig from ui_automation_framework.utils import logger as cl from app.src.api.facade import ApiClient from app.src.helpers.api_data_provider import ApiDataProvider log = cl.Logger(logging.DEBUG) api = ApiClient() api.authorize() data_provider = ApiDataProvider(api) market = None playlists = {k: v for k, v in AppConfig.get("hot_hits_playlists_spotify").items()} playlists_with_tracklist_for_parametrization = [] for playlist_id, playlist_name in playlists.items(): tracklist = api.apollo.get_spotify_playlist_tracklist(playlist_id, market, order_by="current_position", limit=50, ignore_response_attaching=True)["body"]["items"] for track in tracklist: if track["isrc"]: start_date, end_date = data_provider.get_track_start_end_dates(track["isrc"], 6, ignore_response_attaching=True) pls = api.apollo.get_spotify_track_playlists(isrc=track["isrc"], keep_zero_streams="true", offset=0, limit=100, order_by=["-current_streams", "-id"], search=playlist_name, streams_market="_gl", start_date=start_date, end_date=end_date, streams_type="priority", recent_adds_only="false") try: pl = next(i for i in pls if i.id == playlist_id) tracks = [[track["isrc"], pl.id, pl.current_position]] playlists_with_tracklist_for_parametrization.extend(product([playlist_id], tracks)) except StopIteration: continue @allure.severity(allure.severity_level.NORMAL) @allure.description("Hot Hits playlist tracklist/Hot Hits info correlation") @allure.link(url="https://data-analytics.atlassian.net/browse/AG-10556", name="AG-10556") @pytest.mark.parametrize("playlist_id, track", playlists_with_tracklist_for_parametrization) def test_hhs_playlist_tracklist_hhs_info_correlation(playlist_id, track): allure.dynamic.title(f"Playlist: {playlist_id}, ISRC: {track[0]}") track_isrc, track_id, track_current_position = track # log.debug(f"track_isrc: {track_isrc}, track_id: {track_id}, track_current_position: {track_current_position}") with step("1. Get Hot Hits info for the track"): hh_playlists_data = api.apollo.get_hot_hits_playlists(isrc=track_isrc, track_id=track_id, offset=0, region="all", order_by="code", include="inactive_markets")["items"] with step("2. Find info for the current playlist"): hh_info = next(i for i in hh_playlists_data if i["playlist_id"] == playlist_id) # log.debug(f"hh_info: {hh_info}") with step('3. Compare "current_position" from track and "position" from HH info'): assert_that(track_current_position).is_equal_to(hh_info["position"])