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-8058") @pytest.mark.flaky(reruns=0) @allure.story("AP-5138") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-4912] Track Details -> 'Videos' tab. Data calculations upon source change") @allure.description("TC verifies the accuracy of data calculations in the table on ‘VIDEOS’ tab after the user selects a particular source(s) in the filter.") def test_youtube_track_details_videos_sources(self): self.loginPage.login_with_worker() self.tp.open_spotify_track_page_with_market_id(track_id=AppConfig.get("track6")["id"], market_id=AppConfig.get("market")["us"]["url"]) self.tp.td_switch_to_youtube_tab() # step 1 youtube_table_all_sources = self.tp.td_youtube_get_all_from_table() self.tp.youtube_change_sources(["Playlists", "Suggested Videos"]) youtube_table_p_and_v_sources = self.tp.td_youtube_get_all_from_table() # assert_that(set(youtube_table_all_sources["views_avg_duration"])).is_equal_to( # set(youtube_table_p_and_v_sources["views_avg_duration"]) # ) assert_that(youtube_table_all_sources).is_not_equal_to(youtube_table_p_and_v_sources) # step 2 last_date = self.tp.td_youtube_get_views_date() api_resp = self.api_client.get_video_analytics( video_id=youtube_table_p_and_v_sources["video_ids"][0], market=AppConfig.get("market")["us"]["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.playlists, self.tp.suggested_videos]) for v in api_resp) assert_that(last_date_views).is_equal_to(youtube_table_p_and_v_sources["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_p_and_v_sources["video_ids"][0], market=AppConfig.get("market")["us"]["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.playlists, self.tp.suggested_videos]) for v in api_resp_prev_day) views_diff = last_date_views - previous_date_views trend_api = int(abs(self.tp.apply_rounding_percentage(views_diff / previous_date_views * 100))) assert_that(trend_api).is_equal_to(youtube_table_p_and_v_sources["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_p_and_v_sources["video_ids"][0], market=AppConfig.get("market")["us"]["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.playlists, self.tp.suggested_videos]) for v in api_resp_7_days) assert_that(last_7_days_views_api).is_equal_to(youtube_table_p_and_v_sources["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_p_and_v_sources["video_ids"][0], market=AppConfig.get("market")["us"]["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.playlists, self.tp.suggested_videos]) 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_p_and_v_sources["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_p_and_v_sources["video_ids"][0], market=AppConfig.get("market")["us"]["market"], start_date=start, end_date=end, ) current_period_views_api = sum(sum(v["metrics"]["traffic_source_types"][k] for k in [self.tp.playlists, self.tp.suggested_videos]) for v in api_resp_current_period) assert_that(current_period_views_api).is_equal_to(youtube_table_p_and_v_sources["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))) assert_that(avg_period_views_api).is_equal_to(youtube_table_p_and_v_sources["views_avg_day"][0])