import unittest import allure import pytest from assertpy import assert_that from ui_automation_framework.core import TestStatus from app.api_client import ApiClient from app.mysql_db_client_custom import MySqlClient from app.src.pages.chart_digest import ChartDigestPage from app.src.pages.global_track_priorities_page import GlobalTrackPrioritiesPage from app.src.pages.gtp_cpot_popup import GTPCPOTPopup from app.src.pages.gtp_hh_modal import GTPHotHitsModal from app.src.pages.left_navigation_panel import LeftNavigationPanel 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 GlobalTrackPrioritiesPageTest(unittest.TestCase): @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.chartDigestPage = ChartDigestPage(self.driver) self.gtp = GlobalTrackPrioritiesPage(self.driver) self.gtp_hhm = GTPHotHitsModal(self.driver) self.lnp = LeftNavigationPanel(self.driver) self.chart_digest = ChartDigestPage(self.driver) self.trackPage = TrackPage(self.driver) self.gtp_cpot_popup = GTPCPOTPopup(self.driver) self.api_client = ApiClient() self.sql_client = MySqlClient() self.ts = TestStatus(self.driver) @allure.story("AP-4995") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-4169][GTP -> Content Table] Streams and Streams Trend verification STEPS 1-6") @allure.description("""TC verifies Content table Streams and Streams Trend columns logic under Global Track Priorities page. STEPS 1-6""") def test_streams_and_streams_trend_steps_1_6(self): self.loginPage.login_with_worker() self.gtp.open_current_url_with_param("global-track-priorities?&hd_filter_market=_gl") api_resp_dates = self.api_client.get_tracks_gtp() streams_date = api_resp_dates["streams_date"] url_global = self.gtp.get_url() # step 1-2 self.gtp_hhm.verify_streams_column_header(streams_date) # step 3 self.verify_streams("_gl", self.gtp.TAB_OP, streams_date) # step 4 self.trackPage.change_param_in_url_new(self.gtp.hd_filter_market, "us") self.verify_streams("us", self.gtp.TAB_OP, streams_date) # step 5 date_us_past = "2021-09-06" self.gtp.open_current_url_with_param(f"&hd_date={date_us_past}") self.verify_streams("us", self.gtp.TAB_OP, date_us_past) # step 6 date_gl_past = "2020-12-07" self.trackPage.open_url(f"{url_global}&{self.gtp.hd_date}={date_gl_past}") self.gtp.open_tab(self.gtp.TAB_BU) first_track = "Coco (feat. DaBaby)" self.verify_streams("_gl", self.gtp.TAB_BU, date_gl_past, first_track) @allure.story("AP-4995") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-4169][GTP -> Content Table] Streams and Streams Trend verification STEPS 8-12") @allure.description("""TC verifies Content table Streams and Streams Trend columns logic under Global Track Priorities page. STEPS 8-12""") def test_streams_and_streams_trend_steps_8_12(self): self.loginPage.login_with_worker() self.gtp.open_current_url_with_param("global-track-priorities?&hd_filter_market=_gl") api_resp_dates = self.api_client.get_tracks_gtp() streams_date = api_resp_dates["streams_date"] # step 8 self.gtp.verify_streams_trend_hover("_gl", streams_date) # step 9 date_gl_past = "2021-01-01" self.gtp.open_current_url_with_param(f"&{self.gtp.hd_date}={date_gl_past}") track_1 = "Mood (feat. iann dior)" track_2 = "HOLIDAY" track_3 = "Mirrors" track_4 = "Coco (feat. DaBaby)" self.verify_trend("_gl", self.gtp.TAB_OP, date_gl_past, track_1) # step 10 self.verify_trend("_gl", self.gtp.TAB_OP, date_gl_past, track_2) # step 11 self.gtp.open_tab(self.gtp.TAB_CH) self.verify_trend("_gl", self.gtp.TAB_CH, date_gl_past, track_3) # step 12 date_gl_past_2 = "2020-12-07" self.trackPage.change_param_in_url_new(self.gtp.hd_date, date_gl_past_2) self.gtp.open_tab(self.gtp.TAB_BU) tab_data = self.gtp.get_all_from_table(self.gtp.TAB_BU) trend_ui = tab_data[track_4]["streams_trend"] assert_that(trend_ui).is_equal_to("") @allure.step("GTP - verify streams") def verify_streams(self, market, tab, streams_date, track=0): tab_data_us = self.gtp.get_all_from_table(tab) if isinstance(track, int): first_track = list(tab_data_us.keys())[track] else: first_track = track id = tab_data_us[first_track]["track_id"] isrc = self.api_client.get_isrc_by_spotify_id(market, id)["external_ids"]["isrc"] streams_api = self.api_client.get_gtp_streams(isrcs=[isrc], market=market, date=streams_date)[0]["data"][-1]["streams"] assert_that(streams_api).is_equal_to(tab_data_us[first_track]["streams"]) @allure.step("GTP - verify trend") def verify_trend(self, market, tab, streams_date, track=0): tab_data = self.gtp.get_all_from_table(tab) if isinstance(track, int): first_track = list(tab_data.keys())[track] else: first_track = track id = tab_data[first_track]["track_id"] isrc = self.api_client.get_isrc_by_spotify_id(market, id)["external_ids"]["isrc"] streams_api = self.api_client.get_gtp_streams(isrcs=[isrc], market=market, date=streams_date)[0]["data"] streams = [s["streams"] for s in streams_api] if len(streams) == 2: trend = f"{abs(self.trackPage.apply_rounding_percentage((streams[1] - streams[0]) * 100 / streams[0]))}" else: trend = "" trend_ui = tab_data[first_track]["streams_trend"] assert_that(trend).is_equal_to(trend_ui) # NOT AUTOMATED STEP - 7