import datetime import time 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.src.pages.chart_digest import ChartDigestPage from app.src.pages.global_track_priorities_page import GlobalTrackPrioritiesPage 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): global_market = AppConfig.get("market")["global"]["name"] global_market_in_url = "_gl" us_market = AppConfig.get("market")["us"]["name"] us_market_in_url = AppConfig.get("market")["us"]["market"] albania_market = AppConfig.get("market")["albania"]["name"] australia_market = AppConfig.get("market")["australia"]["name"] australia_market_in_url = AppConfig.get("market")["australia"]["market"] canada_market = AppConfig.get("market")["canada"]["name"] brazil_market = AppConfig.get("market")["brazil"]["name"] brazil_market_in_header = AppConfig.get("market")["brazil"]["header"] brazil_market_in_url = AppConfig.get("market")["brazil"]["market"] algeria_market = AppConfig.get("market")["algerial"]["name"] date = "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.trackPage = TrackPage(self.driver) self.api_client = ApiClient() self.ts = TestStatus(self.driver) @allure.issue("https://data-analytics.atlassian.net/browse/AP-9972") @pytest.mark.flaky(reruns=0) @allure.story("AP-4228") @allure.severity(allure.severity_level.NORMAL) @allure.title("GTP page main elements and correctness of set deep link verification steps 1-12") @allure.description("""TC verifies main elements on GTP page and correctness of set deep link.""") def test_gtp_header_and_deep_linking_steps_1_12(self): self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.chartDigestPage.page_has_loaded() self.trackPage.select_market(self.us_market) # step1 self.chartDigestPage.open_gtp_from_dashboard() time.sleep(5) gtp_url = self.gtp.get_url() gtp_date_url = self.trackPage.parameter_from_url("hd_date") gtp_date_url = datetime.datetime.strptime(gtp_date_url, "%Y-%m-%d") api_resp_dates = self.api_client.get_tracks_gtp() gtp_date = api_resp_dates["gtp_date"] self.trackPage.log.info(f"API GTP date: {gtp_date}") gtp_date_resp = datetime.datetime.strptime(gtp_date, "%Y-%m-%d") self.trackPage.log.info(f"API GTP date formatted type: {type(gtp_date_resp)}") assert_that(gtp_url).contains(CoreConfig.ENV_BASE_URL + "/global-track-priorities?hd_date=", "&hd_filter_market={}".format(self.us_market_in_url)) assert_that(gtp_date_url).is_close_to(gtp_date_resp, datetime.timedelta(days=1)) # step2 self.gtp.verify_gtp_elements() # step3 self.gtp.verify_info_icon_tooltip() # step4 market_value = self.gtp.get_gtp_market_value() self.ts.markFinal( market_value == self.us_market, "STEP 4: By default market selected from top header is selected in GTP Market DD.", ) # step5 market_from_url = self.trackPage.parameter_from_url(self.gtp.hd_filter_market) self.ts.markFinal( market_from_url == self.us_market_in_url, "STEP 5: Market set in market DD is reflected in the URL. Url market is " + str(self.us_market_in_url), ) # step6 self.gtp.verify_chosen_gtp_market_bold(self.us_market) gtp_markets_list = set(self.gtp.get_gtp_markets_list()) top_header_markets_list = set(self.gtp.get_top_header_markets_list()) self.ts.markFinal( gtp_markets_list == top_header_markets_list, "STEP 6: GTP markets drop list includes the same list of markets as we have in the top header.", ) # step 7 self.gtp.hover_over_gtp_market_and_verify_highlighted(self.albania_market) self.gtp.select_gtp_market(self.global_market) gtp_market_value = self.gtp.gtp_drop_down_market_value() self.ts.markFinal(gtp_market_value == self.global_market, "STEP 7: GTP market is changed.") top_header_market_value = self.gtp.top_header_drop_down_market_value() market_upper = str(self.us_market_in_url).upper() self.ts.markFinal(top_header_market_value == market_upper, "STEP 7: Top Header market is not changed.") # step 8 gtp_market_from_url = self.trackPage.parameter_from_url(self.gtp.hd_filter_market) self.ts.markFinal( gtp_market_from_url == self.global_market_in_url, "STEP 8: URL is getting updated automatically with selected market key.", ) # step 10 self.gtp.select_first_date_of_the_month() datepicker_date = self.gtp.get_datepicker_selected_date() url_date = self.trackPage.parameter_from_url(self.gtp.hd_date) self.ts.markFinal( datepicker_date == url_date, "STEP 10: URL is getting updated automatically with new parameter hd_date = selected date.", ) market_in_url = self.trackPage.parameter_from_url(self.gtp.hd_filter_market) self.ts.markFinal(market_in_url == self.global_market_in_url, "STEP 10: Global market parameter is still in URL.") # step11 self.gtp.go_back() self.gtp.verify_date_is_changed_to_today() self.gtp.go_back() market_value = self.gtp.get_gtp_market_value() self.ts.markFinal(market_value == self.us_market, "STEP 11: Market is changes to the previous one.") market_from_url = self.trackPage.parameter_from_url(self.gtp.hd_filter_market) self.ts.markFinal( market_from_url == self.us_market_in_url, "STEP 11: Market set in market DD is reflected in the URL. Url market is " + str(self.us_market_in_url), ) self.gtp.go_back() self.chartDigestPage.is_opened() # step12 self.gtp.go_forward() market_value = self.gtp.get_gtp_market_value() self.ts.markFinal(market_value == self.us_market, "STEP 12: Market is previously selected one.") self.gtp.verify_date_is_changed_to_today() self.gtp.go_forward() market_value = self.gtp.get_gtp_market_value() self.ts.markFinal(market_value == self.global_market, "STEP 12: Market is changes to the previously selected.") market_in_url = self.trackPage.parameter_from_url(self.gtp.hd_filter_market) self.ts.markFinal(market_in_url == self.global_market_in_url, "STEP 12: Global market parameter is still in URL.") top_header_market_value = self.gtp.top_header_drop_down_market_value() market_upper = str(self.us_market_in_url).upper() self.ts.markFinal(top_header_market_value == market_upper, "STEP 12: Top Header market is not changed.") self.gtp.go_forward() self.gtp.verify_first_day_of_the_month_selected() datepicker_date = self.gtp.get_datepicker_selected_date() url_date = self.trackPage.parameter_from_url(self.gtp.hd_date) self.ts.markFinal(datepicker_date == url_date, "STEP 12: URL contains first day of the month.") @allure.story("AP-4228") @allure.severity(allure.severity_level.NORMAL) @allure.title("GTP page main elements and correctness of set deep link verification steps 13-21") @allure.description("""TC verifies main elements on GTP page and correctness of set deep link.""") def test_gtp_header_and_deep_linking_steps_13_21(self): self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.chartDigestPage.page_has_loaded() self.trackPage.select_market(self.us_market) # step13 self.gtp.open_gtp_page_from_url(self.australia_market_in_url, self.date) market_value = self.gtp.get_gtp_market_value() self.ts.markFinal( market_value == self.australia_market, "STEP 13: Market added via URL is displayed on UI: " + self.australia_market, ) datepicker_date = self.gtp.get_datepicker_selected_date() url_date = self.trackPage.parameter_from_url(self.gtp.hd_date) self.ts.markFinal(datepicker_date == url_date, "STEP 13: Date added via URL is displayed on UI:" + self.date) # step 14 self.gtp.refresh() market_value = self.gtp.get_gtp_market_value() self.ts.markFinal( market_value == self.australia_market, "STEP 14: Market added via URL still displayed on UI: " + self.australia_market, ) datepicker_date = self.gtp.get_datepicker_selected_date() url_date = self.trackPage.parameter_from_url(self.gtp.hd_date) self.ts.markFinal(datepicker_date == url_date, "STEP 14: Date added via URL still displayed on UI:" + self.date) # step 15 self.gtp.select_gtp_market(self.canada_market) gtp_market_value = self.gtp.gtp_drop_down_market_value() self.ts.markFinal(gtp_market_value == self.canada_market, "STEP 15: GTP market is changed to " + self.canada_market) top_header_market_value = self.gtp.top_header_drop_down_market_value() market_upper = str(self.us_market_in_url).upper() self.ts.markFinal(top_header_market_value == market_upper, "STEP 15: Top Header market is not changed. It is " + market_upper) datepicker_date = self.gtp.get_datepicker_selected_date() self.ts.markFinal(datepicker_date == self.date, "STEP 15: Date added via URL still displayed on UI: " + self.date) # step 16 self.trackPage.select_market(self.brazil_market) gtp_market_value = self.gtp.gtp_drop_down_market_value() self.ts.markFinal(gtp_market_value == self.brazil_market, "STEP 16: GTP market is changed to " + self.brazil_market) top_header_market_value = self.gtp.top_header_drop_down_market_value() self.ts.markFinal( top_header_market_value == self.brazil_market_in_header, "STEP 16: Top Header market is changed to " + self.brazil_market, ) datepicker_date = self.gtp.get_datepicker_selected_date() self.ts.markFinal(datepicker_date == self.date, "STEP 16: Date added via URL still displayed on UI: " + self.date) # step 17 market_from_url = self.trackPage.parameter_from_url(self.gtp.hd_filter_market) url_without_date_parameter = CoreConfig.ENV_BASE_URL + "/global-track-priorities?hd_filter_market=" + market_from_url self.gtp.log.info("url without date parameter: " + url_without_date_parameter) self.gtp.go_to_url(url_without_date_parameter) self.gtp.verify_date_is_changed_to_today() gtp_market_value = self.gtp.gtp_drop_down_market_value() self.ts.markFinal(gtp_market_value == self.brazil_market, "STEP 17: GTP market in Market dd is left as " + self.brazil_market) gtp_market_in_url = self.trackPage.parameter_from_url(self.gtp.hd_filter_market) self.ts.markFinal( gtp_market_in_url == self.brazil_market_in_url, "STEP 17: GTP market in Market dd is left as " + self.brazil_market_in_url, ) # step 18 self.gtp.select_first_date_of_the_month() date_from_url = self.trackPage.parameter_from_url(self.gtp.hd_date) url_without_market_parameter = CoreConfig.ENV_BASE_URL + "/global-track-priorities?hd_date=" + date_from_url self.gtp.log.info("url without market parameter: " + url_without_market_parameter) self.gtp.go_to_url(url_without_market_parameter) gtp_market_value_in_url = self.trackPage.parameter_from_url(self.gtp.hd_filter_market) self.ts.markFinal( gtp_market_value_in_url == self.brazil_market_in_url, "STEP 18: GTP market in url is left as " + self.brazil_market_in_url, ) top_header_market_value = str(self.gtp.top_header_drop_down_market_value()).lower() self.ts.markFinal( gtp_market_value_in_url == top_header_market_value, "STEP 18: GTP market in url the same as " + top_header_market_value, ) # step 19 self.gtp.select_gtp_market(self.algeria_market) card_chart_position = self.gtp.get_card_chart_position() self.ts.markFinal(card_chart_position == "N/A", "STEP 19: N/A is shown for market where Spotify Top Chart doesn’t exist") # step 20 market_from_url = self.trackPage.parameter_from_url(self.gtp.hd_filter_market) url_with_wrong_market = CoreConfig.ENV_BASE_URL + "/global-track-priorities?hd_filter_market=" + market_from_url + "ts" self.gtp.log.info("url with wrong market is: " + url_with_wrong_market) self.gtp.go_to_url(url_with_wrong_market) time.sleep(2) gtp_url = self.gtp.get_url() expected_url = CoreConfig.ENV_BASE_URL + "/global-track-priorities?hd_date={}&hd_filter_market={}".format(str(datetime.datetime.today().date()), self.brazil_market_in_url) # step 20 assert_that(gtp_url).is_equal_to(expected_url) self.gtp.select_first_date_of_the_month() date_from_url = self.trackPage.parameter_from_url(self.gtp.hd_date) url_with_wrong_date = CoreConfig.ENV_BASE_URL + "/global-track-priorities?hd_filter_market=" + market_from_url + "&hd_date=" + date_from_url + "ts" self.gtp.log.info("url with wrong date is: " + url_with_wrong_date) self.gtp.go_to_url(url_with_wrong_date) time.sleep(2) gtp_url = self.gtp.get_url() expected_url = CoreConfig.ENV_BASE_URL + "/global-track-priorities?hd_date={}&hd_filter_market={}".format(str(datetime.datetime.today().date()), self.brazil_market_in_url) self.ts.markFinal( gtp_url == expected_url, "STEP 20: After adding a wrong date, the URL and the page is dropped to its default state: " + expected_url, ) url = self.gtp.get_url() url_with_updated_key_value = url + "&test=123" self.gtp.log.info("url with updated key/value is: " + url_with_updated_key_value) self.gtp.go_to_url(url_with_updated_key_value) time.sleep(2) gtp_url = self.gtp.get_url() expected_url = CoreConfig.ENV_BASE_URL + "/global-track-priorities?hd_date={}&hd_filter_market={}".format(str(datetime.datetime.today().date()), self.brazil_market_in_url) self.ts.markFinal( gtp_url == expected_url, "STEP 20: After adding a wrong key/value parameter, the URL and the page is dropped to its default state: " + expected_url, ) # step 21 url_with_updated_page_name = CoreConfig.ENV_BASE_URL + "/global-track-prioritiestest?hd_filter_market=" + market_from_url self.gtp.log.info("url with wrong name is: " + url_with_updated_page_name) self.gtp.go_to_url(url_with_updated_page_name) time.sleep(5) self.gtp.verify_404_page_present()