import unittest from datetime import datetime, timedelta import allure import pytest from assertpy import assert_that from ui_automation_framework.core import TestStatus from ui_automation_framework.utils import AppConfig from app.api_client import ApiClient from app.src.pages.album_page import AlbumPage from app.src.pages.comparison_page import TrackComparisonPage from app.src.pages.login_page import LoginPage from app.src.pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up") class DeepLinkingTrackPageTest(unittest.TestCase): @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.tp = TrackPage(self.driver) self.cp = TrackComparisonPage(self.driver) self.ap = AlbumPage(self.driver) self.api_client = ApiClient() self.ts = TestStatus(self.driver) @allure.issue("https://data-analytics.atlassian.net/browse/AP-5540") @pytest.mark.flaky(reruns=0) @allure.story("AP-5147") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-4912] Track Details -> 'Videos' tab. Data calculations upon market change") @allure.description("TC verifies the accuracy of data calculations in the table on ‘VIDEOS’ tab after the user selects a particular market(s) or region in the filter.") def test_youtube_track_details_videos_markets(self): self.loginPage.login_with_worker() self.tp.open_spotify_track_page_with_market_id(track_id=AppConfig.get("track40")["id"], market_id=AppConfig.get("market")["global"]["url"]) self.tp.td_switch_to_youtube_tab() # step 1 youtube_table_gl = self.tp.td_youtube_get_all_from_table() self.tp.market_dd_choose_few_countries(tab="youtube", param=[AppConfig.get("market")["us"]["name"], AppConfig.get("market")["canada"]["name"]]) youtube_table_ca_us = self.tp.td_youtube_get_all_from_table() assert_that(youtube_table_gl).is_not_equal_to(youtube_table_ca_us) # step 2 last_date = self.tp.td_youtube_get_views_date() api_resp = self.api_client.get_video_analytics( video_id=youtube_table_ca_us["video_ids"][0], market=f'{AppConfig.get("market")["us"]["market"]}%2C{AppConfig.get("market")["canada"]["market"]}', start_date=last_date, end_date=last_date, ) last_date_views = sum(sum(v["metrics"]["traffic_source_types"][k] for k in self.tp.youtube_all_sources) for v in api_resp) assert_that(last_date_views).is_equal_to(youtube_table_ca_us["date_views"][0]) # step 3 previous_date = (datetime.strptime(last_date, "%Y-%m-%d") - timedelta(days=1)).date() api_resp_prev_day = self.api_client.get_video_analytics( video_id=youtube_table_ca_us["video_ids"][0], market=f'{AppConfig.get("market")["us"]["market"]}%2C{AppConfig.get("market")["canada"]["market"]}', start_date=previous_date, end_date=previous_date, ) previous_date_views = sum(sum(v["metrics"]["traffic_source_types"][k] for k in self.tp.youtube_all_sources) for v in api_resp_prev_day) views_diff = last_date_views - previous_date_views trend_api = self.tp.apply_rounding_percentage(abs(views_diff / previous_date_views * 100)) assert_that(trend_api).is_equal_to(youtube_table_ca_us["date_trends"][0]) # step 4 self.tp.td_youtube_verify_hover_trend_column_value(position=0, diff_views=views_diff) # step 5 youtube_latest_date = self.api_client.get_latest_date_all()["youtube"] latest_minus_7 = (datetime.strptime(youtube_latest_date, "%Y-%m-%d") - timedelta(days=6)).date() api_resp_7_days = self.api_client.get_video_analytics( video_id=youtube_table_ca_us["video_ids"][0], market=f'{AppConfig.get("market")["us"]["market"]}%2C{AppConfig.get("market")["canada"]["market"]}', start_date=latest_minus_7, end_date=youtube_latest_date, ) last_7_days_views_api = sum(sum(v["metrics"]["traffic_source_types"][k] for k in self.tp.youtube_all_sources) for v in api_resp_7_days) assert_that(last_7_days_views_api).is_equal_to(youtube_table_ca_us["views_7"][0]) # step 6 youtube_minus_7 = (datetime.strptime(youtube_latest_date, "%Y-%m-%d") - timedelta(days=7)).date() youtube_minus_14 = (datetime.strptime(youtube_latest_date, "%Y-%m-%d") - timedelta(days=13)).date() api_resp_previous = self.api_client.get_video_analytics( video_id=youtube_table_ca_us["video_ids"][0], market=f'{AppConfig.get("market")["us"]["market"]}%2C{AppConfig.get("market")["canada"]["market"]}', start_date=youtube_minus_14, end_date=youtube_minus_7, ) previous_views_api = sum(sum(v["metrics"]["traffic_source_types"][k] for k in self.tp.youtube_all_sources) for v in api_resp_previous) views_diff = last_7_days_views_api - previous_views_api trend_7_days_api = views_diff / previous_views_api * 100 assert_that(abs(self.tp.apply_rounding_percentage(trend_7_days_api))).is_equal_to(youtube_table_ca_us["trends_7"][0]) # step 7 self.tp.td_youtube_verify_hover_trend_column_value(position=0, diff_views=views_diff, tab="trends_7") # step 8 start = self.tp.get_calendar_start_date() end = self.tp.get_calendar_end_date() api_resp_current_period = self.api_client.get_video_analytics( video_id=youtube_table_ca_us["video_ids"][0], market=f'{AppConfig.get("market")["us"]["market"]}%2C{AppConfig.get("market")["canada"]["market"]}', start_date=start, end_date=end, ) current_period_views_api = sum(sum(v["metrics"]["traffic_source_types"][k] for k in self.tp.youtube_all_sources) for v in api_resp_current_period) assert_that(current_period_views_api).is_equal_to(youtube_table_ca_us["views_in_period"][0]) # step 9 avg_period_views_api = self.tp.apply_rounding_percentage(current_period_views_api / len(list(api_resp_current_period)) * 2) assert_that(avg_period_views_api).is_equal_to(youtube_table_ca_us["views_avg_day"][0]) # step 10 api_resp = self.api_client.get_video_analytics( video_id=youtube_table_ca_us["video_ids"][0], market=f'{AppConfig.get("market")["us"]["market"]}%2C{AppConfig.get("market")["canada"]["market"]}', start_date=start, end_date=end, group_by="", ) # markets_ca_us = [AppConfig.get("market")["us"]["market"], AppConfig.get("market")["canada"]["market"]] # percentage_countries = sum( # v["metrics"]["average_view_duration_percentage"] # for v in api_resp # if v["dimensions"]["country_code"] in markets_ca_us # ) # assert_that(self.tp.apply_rounding_percentage(percentage_countries / len(markets_ca_us))).is_equal_to( # int(youtube_table_ca_us["views_avg_duration"][0].split("%")[0]) # ) # step 11 self.tp.stream_and_source_choose_region(param=self.tp.REGION_NORTH_AMERICA, dd="td_youtube") table_na = self.tp.td_youtube_get_all_from_table() assert_that(youtube_table_ca_us).is_equal_to(table_na) # step 12 for r in self.tp.REGIONS: table_before = self.tp.td_youtube_get_all_from_table() self.tp.stream_and_source_choose_region(param=r, dd="td_youtube") table_after = self.tp.td_youtube_get_all_from_table() assert_that(table_before).is_not_equal_to(table_after)