import datetime import math import unittest import allure import pytest from ui_automation_framework.core import TestStatus from ui_automation_framework.utils import AppConfig from app.api_client import ApiClient from app.src.pages.apple_playlist_page import ApplePlaylistPage from app.src.pages.chart_digest import ChartDigestPage from app.src.pages.login_page import LoginPage from app.src.pages.position_playlist_popup import PositionPlaylistPopup from app.src.pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up") class ApplePlaylistPageTest(unittest.TestCase): @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.ap = ApplePlaylistPage(self.driver) self.tp = TrackPage(self.driver) self.chart_digest = ChartDigestPage(self.driver) self.pip = PositionPlaylistPopup(self.driver) self.api_client = ApiClient() self.ts = TestStatus(self.driver) @allure.story("AP-3824") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Apple 'Details' popup verification on a Track page STEP 1-19""") @allure.description("""TC verifies that Position in Playlist popup on Track page meets design and functional requirements. STEP 1-19""") def test_track_page_apple_popup_step_1_19(self): self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.tp.open_spotify_track_page_with_market_id(track_id=AppConfig.get("track40")["id"], market_id=AppConfig.get("market")["global"]["url"]) # step 1 self.tp.td_change_dsp([AppConfig.get("dsp")["apple"]]) self.tp.td_change_entities(AppConfig.get("source")["playlists"]) self.tp.verify_no_popup_icon_for_sum_row() # step 2-3 country_code = self.tp.td_get_countries_from_table(no_sum=True)[0].upper() self.tp.td_open_apple_popup() self.ap.popup_verify_local_market(country_code) # step 5 self.ap.verify_popup_elements() # step 6-7 owner_popup = self.ap.popup_get_owner_category() self.ts.markFinal(owner_popup == AppConfig.get("owner_category")["apple_curators"], f"STEP 6-7: owner category: {owner_popup}") # step 8 self.ap.popup_verify_chart_elements() track_metadata = self.ap.popup_get_metadata() # step 9 self.ap.close_popup(tp=True) # step 11-12 self.tp.td_open_apple_popup() self.ap.popup_click_on_track_name() self.tp.is_track_page_title_present(track_metadata["track"]) # step 13 self.tp.td_change_dsp([AppConfig.get("dsp")["apple"]]) self.tp.td_change_entities(AppConfig.get("source")["playlists"]) self.tp.td_open_apple_popup() self.ap.popup_click_on_playlist_name_and_verify() # step 14 self.ap.go_back() self.ap.popup_click_on_playlist_creator() # step 15-18 self.ap.pop_verify_date_picker() # step 19 self.ap.popup_verify_predefined_periods() @allure.story("AP-3824") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Apple 'Details' popup verification on a Track page STEP 20-36, 40""") @allure.description("""TC verifies that Position in Playlist popup on Track page meets design and functional requirements. STEP 20-36, 40""") def test_track_page_apple_popup_step_20_36(self): self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.tp.open_spotify_track_page_with_market_id(track_id=AppConfig.get("track40")["id"], market_id=AppConfig.get("market")["global"]["url"]) self.tp.td_change_dsp([AppConfig.get("dsp")["apple"]]) self.tp.td_open_apple_popup(4) # step 20 self.ap.popup_select_previous_mounth_period() # step 21-24, 26-28, 42 values = self.ap.verify_chart_tooltip(AppConfig.get("market")["us"]["market"]) values_global = values["global"] values_local = values["local"] csv = self.ap.popup_export_to_csv_and_verify(tp=True) csv_global = csv["global"] csv_local = csv["local"] self.ts.markFinal(list(set(values_global)) == list(set(csv_global)), f"{values_global} and {csv_global} match") # step 40 self.ts.markFinal(list(set(values_local)) == list(set(csv_local)), f"{values_local} and {csv_local} match") # step 29 percentage_calculated = math.floor(values_local[0] / values_global[0] * 100) self.ts.markFinal( percentage_calculated == values["percentage"][0], f"STEP 29 calculated: {percentage_calculated} and tooltip: {values['percentage'][0]} match", ) # step 30-35 self.ap.popup_verify_chart_min_max(tooltips=values, market=AppConfig.get("market")["us"]["market"]) # step 36 self.ap.close_popup(tp=True) @allure.story("AP-3824") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Apple 'Details' popup verification on a Track page STEP 37-49""") @allure.description("""TC verifies that Position in Playlist popup on Track page meets design and functional requirements. STEP 37-49""") def test_track_page_apple_popup_step_37_49(self): self.loginPage.login_with_worker() self.loginPage.is_logged_in() # step 37 self.tp.open_spotify_track_page_with_market_id(track_id=AppConfig.get("track40")["id"], market_id=AppConfig.get("market")["canada"]["url"]) self.tp.td_change_dsp([AppConfig.get("dsp")["apple"]]) self.tp.td_change_entities(AppConfig.get("source")["playlists"]) flags = self.tp.td_get_countries_from_table() id = self.tp.get_playlist_id(1).split("?")[0] self.tp.td_open_apple_popup() # step 38 self.ap.verify_popup_network_market(market=AppConfig.get("market")["canada"]["market"], isrc=AppConfig.get("track40")["isrc"], playlist_id=id) self.ts.markFinal(all(f == AppConfig.get("market")["canada"]["market"] for f in flags), f"all flags are: {set(flags)}") # step 39 self.ap.popup_verify_local_market(AppConfig.get("market")["canada"]["header"]) # step 41 self.ap.popup_verify_na(market=AppConfig.get("market")["canada"]["market"]) # step 42 self.ap.popup_verify_no_data_for_previous_period() # step 49 self.ap.close_popup(tp=True) self.tp.open_spotify_track_page_with_market_id(track_id=AppConfig.get("track40")["id"], market_id=AppConfig.get("market")["global"]["url"]) self.tp.td_switch_to_past_playlists_tab() self.tp.td_change_dsp([AppConfig.get("dsp")["apple"]]) self.tp.td_open_apple_popup() days_range = self.ap.popup_get_days_count_from_day_picker() end_date = self.ap.popup_get_start_end_date()["end"] self.ts.markFinal(days_range == 28, f"count of days: {days_range}") self.ts.markFinal( datetime.datetime.today().date() == end_date, f"latest: {datetime.datetime.today().date()} and end: {end_date} are the same", ) @allure.story("AP-3824") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Apple 'Details' popup verification on a Track page STEP 48""") @allure.description("""TC verifies that Position in Playlist popup on Track page meets design and functional requirements. STEP 48""") def test_track_page_apple_popup_step_48(self): self.loginPage.login_with_worker() self.loginPage.is_logged_in() # step 48 for t in [ ( "spotify", AppConfig.get("track10")["id"], AppConfig.get("market")["france"]["url"], self.tp.TD_PREVIOUS_PLAYLIST_TAB, ), ( "apple", AppConfig.get("track10")["apple_id"], AppConfig.get("market")["france"]["url"], self.tp.TD_CURRENT_PLAYLIST_TAB, ), ( "apple", AppConfig.get("track10")["apple_id"], AppConfig.get("market")["france"]["url"], self.tp.TD_PREVIOUS_PLAYLIST_TAB, ), ]: self.tp.open_track_page(apple_spotify=t[0], track_id=t[1], market=t[2]) self.tp.td_switch_to_playlist(t[3]) self.tp.td_change_dsp([AppConfig.get("dsp")["apple"]]) self.tp.td_open_apple_popup() self.ap.verify_popup_elements() self.pip.verify_export_button_active() self.pip.verify_export_hover() self.ap.popup_click_on_playlist_creator() track_metadata = self.ap.popup_get_metadata() self.ap.popup_click_on_track_name() self.tp.is_track_page_title_present(track_metadata["track"]) # NOT AUTOMATED - STEPS 4, 10, 43-47