import datetime import json import unittest from argparse import Namespace from types import SimpleNamespace 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.mysql_db_client_custom import MySqlClient from app.src.pages.apple_playlist_page import ApplePlaylistPage 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 ApplePlaylistPageTest(unittest.TestCase): track54 = json.loads(json.dumps(AppConfig.get("track54")), object_hook=lambda d: Namespace(**d)) gl_market = json.loads(json.dumps(AppConfig.get("market")["global"]), object_hook=lambda d: Namespace(**d)) @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.ap = ApplePlaylistPage(self.driver) self.tp = TrackPage(self.driver) self.api_client = ApiClient() self.sql_client = MySqlClient() self.ts = TestStatus(self.driver) @allure.story("AP-4017") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Displaying of Apple Playlists for Top 6 and All markets""") @allure.description("""TC Verifies displaying of Apple Playlists for Top 6 and All markets when Global is selected in Top Header.""") def test_apple_playlists_top_and_all(self): self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.tp.open_spotify_track_page_with_market_id(self.track54.id, market_id=self.gl_market.url) self.tp.td_change_dsp([AppConfig.get("dsp")["apple"]]) self.tp.td_change_entities(AppConfig.get("source")["playlists"]) # step 1 self.tp.verify_td_markets_toggle_text(text=["Top Markets", "All"]) self.tp.verify_selected_td_markets_toggle(self.tp.MARKETS_TOP["tab"]) self.tp.td_verify_apple_playlists_icon_present() # step 2, 4 self.tp.td_change_owner_category_to(AppConfig.get("owner_category")["apple_curators"]) self.tp.td_cps_tab_sort_by_column(self.tp.TD_COLUMN_COUNTRY_CODE) flags_top_6 = list(set(self.tp.td_get_countries_from_table())) self.ts.markFinal( all(f in self.tp.TOP_6_COUNTRIES for f in flags_top_6), f"STEP 2, 4: all flags are from top 6 countries: \n{flags_top_6}", ) # step 13 for m in ["All Owner Markets", AppConfig.get("market")["brazil"]["name"]]: self.tp.td_change_owner_market_to(m) end_date = self.tp.get_calendar_end_date() start_date = (datetime.datetime.strptime(end_date, "%Y-%m-%d") - datetime.timedelta(days=6)).date() # step 3 flags_top_6 = list(set(self.tp.td_get_countries_from_table())) table = self.tp.td_current_get_data_all_table_ui() for c in ["names", "positions", "trends", "added", "track_7", "playlist_7"]: self.ts.markFinal( all(v not in ["", "None", None, [None], ["None"]] for v in table[c]), f"STEP 3: table has values for each column: {c}, \n values: {table[c]}", ) self.ts.markFinal( table["followers"] == [], f"table has no values for followers column: {c}, \n values: {table['followers']}", ) playlist1 = SimpleNamespace( market=flags_top_6[0], isrc=self.track54.isrc, playlist_id=self.tp.td_get_playlist_ids()[0], name=table["names"][0], position=table["positions"][0], trend=table["trends"][0], track_streams=table["track_7"][0], playlist_streams=table["playlist_7"][0], start_date=start_date, end_date=end_date, ) # step 5 self.tp.td_compare_table_playlist_with_api(playlist=playlist1) # step 6 apple_playlist_link = self.tp.td_get_playlist_ids(full=True)[0] assert_that(apple_playlist_link).is_equal_to(f"/apple/playlist/{playlist1.playlist_id}?hd_filter_market={playlist1.market}") # step 7 self.verify_position(playlist=playlist1) # step 8-12 NOT AUTOMATED def verify_position(self, playlist): resp = self.api_client.get_apple_tracklist(id=playlist.playlist_id, country=playlist.market)["tracklist"] isrcs = [i["isrc"] for i in resp] self.ts.markFinal(playlist.isrc in isrcs, f"expected: {playlist.isrc}\nall isrc: {isrcs}") for t in resp: if t["isrc"] == playlist.isrc: self.ts.markFinal(t["position"] == playlist.position, f'td position: {playlist.position}\n ap api: {t["position"]}')