import unittest import allure import pytest from ui_automation_framework.core import TestStatus from ui_automation_framework.utils import CoreConfig 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 DeepLinkingTrackPageTest(unittest.TestCase): spotify_track_id = "3vv9phIu6Y1vX3jcqaGz5Z" spotify_track_id_second = "7eJMfftS33KTjuF7lTsMCx" united_states = "United States" global_market = "Global" default_url_no_market = "{}/spotify/track/{}".format(CoreConfig.ENV_BASE_URL, spotify_track_id) default_url_no_market_second = "{}/spotify/track/{}".format(CoreConfig.ENV_BASE_URL, spotify_track_id_second) incorrent_dates_urls = [ "?market=4&str_gr_dsp=2&str_gr_source=2&str_gr_view=3&qwerty=12", "?market=4&str_gr_dsp=2&qwerty=12&str_gr_source=2&str_gr_view=3", "?market=4&playlist_position_popup=1&playlist_id=37i9dQZF1DX46HBMApdlID&" "pl_pos_popup_start_date=2016-01-21&pl_pos_popup_end_date=2016-01-17", "?str_gr_start_date=2013-01-14&str_gr_end_date=2013-01-01&str_gr_dsp=2" "&str_gr_source=1&str_gr_view=3", "?market=4&playlist_position_popup=1&playlist_id=37i9dQZF1DWTLSN7iG21yC" "&pl_pos_popup_start_date=2017-12-31&pl_pos_popup_end_date=2017-01-01", "?market=4&str_gr_start_date=2019-31-12&str_gr_end_date=2020-01-14", "?market=4&playlist_position_popup=1&playlist_id=37i9dQZF1DWTLSN7iG21yC" "&pl_pos_popup_start_date=2019-31-12&pl_pos_popup_end_date=2020-01-17", "?market=4&str_gr_start_date=2020-01-01&str_gr_end_date=2020-16-01", "?market=4&str_gr_dsp=3&str_gr_view=3&playlist_position_popup=1" "&playlist_id=37i9dQZF1DWTLSN7iG21yC&pl_pos_popup_start_date=2019-12-21" "&pl_pos_popup_end_date=2020-17-01", "?market=4&str_gr_start_date=12121221&str_gr_end_date=2020-01-16", "?market=4&str_gr_dsp=3&str_gr_view=3&playlist_position_popup=1" "&playlist_id=37i9dQZF1DWTLSN7iG21yC&pl_pos_popup_start_date=2222222" "&pl_pos_popup_end_date=2020-01-17", "?market=4&str_gr_start_date=2020-01-01&str_gr_end_date=222222", "?market=4&playlist_position_popup=1&playlist_id=37i9dQZF1DWTLSN7iG21yC" "&pl_pos_popup_start_date=2019-12-21&pl_pos_popup_end_date=222222", "?market=4&str_gr_start_date=2020-01-01&str_gr_dsp=3&str_gr_view=3", "?market=4&str_gr_dsp=3&str_gr_view=3&playlist_position_popup=1" "&playlist_id=37i9dQZF1DWTLSN7iG21yC&pl_pos_popup_start_date=2019-12-21", "?market=4&str_gr_end_date=2020-01-01", "?str_gr_dsp=3&str_gr_view=3&playlist_position_popup=1&playlist_id=37i9dQZF1DWTLSN7iG21yC" "&pl_pos_popup_end_date=2020-01-17", ] incorrent_other_urls = [ "?market=4&str_gr_dsp=2&str_gr_source=6", "?market=4&str_gr_dsp=2&str_gr_source=12", "?market=4&str_gr_dsp=3&str_gr_source=5", "?market=4&str_gr_dsp=3&str_gr_source=12", "?market=4&str_gr_dsp=4&str_gr_source=0", "?market=4&str_gr_dsp=4&str_gr_source=0", "?market=4&str_gr_tab=2&str_gr_view=3", "?tr_det_tab=2&tr_det_view=1&market=4", "?tr_det_tab=3&tr_det_view=2&market=4", "?tr_det_tab=4&tr_det_view=2&market=4", "?market=4&tr_det_playlist_type=1&tr_det_owner_ctg=0", "?market=4&tr_det_playlist_type=1&tr_det_owner_ctg=5", "?market=4&tr_det_playlist_type=1&tr_det_owner_ctg=7", "?market=4&tr_det_playlist_type=1&tr_det_owner_ctg=10", "?tr_det_tab=3&market=4&tr_det_playlist_type=1", "?tr_det_tab=4&market=4&tr_det_owner_ctg=2", "?tr_det_tab=3&market=4&tr_det_owner_ctg_prev=0", "?tr_det_tab=4&market=4&tr_det_owner_ctg_prev=10", "?tr_det_tab=3&market=4&tr_det_owner_market=ar", "?tr_det_tab=3&market=4&tr_det_owner_market_prev=at", "?tr_det_tab=4&market=4&tr_det_filter=pop", "?tr_det_tab=2&market=4&tr_det_charts_dsp=3", "?tr_det_tab=2&market=4&tr_det_chart_beta_dsp=1", "?market=4&tr_det_view=2&tr_det_playlist_type=1", "?market=4&tr_det_view=2&tr_det_owner_ctg=2", "?market=4&tr_det_view=2&tr_det_owner_ctg_prev=3", "?market=4&tr_det_view=2&tr_det_owner_market=us", ] incorrect_url_global = [ "?market=14&tr_det_market_str=1", "?market=14&str_gr_dsp=3&str_gr_view=3&tr_det_market_str=2", ] incorrect_urls_future = [ "?str_gr_start_date={}&str_gr_end_date={}&str_gr_dsp=2&str_gr_source=1&str_gr_view=3", "?market=4&playlist_position_popup=1&playlist_id=37i9dQZF1DWTLSN7iG21yC" "&pl_pos_popup_start_date={}&pl_pos_popup_end_date={}", ] @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.trackPage = TrackPage(self.driver) self.ts = TestStatus(self.driver) @allure.story("AP-2348") @allure.severity(allure.severity_level.NORMAL) @allure.title("Deep linking: Checklist for verification of negative scenarios handling STEP 1") @allure.description( "If the user adds an incorrect parameter(s) to the URL manually (any incorrect key/value or extra keys or " "mutually exclusive keys or incorrect dates, etc), then the URL and the page must be dropped to its default " "state (track ID + market selection taken from the local storage or auth0). STEP 1" ) def test_negative_scenarios_handling_dates_step_1(self): self.loginPage.login(CoreConfig.USER_EMAIL, CoreConfig.USER_PASSWORD) self.loginPage.is_logged_in() self.trackPage.open_spotify_track_page(self.spotify_track_id) self.trackPage.select_market(self.united_states) default_url = self.trackPage.get_url() before_dsp = self.trackPage.get_current_dsp() before_country = self.trackPage.graph_get_selected_market() before_start_date = self.trackPage.get_calendar_start_date() before_end_date = self.trackPage.get_calendar_end_date before_parameters = [before_dsp, before_country, before_start_date, before_end_date] for url in self.incorrent_dates_urls: self.trackPage.open_url(self.default_url_no_market + url) self.trackPage.is_graph_period_displayed() current_url = self.trackPage.get_url() after_dsp = self.trackPage.get_current_dsp() after_country = self.trackPage.graph_get_selected_market() self.trackPage.verify_graph_view_chosen("Line Graph") after_start_date = self.trackPage.get_calendar_start_date() after_end_date = self.trackPage.get_calendar_end_date after_parameters = [after_dsp, after_country, after_start_date, after_end_date] self.ts.markFinal( current_url == default_url, "url after incorrect url parameters is: {} " "and equal to default: {}, wrong url: {}".format(current_url, default_url, url), ) self.ts.markFinal( before_parameters == after_parameters, "before parameters: {} are equal after parameters:" " {}".format(before_parameters, after_parameters), ) @allure.story("AP-2348") @allure.severity(allure.severity_level.NORMAL) @allure.title("Deep linking: Checklist for verification of negative scenarios handling STEP 2") @allure.description( "If the user adds an incorrect parameter(s) to the URL manually (any incorrect key/value or extra keys or " "mutually exclusive keys or incorrect dates, etc), then the URL and the page must be dropped to its default " "state (track ID + market selection taken from the local storage or auth0). STEP 2" ) def test_negative_scenarios_handling_other_step_2(self): self.loginPage.login(CoreConfig.USER_EMAIL, CoreConfig.USER_PASSWORD) self.loginPage.is_logged_in() self.trackPage.open_spotify_track_page(self.spotify_track_id_second) self.trackPage.select_market(self.united_states) default_url = self.trackPage.get_url() before_dsp = self.trackPage.get_current_dsp() before_start_date = self.trackPage.get_calendar_start_date() before_end_date = self.trackPage.get_calendar_end_date before_parameters = [before_dsp, before_start_date, before_end_date] for url in self.incorrent_other_urls: self.trackPage.open_url(self.default_url_no_market_second + url) self.trackPage.is_graph_period_displayed() current_url = self.trackPage.get_url() after_dsp = self.trackPage.get_current_dsp() self.trackPage.verify_graph_view_chosen("Line Graph") after_start_date = self.trackPage.get_calendar_start_date() after_end_date = self.trackPage.get_calendar_end_date after_parameters = [after_dsp, after_start_date, after_end_date] self.ts.markFinal( current_url == default_url, "url after incorrect url parameters is: {} " "and equal to default: {}, wrong url: {}".format(current_url, default_url, url), ) self.ts.markFinal( before_parameters == after_parameters, "before parameters: {} are equal after parameters:" " {}".format(before_parameters, after_parameters), ) @allure.story("AP-2348") @allure.severity(allure.severity_level.NORMAL) @allure.title("Deep linking: Checklist for verification of negative scenarios handling STEP 3") @allure.description( "If the user adds an incorrect parameter(s) to the URL manually (any incorrect key/value or extra keys or " "mutually exclusive keys or incorrect dates, etc), then the URL and the page must be dropped to its default " "state (track ID + market selection taken from the local storage or auth0). STEP 3" ) def test_negative_scenarios_handling_global_step_3(self): self.loginPage.login(CoreConfig.USER_EMAIL, CoreConfig.USER_PASSWORD) self.loginPage.is_logged_in() self.trackPage.open_spotify_track_page(self.spotify_track_id_second) self.trackPage.select_market(self.global_market) default_url = self.trackPage.get_url() before_dsp = self.trackPage.get_current_dsp() before_country = self.trackPage.graph_get_selected_market() before_start_date = self.trackPage.get_calendar_start_date() before_end_date = self.trackPage.get_calendar_end_date before_parameters = [before_dsp, before_country, before_start_date, before_end_date] for url in self.incorrect_url_global: self.trackPage.open_url(self.default_url_no_market_second + url) self.trackPage.is_graph_period_displayed() current_url = self.trackPage.get_url() after_dsp = self.trackPage.get_current_dsp() after_country = self.trackPage.graph_get_selected_market() self.trackPage.verify_graph_view_chosen("Line Graph") after_start_date = self.trackPage.get_calendar_start_date() after_end_date = self.trackPage.get_calendar_end_date after_parameters = [after_dsp, after_country, after_start_date, after_end_date] self.ts.markFinal( current_url == default_url, "url after incorrect url parameters is: {} " "and equal to default: {}, wrong url: {}".format(current_url, default_url, url), ) self.ts.markFinal( before_parameters == after_parameters, "before parameters: {} are equal after parameters:" " {}".format(before_parameters, after_parameters), ) @allure.story("AP-2348") @allure.severity(allure.severity_level.NORMAL) @allure.title("Deep linking: Checklist for verification of negative scenarios handling STEP 4") @allure.description( "If the user adds an incorrect parameter(s) to the URL manually (any incorrect key/value or extra keys or " "mutually exclusive keys or incorrect dates, etc), then the URL and the page must be dropped to its default " "state (track ID + market selection taken from the local storage or auth0). STEP 4" ) def test_negative_scenarios_handling_future_dates_step_4(self): self.loginPage.login(CoreConfig.USER_EMAIL, CoreConfig.USER_PASSWORD) self.loginPage.is_logged_in() self.trackPage.open_spotify_track_page(self.spotify_track_id) self.trackPage.select_market(self.united_states) default_url = self.trackPage.get_url() before_dsp = self.trackPage.get_current_dsp() before_country = self.trackPage.graph_get_selected_market() before_start_date = self.trackPage.get_calendar_start_date() before_end_date = self.trackPage.get_calendar_end_date before_parameters = [before_dsp, before_country, before_start_date, before_end_date] for url in self.incorrect_urls_future: start_future = self.trackPage.get_future_date_in_month(1) end_future = self.trackPage.get_future_date_in_month(2) self.trackPage.open_url(self.default_url_no_market + url.format(start_future, end_future)) self.trackPage.is_graph_period_displayed() current_url = self.trackPage.get_url() after_dsp = self.trackPage.get_current_dsp() after_country = self.trackPage.graph_get_selected_market() self.trackPage.verify_graph_view_chosen("Line Graph") after_start_date = self.trackPage.get_calendar_start_date() after_end_date = self.trackPage.get_calendar_end_date after_parameters = [after_dsp, after_country, after_start_date, after_end_date] self.ts.markFinal( current_url == default_url, "url after incorrect url parameters is: {} " "and equal to default: {}, wrong url: {}".format(current_url, default_url, url), ) self.ts.markFinal( before_parameters == after_parameters, "before parameters: {} are equal after parameters:" " {}".format(before_parameters, after_parameters), )