import datetime 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.chart_digest import ChartDigestPage from app.src.pages.global_track_priorities_page import GlobalTrackPrioritiesPage 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): date_1 = "2021-01-18" date_2 = "2020-11-16" date_3 = "2021-01-17" date_4 = "2020-11-15" @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.chartDigestPage = ChartDigestPage(self.driver) self.gtp = GlobalTrackPrioritiesPage(self.driver) self.lnp = LeftNavigationPanel(self.driver) self.chart_digest = ChartDigestPage(self.driver) self.trackPage = TrackPage(self.driver) self.api_client = ApiClient() self.ts = TestStatus(self.driver) @allure.story("AP-4229") @allure.severity(allure.severity_level.NORMAL) @allure.title("GTP. 'Tracks of the Week' section verification STEPS 1-10") @allure.description("""TC verifies 'Tracks of the Week' section is shown in accordance to requirements. STEPS 1-10""") def test_track_of_the_week_section_steps_1_10(self): self.loginPage.login_with_worker() # step 8 self.lnp.open_gtp() gtp_count = self.chartDigestPage.get_gtp_tracks_count() if gtp_count > 0: track = self.gtp.get_tracks_card_info()[0] latest_date = self.api_client.get_latest_date_date() streams_date = str(datetime.datetime.strptime(track["streams-title"].split(" ")[-1], self.trackPage.get_date_format_from_locale()).date()) self.ts.markFinal(streams_date == latest_date, f"streams date: {streams_date} \nlatest date: {latest_date}") self.gtp.open_gtp_page_from_url(market=AppConfig.get("market")["us"]["market"], date=self.date_2) # step 1 self.gtp.verify_tow_elements() # step 2-3 tracks = self.gtp.get_tracks_card_info() track_names = [t["track-name"] for t in tracks] self.ts.markFinal(track_names == sorted(track_names), f"track names are sorted: {track_names}") # step 4 self.gtp.open_gtp_page_from_url(market=AppConfig.get("market")["us"]["market"], date=self.date_1) self.gtp.click_track_name_verify() # step 5 self.gtp.open_gtp_page_from_url(market=AppConfig.get("market")["us"]["market"], date=self.date_1) self.gtp.click_artist_name_verify() # step 6 self.gtp.open_gtp_page_from_url(market=AppConfig.get("market")["us"]["market"], date=self.date_1) self.gtp.verify_hot_hits_tooltip_and_click() # step 7 for d in ["streams-title", "hot-hits-title", "chart-position-title"]: gtp_date = datetime.datetime.strptime(tracks[0][d].split(" ")[-1], self.trackPage.get_date_format_from_locale()).date() self.ts.markFinal(isinstance(gtp_date, datetime.date), f"{gtp_date} is date") # step 9 self.gtp.open_gtp_page_from_url(market=AppConfig.get("market")["us"]["market"], date=self.date_1) track = self.gtp.get_tracks_card_info()[0] streams_gtp_ui = int(track["streams-value"].replace(",", "")) streams_tp_api_resp = self.api_client.get_track_per_country(isrc="USSM12100202", start_date=self.date_1, end_date=self.date_1, vendor="spotify") streams_tp_api = 0 for r in streams_tp_api_resp: if r["countryCode"] == AppConfig.get("market")["us"]["market"]: streams_tp_api = r["data"][0]["streams"] self.ts.markFinal(streams_gtp_ui == streams_tp_api, f"streams values is: {track['streams-value']}\nexpected: {streams_tp_api}") # step 10 self.gtp.open_gtp_page_from_url(market=AppConfig.get("market")["us"]["market"], date=self.date_4) position = self.gtp.get_chart_position_value() self.ts.markFinal(position == "#20\n5", f"position values is: {position}") @allure.story("AP-4229") @allure.severity(allure.severity_level.NORMAL) @allure.title("GTP. 'Tracks of the Week' section verification STEPS 11-20") @allure.description("""TC verifies 'Tracks of the Week' section is shown in accordance to requirements. STEPS 11-20""") def test_track_of_the_week_section_steps_11_20(self): self.loginPage.login_with_worker() # step 12 self.lnp.open_gtp() self.gtp.verify_chart_position_date(market=AppConfig.get("market")["us"]["market"]) # step 11 self.gtp.open_gtp_page_from_url(market=AppConfig.get("market")["greece"]["market"], date=self.date_3) position = self.gtp.get_chart_position_value() self.gtp.verify_chart_position_circle(circle=self.gtp.circle_new) self.ts.markFinal(position == "#182", f"position values is: {position}") # step 13 for m, d in [("us", "2020-12-21"), ("us", "2020-12-23"), ("us", "2020-12-17"), ("greece", self.date_3)]: self.gtp.open_gtp_page_from_url(market=AppConfig.get("market")[m]["market"], date=d) self.gtp.compare_chart_position_trend_with_spotify_chart(market=AppConfig.get("market")[m]["market"], date=d) # step 14 self.gtp.open_cpot_popup() # step 17 self.gtp.open_gtp_page_from_url(market=AppConfig.get("market")["us"]["market"], date=self.date_4) position_value = self.gtp.get_chart_position_value(position=2) self.gtp.open_cpot_popup(position=2) self.ts.markFinal(position_value == "—", f"positions value: {position_value}") # step 18 self.gtp.open_gtp_page_from_url(market=AppConfig.get("market")["us"]["market"], date=self.date_2) self.gtp.open_cpot_popup(open=False) position_value = self.gtp.get_chart_position_value() self.ts.markFinal(position_value == "#13\n2", f"positions value: {position_value}") # step 19-20 self.gtp.open_gtp_page_from_url(market=AppConfig.get("market")["us"]["market"], date=self.date_4) track_info_1 = self.gtp.get_tracks_card_info() self.gtp.open_gtp_page_from_url(market=AppConfig.get("market")["us"]["market"], date=self.date_2) track_info_2 = self.gtp.get_tracks_card_info() self.ts.markFinal(track_info_1 != track_info_2, "track info is updated due to chosen date") # NOT AUTOMATED STEPS - 15-16, 21-22