import unittest 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-5136") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-4912] Track Details -> 'Videos' tab. Data calculations upon period change") @allure.description("TC verifies the accuracy of data calculations in the table on ‘VIDEOS’ tab after user changes the period in Track Performance section.") def test_youtube_track_details_videos_periods(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 table_yt_before = self.tp.td_youtube_get_all_from_table() url_base = self.tp.get_url() start_date = "2020-12-01" end_date = "2020-12-31" self.tp.open_url(f"{url_base}&str_gr_start_date={start_date}&str_gr_end_date={end_date}") table_yt_after = self.tp.td_youtube_get_all_from_table() for c in ["date_views", "date_trends", "views_7", "trends_7"]: assert_that(table_yt_before[c]).described_as(f"column: {c}").is_equal_to(table_yt_after[c]) # step 2, 4, 6 self.tp.td_youtube_verify_hover_columns() # step 3 api_resp = self.api_client.get_video_analytics( video_id=table_yt_after["video_ids"][0], market=AppConfig.get("market")["us"]["market"], start_date=start_date, end_date=end_date, ) in_period_views_api = sum(sum(v["metrics"]["traffic_source_types"][k] for k in self.tp.youtube_all_sources) for v in api_resp) assert_that(in_period_views_api).is_equal_to(table_yt_after["views_in_period"][0]) # step 5 views_avg_day_api = self.tp.apply_rounding_percentage(sum(sum(v["metrics"]["traffic_source_types"][k] for k in self.tp.youtube_all_sources) for v in api_resp) / (len([v["dimensions"]["date"] for v in api_resp]))) assert_that(views_avg_day_api).is_equal_to(table_yt_after["views_avg_day"][0]) # step 7 # percentage_api = self.tp.apply_rounding_percentage( # sum(v["metrics"]["average_view_duration_percentage"] for v in api_resp) # / len([v["dimensions"]["date"] for v in api_resp]) # ) # assert_that(percentage_api).is_equal_to(int(table_yt_after["views_avg_duration"][0].split("%")[0]))