import random 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 app.api_client import ApiClient 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 DeepLinkingTrackPageTest(unittest.TestCase): @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.tp = TrackPage(self.driver) self.pip = PositionPlaylistPopup(self.driver) self.api_client = ApiClient() self.ts = TestStatus(self.driver) @parameterized.expand( [ (AppConfig.get("track40"), "first_playlist", "track", AppConfig.get("market")["us"], "Spotify Radio"), (AppConfig.get("track40"), "previous_playlists_tab", "track", AppConfig.get("market")["us"], "Spotify Radio"), (AppConfig.get("playlist11"), "spotify-playlist-details-tab-tracks", "playlist", AppConfig.get("market")["us"], ""), ] ) @allure.story("AP-5949") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-3740/5] Spotify Playlist Details popup. Chart and data verification") @allure.description("TC verifies chart, tooltips and correctness of data shown on Position in Playlist popup on Track and Spotify Playlist pages.") def test_spotify_popup_details_verification_p1(self, track, tab, page, market, category): self.loginPage.login_with_worker() self.tp.open_spotify_page(track["id"], page) self.tp.select_market(market["name"]) self.tp.scroll_to_track_details() if page == "track": self.tp.td_switch_to_playlist(tab) self.tp.td_change_owner_category_to(category) index_popup = random.choice([0, 1, 2, 3, 4, 5]) self.pip.open_popup(index=index_popup) # steps 2, 4, 20 if page == "playlist": id = self.pip.get_id_from_track_link() popup_id = self.api_client.get_isrc_by_spotify_id(id=id, market=market["market"])["external_ids"]["isrc"] else: popup_id = track["isrc"] self.verify_kpis(popup_id, market["market"]) # steps 3, 5 self.tp.select_one_day_period_in_previous_month() self.verify_kpis(popup_id, market["market"]) # step 13 self.pip.close_popup() # step 14 self.tp.select_market(AppConfig.get("market")["global"]["name"]) # step 17 if page == "track": self.tp.td_switch_to_playlist(tab) self.tp.td_change_owner_category_to(category) self.pip.open_popup(index=index_popup) self.verify_kpis(popup_id) @allure.step("PIP - verify kpis ui and api") def verify_kpis(self, isrc, market=""): start = self.tp.get_calendar_start_date() end = self.tp.get_calendar_end_date() playlist_id = self.pip.get_playlist_id() kpis_ui = self.pip.get_legend_kpis() for k in kpis_ui: if k == -1: kpis_ui[kpis_ui.index(k)] = 0 api_resp = self.api_client.get_track_in_playlist_2(isrc=isrc, playlistId=playlist_id, startDate=start, endDate=end, local_m=market)["items"] streams_api = [sum(a["globalStreams"] for a in api_resp)] if market != "": streams_api.append(sum(a["localStreams"] for a in api_resp)) assert_that(kpis_ui).is_equal_to(streams_api) # NOT AUTOMATED STEPS - 1, 6-12, 15-16, 18-19