import logging import allure import pytest from assertpy import assert_that from dateutil.parser import parse from dateutil.relativedelta import relativedelta from ui_automation_framework.utils import AppConfig from ui_automation_framework.utils import logger as cl from app.src.api.facade import ApiClient log = cl.Logger(logging.DEBUG) api = ApiClient() api.authorize() @allure.severity(allure.severity_level.NORMAL) @allure.title("YouTube verifications - Markets availability") @allure.description("YouTube verifications - Markets availability") @allure.testcase("AG-9940") @pytest.mark.parametrize("playlist_id", AppConfig.get("playlists_spotify")) def test_youtube_market_availability(playlist_id): market = "us" tracklist = api.apollo.get_spotify_playlist_tracklist(playlist_id, market, "current_position", 100)["body"]["items"] for k, v in enumerate(tracklist): isrc = tracklist[k]["isrc"] # log.debug(f"ISRC: {isrc}") youtube_data = api.gate.get_youtube_data( "group_by=date,video_id", "sort_by=-views", "views=1", "content_type=partner_uploaded,premium_ugc", "expand_to=related_isrcs", f"isrc={isrc}", ) if youtube_data["body"]["items"]: youtube_data = youtube_data["body"]["items"] break youtube_latest_date = api.dsp.get_youtube_latest_date()["body"]["date"] youtube_latest_date_2_weeks_ago = str(parse(youtube_latest_date) - relativedelta(days=13)).split()[0] # Check for single YouTube id youtube_video_id = youtube_data[0]["video_id"].removeprefix("youtube_") available_markets = api.gate.get_list_of_available_markets_for_the_youtube_video(start_date=youtube_latest_date_2_weeks_ago, end_date=youtube_latest_date, video_id=youtube_video_id) for market in available_markets["body"]["items"]: analytic_performance = api.gate.get_youtube_analytic_performance(country_code=market["code"], end_date=youtube_latest_date, video_id=youtube_video_id) # log.debug(f"Market info: {market}") assert_that(analytic_performance["body"]["trends"]["weekly_views"]).is_greater_than(0) # Check for bulk of YouTube ids video_ids = ", ".join([i["video_id"].removeprefix("youtube_") for i in youtube_data]) available_markets = api.gate.get_list_of_available_markets_for_the_youtube_video(start_date=youtube_latest_date_2_weeks_ago, end_date=youtube_latest_date, video_id=video_ids) for market in available_markets["body"]["items"]: analytic_performance = api.gate.get_youtube_analytic_performance(country_code=market["code"], end_date=youtube_latest_date, video_id=video_ids) # log.debug(f"Market info: {market}") assert_that(analytic_performance["body"]["trends"]["weekly_views"]).is_greater_than(0) @allure.severity(allure.severity_level.NORMAL) @allure.title("Consistency YouTube graph on video screen with metrics") @allure.testcase("AG-9976") @pytest.mark.parametrize("playlist_id", AppConfig.get("playlists_spotify")) def test_consistency_youtube_graph_on_video_screen_with_metrics(playlist_id): market = "us" tracklist = api.apollo.get_spotify_playlist_tracklist(playlist_id, market, "current_position", 100)["body"]["items"] for k, v in enumerate(tracklist): isrc = tracklist[k]["isrc"] youtube_data = api.gate.get_youtube_data( "group_by=date,video_id", "sort_by=-views", "limit=10", "views=1", "content_type=partner_uploaded,premium_ugc", "expand_to=related_isrcs", f"isrc={isrc}", ) if youtube_data["body"]["items"]: youtube_data = youtube_data["body"]["items"] break # Check for single YouTube id youtube_video_id = youtube_data[0]["video_id"].removeprefix("youtube_") youtube_latest_date = api.dsp.get_youtube_latest_date()["body"]["date"] analytic_performance = api.gate.get_youtube_analytic_performance(country_code="_gl", end_date=youtube_latest_date, video_id=youtube_video_id)["body"]["trends"] streams_graph_data = api.gate.get_youtube_streams_graph(latest_date=youtube_latest_date, video_id=youtube_video_id) total_views_sum = sum([i["y"]["total"] for i in streams_graph_data["coordinates"] if i["y"] is not None]) if total_views_sum > 0: if streams_graph_data["coordinates"][-1]["y"] is None: last_day_views = 0 else: last_day_views = streams_graph_data["coordinates"][-1]["y"]["total"] elif total_views_sum == 0: last_day_views = 0 assert_that(analytic_performance["weekly_views"]).is_equal_to(total_views_sum) assert_that(analytic_performance["latest_date_views"]).is_equal_to(last_day_views) # Check for bulk of YouTube ids video_ids = ", ".join([i["video_id"].removeprefix("youtube_") for i in youtube_data]) analytic_performance = api.gate.get_youtube_analytic_performance(country_code="_gl", end_date=youtube_latest_date, video_id=video_ids)["body"]["trends"] streams_graph_data = api.gate.get_youtube_streams_graph(latest_date=youtube_latest_date, video_id=video_ids) total_views_sum = sum([i["y"]["total"] for i in streams_graph_data["coordinates"] if i["y"] is not None]) if total_views_sum > 0: if streams_graph_data["coordinates"][-1]["y"] is None: last_day_views = 0 else: last_day_views = streams_graph_data["coordinates"][-1]["y"]["total"] elif total_views_sum == 0: last_day_views = 0 assert_that(analytic_performance["weekly_views"]).is_equal_to(total_views_sum) assert_that(analytic_performance["latest_date_views"]).is_equal_to(last_day_views)