import random import unittest 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.src.pages.login_page import LoginPage from app.src.pages.top_charts_page import TopChartsPage from app.src.pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up") class TopChartsPageTest(unittest.TestCase): @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.topChartsPage = TopChartsPage(self.driver) self.trackPage = TrackPage(self.driver) self.api_client = ApiClient() self.ts = TestStatus(self.driver) @allure.story("AP-7623") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-5825][Top Charts. Shazam] Pop-up Graph verification") @allure.description("TC verifies graphs elements on the pop-up on the Top Charts page → 'Shazam Daily Top 200' tab.") def test_top_shazam_popup_graph_verification(self): self.loginPage.login_with_worker() self.trackPage.select_market(AppConfig.get("market")["global"]["name"]) self.topChartsPage.open_top_chart_page() self.topChartsPage.switch_tab(self.topChartsPage.SHAZAM_TYPE) # step 9 position = random.choice([1, 2, 3, 4, 5]) self.topChartsPage.shazam_open_popup(position) # step 2-3 self.topChartsPage.shazam_popup_verify_axis_and_legend() # step 4 positions_all_period_ui = self.topChartsPage.shazam_popup_get_min_max_graph() positions_all_period_api = self.get_min_max_positions_api() assert_that(min(positions_all_period_ui)).is_equal_to(min(positions_all_period_api)) assert_that(max(positions_all_period_ui)).is_equal_to(max(positions_all_period_api)) # steps 6-8 self.trackPage.select_previous_mounth_period() positions_month_period_ui = self.topChartsPage.shazam_popup_get_min_max_graph() positions_month_period_api = self.get_min_max_positions_api() assert_that(min(positions_month_period_ui)).is_equal_to(min(positions_month_period_api)) assert_that(max(positions_month_period_ui)).is_equal_to(max(positions_month_period_api)) @allure.step("Top Charts - Shazam tab - get min max positions - API") def get_min_max_positions_api(self): track_link = self.topChartsPage.wait_for_element_visible("top-charts-shazam-modal-window-track-link") market_api = self.trackPage.parameter_from_url(self.trackPage.market) start = self.trackPage.get_calendar_start_date() end = self.trackPage.get_calendar_end_date() id = track_link.get_attribute("href").split("/")[-1] if id.isnumeric(): isrc = self.api_client.get_isrc_by_apple_id(id, "us")["data"][0]["attributes"]["isrc"] else: isrc = self.api_client.get_isrc_by_spotify_id(market_api, id)["external_ids"]["isrc"] api_data = self.api_client.get_shazam_charts_positions(market=market_api, isrc=isrc, start=start, end=end)["values"] positions_api = [d["position"] for d in api_data] return positions_api # NOT AUTOMATED STEPS - 1, 5