import logging import unittest from datetime import datetime, timedelta import allure import pytest from assertpy import assert_that from parameterized import parameterized from ui_automation_framework.core import TestStatus from ui_automation_framework.utils import AppConfig from ui_automation_framework.utils import logger as cl from app.api_client import ApiClient from app.src.pages.dsp_comparison_page import DSPComparison 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 TikTokComparison(unittest.TestCase): log = cl.Logger(logging.DEBUG) @pytest.fixture(autouse=True) def classSetup(self): self.log = cl.Logger(logging.DEBUG) self.loginPage = LoginPage(self.driver) self.ts = TestStatus(self.driver) self.api_client = ApiClient() self.track_page = TrackPage(self.driver) self.dsp_comparison = DSPComparison(self.driver) @parameterized.expand( [ ("creations", 0, [AppConfig.get("track6")["isrc"]]), ("video_views", 1, [AppConfig.get("track6")["isrc"]]), ("spotify", 2, [AppConfig.get("track6")["isrc"]]), ("creations", 0, ["USSM12100531", "USSM12100532"]), ("video_views", 1, ["USSM12100531", "USSM12100532"]), ("spotify", 2, ["USSM12100531", "USSM12100532"]), ] ) @allure.story("AP-7245") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-6708][BE] TikTok Comparison. By Performance. Cards data verification") @allure.description("TC verifies the correctness of data in the endpoint used for the cards on KPI section on the DSP Comparison → By Performance view.") def test_tc_by_performance_cards_verifications(self, source, index, isrcs): # step 1-2, 11-13 all_dates = self.api_client.get_latest_date_all() end = str(min([(datetime.strptime(all_dates["spotify"], "%Y-%m-%d")).date(), (datetime.strptime(all_dates["tiktok"], "%Y-%m-%d")).date()])) start = str((datetime.strptime(end, "%Y-%m-%d") - timedelta(days=27)).date()) api_resp_metrics_trends = self.api_client.get_metrics_trends(end, isrcs) if source == "spotify": latest_date_golden_value_api = 0 value_7_days_ago_api = 0 golden_api_data_prev_7_days = 0 api_resps_golden = [self.api_client.get_track_per_country(i, start, end, source) for i in isrcs] golden_api_data_7_days_lists = [] for resp in api_resps_golden: for r in resp: if r["countryCode"] == "_gl": latest_date_golden_value_api += r["data"][-1]["streams"] value_7_days_ago_api += r["data"][-8]["streams"] golden_api_data_7_days_lists.append([r["data"][v]["streams"] for v in list(range(21, 28))]) golden_api_data_prev_7_days += sum(r["data"][v]["streams"] for v in list(range(14, 21))) golden_api_data_7_days = [sum(x) for x in zip(*golden_api_data_7_days_lists)] else: api_resp_golden = self.api_client.get_tiktok_tracks_analytics(isrcs[0], start, end, ["worldwide"]) latest_date_golden_value_api = sum(api_resp_golden["breakdowns"]["content_type_country"][pu]["worldwide"][source][-1] for pu in ["pgc", "ugc"]) value_7_days_ago_api = sum(api_resp_golden["breakdowns"]["content_type_country"][pu]["worldwide"][source][-8] for pu in ["pgc", "ugc"]) golden_api_data_7_days = [sum(api_resp_golden["breakdowns"]["content_type_country"][pu]["worldwide"][source][v] for pu in ["pgc", "ugc"]) for v in list(range(21, 28))] golden_api_data_prev_7_days = sum([sum(api_resp_golden["breakdowns"]["content_type_country"][pu]["worldwide"][source][v] for pu in ["pgc", "ugc"]) for v in list(range(14, 21))]) trend_top_api = self.track_page.apply_rounding_percentage((latest_date_golden_value_api - value_7_days_ago_api) / value_7_days_ago_api * 100) assert_that(end).is_equal_to(api_resp_metrics_trends["items"][index]["latest"]["date"]) assert_that(latest_date_golden_value_api).is_equal_to(api_resp_metrics_trends["items"][index]["latest"]["value"]) # step 3 assert_that(trend_top_api).is_equal_to(api_resp_metrics_trends["items"][index]["latest"]["trend"]) # step 4 api_resp_metrics_trends_step_7 = self.api_client.get_metrics_trends("2021-11-06", ["USSM12104018"]) assert_that(api_resp_metrics_trends_step_7["items"][index]["latest"]["trend"]).is_none() # step 5 start_7_days = str((datetime.strptime(end, "%Y-%m-%d") - timedelta(days=6)).date()) assert_that(end).is_equal_to(api_resp_metrics_trends["items"][index]["week"]["end_date"]) assert_that(start_7_days).is_equal_to(api_resp_metrics_trends["items"][index]["week"]["start_date"]) assert_that(golden_api_data_7_days).is_equal_to(api_resp_metrics_trends["items"][index]["week"]["data"]) assert_that(sum(golden_api_data_7_days)).is_equal_to(api_resp_metrics_trends["items"][index]["week"]["value"]) # step 6 assert_that(self.track_page.apply_rounding_percentage((sum(golden_api_data_7_days) - golden_api_data_prev_7_days) / golden_api_data_prev_7_days * 100)).is_equal_to(api_resp_metrics_trends["items"][index]["week"]["trend"]) # step 7 assert_that(api_resp_metrics_trends_step_7["items"][index]["week"]["trend"]).is_none() # step 8 avg_7_days = self.track_page.apply_rounding_percentage(sum(golden_api_data_7_days) / len(golden_api_data_7_days)) avg_prev_7_days = self.track_page.apply_rounding_percentage(golden_api_data_prev_7_days / 7) assert_that(avg_7_days).is_equal_to(api_resp_metrics_trends["items"][index]["week"]["average"]["value"]) # step 9 assert_that(self.track_page.apply_rounding_percentage((avg_7_days - avg_prev_7_days) / avg_prev_7_days * 100)).is_equal_to(api_resp_metrics_trends["items"][index]["week"]["average"]["trend"]) # step 10 assert_that(api_resp_metrics_trends_step_7["items"][index]["week"]["average"]["trend"]).is_none()