import logging import time import unittest 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.album_page import AlbumPage 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): log = cl.Logger(logging.DEBUG) @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.tp = TrackPage(self.driver) self.ap = AlbumPage(self.driver) self.api_client = ApiClient() self.ts = TestStatus(self.driver) @allure.story("AP-4780") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-4526] Album. Data recalculation for multiple selected markets. SPOTIFY. STEPS 1-11, 13, 16-17") @allure.description("""TC verifies that after selecting several markets data on the UI is recalculated properly. STEPS 1-11, 13, 16-17""") def test_spotify_data_recalculation_with_different_markets_steps_1_17(self): self.loginPage.login_with_worker() self.tp.open_spotify_page(id=AppConfig.get("album2")["id"], page_type="album") self.tp.select_market(AppConfig.get("market")["global"]["name"]) # step 1 markets_row = [AppConfig.get("market")["australia"], AppConfig.get("market")["nz"]] markets_name = [m["name"] for m in markets_row] markets_api = [m["market"] for m in markets_row] self.tp.market_dd_choose_few_countries(param=markets_name) markets = self.tp.graph_get_selected_market() assert_that(markets).is_equal_to("2 Markets") # step 2 total_before = self.tp.get_streams_in_period_total() self.tp.select_previous_mounth_first_day_period() total_after = self.tp.get_streams_in_period_total() assert_that(total_before).is_not_equal_to(total_after) # step 3, 4 self.verify_sources_legend(markets_api) # step 5-11 self.tp.open_spotify_page(id=AppConfig.get("album3")["id"], page_type="album") self.tp.market_dd_choose_few_countries(param=markets_name) self.tp.select_previous_mounth_period() self.verify_sources_legend(markets_api) # step 13 self.ap.switch_to_tab("track") markets = self.tp.graph_get_selected_market() assert_that(markets).is_equal_to(self.tp.all_markets) # step 16 self.tp.market_dd_choose_few_countries(param=markets_name) self.ap.verify_export_album_track("2 markets", True, "Track", markets_api) # step 17 self.tp.stream_and_source_choose_region(self.tp.REGION_OCEANIA) self.ap.verify_export_album_track("2 markets", True, "Track", ["au", "nz", "fm"], " (1)") @allure.story("AP-4780") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-4526] Album. Data recalculation for multiple selected markets. SPOTIFY. STEPS 12, 15") @allure.description("""TC verifies that after selecting several markets data on the UI is recalculated properly. STEPS 12, 15""") def test_spotify_data_recalculation_with_different_markets_steps_12_15(self): self.loginPage.login_with_worker() # step 12 markets_row = [AppConfig.get("market")["australia"], AppConfig.get("market")["nz"]] markets_name = [m["name"] for m in markets_row] markets_api = [m["market"] for m in markets_row] self.tp.open_spotify_page(id=AppConfig.get("album2")["id"], page_type="album") self.tp.market_dd_choose_few_countries(param=markets_name) self.ap.verify_export_album_track("2 markets", True, "album", markets_api) # step 15 self.ap.switch_to_tab("track") self.tp.select_previous_mounth_period() self.tp.market_dd_choose_few_countries(param=markets_name) track_tab_streams_avg = self.tp.get_elements("//*[contains(@id, 'spotify-streams-daily-avg-')]", "xpath") track_tab_streams_avg_1 = [self.tp.get_text(element=s) for s in track_tab_streams_avg][0] self.tp.click_element("album-table-cell-track-name-1") self.tp.select_dsp(AppConfig.get("dsp")["by_dsp"]) self.tp.select_previous_mounth_period() self.tp.market_dd_choose_few_countries(param=markets_name) streams_avg_tp = self.tp.graph_get_legend_by_dsp()[3] assert_that(track_tab_streams_avg_1).is_equal_to(streams_avg_tp) @parameterized.expand( [ ("Middle East", AppConfig.get("regions")["middle_east"]["api"]), ("Africa", AppConfig.get("regions")["africa"]["api"]), ("CIS", AppConfig.get("regions")["cis"]["api"]), ("Asia", AppConfig.get("regions")["asia"]["api"]), ("Europe", AppConfig.get("regions")["europe"]["api"]), ("Latin-Iberia", AppConfig.get("regions")["latin_iberia"]["api"]), ("North America", AppConfig.get("regions")["north_america"]["api"]), ("UK", AppConfig.get("regions")["uk"]["api"]), ] ) @allure.story("AP-4780") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-4526] Album. Data recalculation for multiple selected markets. SPOTIFY. STEP 18") @allure.description("""TC verifies that after selecting several markets data on the UI is recalculated properly. STEP 18""") def test_spotify_data_recalculation_with_different_markets_step_18(self, region, markets_api): self.loginPage.login_with_worker() self.tp.open_spotify_page(id=AppConfig.get("album2")["id"], page_type="album") self.tp.stream_and_source_choose_region(region) self.verify_sources_legend(markets_api) self.tp.change_source_type(AppConfig.get("source")["by_source"]) markets_csv = f"{len(markets_api)} markets" self.ap.verify_export_album_track(markets_csv, True, "album", markets_api) self.ap.switch_to_tab("track") self.tp.stream_and_source_choose_region(region) self.ap.verify_export_album_track(markets_csv, True, "Track", markets_api) # # NOT AUTOMATED - STEP 14 @allure.step("Album - Spotify compare api and ui in graph legend Sources") def verify_sources_legend(self, markets): time.sleep(3) total_ui = self.tp.get_streams_in_period_total() start = self.tp.get_calendar_start_date() end = self.tp.get_calendar_end_date() ids_loc = "//*[contains(@href, '/track/')]" self.tp.wait_for_element_visible(locator=ids_loc, locator_type="xpath") ids = self.tp.get_elements(locator=ids_loc, locator_type="xpath") ids = [self.tp.get_attribute_value(element=i, attribute="href").split("/")[-1] for i in ids] isrcs = [self.api_client.get_isrc_by_spotify_id(market="_gl", id=i)["external_ids"]["isrc"] for i in ids] api_resps = [self.api_client.get_track_per_country(isrc=i, start_date=start, end_date=end, vendor="spotify") for i in isrcs] spotify_totals_api = sum(sum(sum(d["streams"] for d in r["data"]) for r in z if r["countryCode"] in markets) for z in api_resps) sources_api = [ sum(sum(sum(d[k] for d in r["data"]) for r in z if r["countryCode"] in markets) for z in api_resps) for k in ["sourceCollection", "sourceOthersPlaylist", "sourceReleaseRadar", "sourceDiscoverWeekly", "sourceRadio", "sourceDailyMix", "sourceChart", "sourcePlayQueue", "sourceAlbum", "sourceArtist", "sourceSearch", "sourceOther"] ] sources_ui = self.tp.get_graph_legend_sources_tooltips() user = self.loginPage.get_user_email_with_worker() token = self.api_client.authorize(user=user) self.tp.verify_save_and_skips(isrcs, ",".join(markets), token) self.ap.track_performance_verify_streams_age_and_gender( dsp=AppConfig.get("dsp")["spotify"], market=",".join(markets), isrcs=isrcs, token=token, ) assert_that(spotify_totals_api).is_equal_to(int(total_ui.replace(",", ""))) assert_that(sources_api).is_equal_to(sources_ui["streams"]) self.tp.select_dsp(AppConfig.get("dsp")["by_dsp"]) total_by_dsp = self.tp.graph_get_legend_by_dsp()[2].split("\n")[0] assert_that(total_ui).is_equal_to(total_by_dsp) self.tp.select_dsp(AppConfig.get("dsp")["spotify"]) self.tp.change_source_type(AppConfig.get("source")["all_streams"]) total_all_streams = self.tp.get_streams_values_all_streams()["dsp_value"] assert_that(total_all_streams).is_equal_to(int(total_ui.replace(",", "")))