import datetime 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, CoreConfig from app.api_client import ApiClient from app.mysql_db_client_custom import MySqlClient from app.src.pages.comparison_page import TrackComparisonPage from app.src.pages.global_track_priorities_page import GlobalTrackPrioritiesPage from app.src.pages.login_page import LoginPage from app.src.pages.third_party.spotifycharts_page import SpotifyCharts 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): us = AppConfig.get("market")["us"] @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.topChartsPage = TopChartsPage(self.driver) self.trackPage = TrackPage(self.driver) self.comparison_page = TrackComparisonPage(self.driver) self.spotify_charts = SpotifyCharts(self.driver) self.gtp = GlobalTrackPrioritiesPage(self.driver) self.ts = TestStatus(self.driver) self.api_client = ApiClient() self.sql_client = MySqlClient() @allure.story("AP-6294") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-5820] Top Charts. Trending tab deep linking verification") @allure.description("""TC verifies deep linking on the Charts page → Trending Music Videos tab.""") def test_top_trending_tab_deep_linking(self): self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.topChartsPage.open_top_chart_page() # step 1 url_step_1 = self.trackPage.get_url() assert_that(self.topChartsPage.get_url()).contains(self.topChartsPage.date) self.trackPage.verify_params_in_url({self.topChartsPage.tab: self.topChartsPage.SPOTIFY_TYPE}) # step 2 old_date = "2021-11-20" self.trackPage.change_param_in_url_new(self.topChartsPage.date, old_date) self.topChartsPage.wait_for_chart_table() self.trackPage.refresh() self.topChartsPage.wait_for_chart_table() self.trackPage.verify_params_in_url({self.topChartsPage.date: old_date}) date_ui = self.topChartsPage.get_chosen_date() assert_that(date_ui).is_equal_to(datetime.datetime.strptime(old_date, "%Y-%m-%d").strftime(AppConfig.get("date_formats")["mm/dd/yy"])) # step 3 self.topChartsPage.switch_tab(self.topChartsPage.APPLE_TYPE) self.trackPage.verify_params_not_in_url([self.topChartsPage.date]) self.trackPage.verify_params_in_url({self.topChartsPage.tab: self.topChartsPage.APPLE_TYPE}) # step 4 self.topChartsPage.switch_tab(self.topChartsPage.YOUTUBE_TYPE) self.trackPage.verify_params_in_url({self.topChartsPage.tab: self.topChartsPage.YOUTUBE_TYPE}) self.topChartsPage.get_trending_market() assert_that(self.topChartsPage.get_url()).contains(self.topChartsPage.date, self.topChartsPage.market) # step 5 self.topChartsPage.select_trending_market(AppConfig.get("market")["us"]["name"]) self.trackPage.refresh() date_yt_previous = self.topChartsPage.select_trending_previous_month_first_day_date() url_step_5 = self.topChartsPage.get_url() # step 6 self.topChartsPage.select_trending_market(AppConfig.get("market")["australia"]["name"]) self.trackPage.verify_params_in_url({self.topChartsPage.tab: self.topChartsPage.YOUTUBE_TYPE, self.topChartsPage.date: date_yt_previous, self.topChartsPage.market: AppConfig.get("market")["australia"]["market"]}) url_step_6 = self.trackPage.get_url() # step 7 self.topChartsPage.refresh() date_yt_ui = self.topChartsPage.get_selected_trending_date() market_yt_ui = self.topChartsPage.get_trending_market() assert_that(date_yt_ui).is_equal_to(date_yt_previous) assert_that(market_yt_ui).is_equal_to(AppConfig.get("market")["australia"]["name"]) assert_that(url_step_6).is_equal_to(self.trackPage.get_url()) # step 8 self.topChartsPage.top_charts_tables_filtering(dsp=self.topChartsPage.TRENDING_TYPE, text="abc") assert_that(url_step_6).is_equal_to(self.trackPage.get_url()) # step 9 dates_yt = ["12/07/21", "11/07/21", "10/07/21"] for d in dates_yt: self.topChartsPage.change_trending_date(d) self.topChartsPage.go_back() date_ui = self.topChartsPage.get_selected_trending_date() assert_that(datetime.datetime.strptime(dates_yt[1], self.trackPage.get_date_format_from_locale()).strftime("%Y-%m-%d")).is_equal_to(date_ui) self.topChartsPage.go_back() date_ui = self.topChartsPage.get_selected_trending_date() assert_that(datetime.datetime.strptime(dates_yt[0], self.trackPage.get_date_format_from_locale()).strftime("%Y-%m-%d")).is_equal_to(date_ui) self.topChartsPage.go_back() self.topChartsPage.get_selected_trending_date() assert_that(url_step_6).is_equal_to(self.topChartsPage.get_url()) # step 10 for d in dates_yt: self.trackPage.go_forward() date_ui = self.topChartsPage.get_selected_trending_date() assert_that(datetime.datetime.strptime(dates_yt[dates_yt.index(d)], self.trackPage.get_date_format_from_locale()).strftime("%Y-%m-%d")).is_equal_to(date_ui) # step 11 self.trackPage.change_param_in_url_new(self.topChartsPage.date, "2021-30-30") self.topChartsPage.wait_for_table_load() assert_that(url_step_1).is_equal_to(self.trackPage.get_url()) self.topChartsPage.open_url(url_step_6) self.trackPage.change_param_in_url_new(self.topChartsPage.market, "mc") self.topChartsPage.wait_for_table_load() assert_that(url_step_5).is_equal_to(self.trackPage.get_url()) self.topChartsPage.open_url(url_step_6 + "abc") self.topChartsPage.wait_for_table_load() assert_that(url_step_1).is_equal_to(self.trackPage.get_url()) # step 12 self.trackPage.open_url(f"{CoreConfig.ENV_BASE_URL}/top-carts?") self.gtp.verify_404_page_present()