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.src.pages.comparison_page import TrackComparisonPage 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): @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.tp = TrackPage(self.driver) self.cp = TrackComparisonPage(self.driver) self.ts = TestStatus(self.driver) @allure.story("AP-4668") @allure.severity(allure.severity_level.NORMAL) @allure.title("Deep Linking of multiple sources") @allure.description("TC verifies Deep Linking functionality for the multi-selection option of ‘SOURCES’ droplist.") def test_dl_multiple_sources(self): self.loginPage.login_with_worker() self.tp.open_spotify_track_page_with_market_id(track_id=AppConfig.get("track40")["id"], market_id=AppConfig.get("market")["us"]["url"]) # step 1 self.tp.refresh() base_url = self.tp.get_url() self.tp.select_dsp("Spotify") source = self.tp.get_current_source() assert_that(base_url).starts_with(f'{CoreConfig.ENV_BASE_URL}/spotify/track/{AppConfig.get("track40")["id"]}?market={AppConfig.get("market")["us"]["url"]}') assert_that(source).is_equal_to(AppConfig.get("source")["all"]) # step 2 self.tp.dsp_change_sources([AppConfig.get("source")["collection"]]) self.tp.refresh() self.tp.verify_params_in_url({self.tp.market: AppConfig.get("market")["us"]["url"], self.tp.str_gr_source: "collection"}) # step 3 self.tp.dsp_change_sources([AppConfig.get("source")["collection"], AppConfig.get("source")["album_page"], AppConfig.get("source")["chart"], AppConfig.get("source")["radio"], AppConfig.get("source")["search"]]) self.tp.refresh() sources_url = self.tp.parameter_from_url(self.tp.str_gr_source).split(",") assert_that(sources_url).is_equal_to(["collection", "album", "chart", "radio", "search"]) # step 4 self.tp.switch_to_streams_by_markets_tab() self.tp.refresh() sources_url = self.tp.parameter_from_url(self.tp.str_gr_source).split(",") self.tp.verify_params_in_url({self.tp.market: AppConfig.get("market")["us"]["url"], self.tp.str_gr_tab: 2}) assert_that(sources_url).is_equal_to(["collection", "album", "chart", "radio", "search"]) # step 5 self.tp.dsp_change_sources([AppConfig.get("source")["all"]]) self.tp.refresh() self.tp.verify_params_in_url({self.tp.market: AppConfig.get("market")["us"]["url"], self.tp.str_gr_tab: 2}) self.tp.verify_params_not_in_url([self.tp.str_gr_source]) # step 6 self.tp.select_dsp(AppConfig.get("dsp")["total_streams"]) self.tp.refresh() self.tp.verify_params_in_url({self.tp.market: AppConfig.get("market")["us"]["url"], self.tp.str_gr_tab: 2, self.tp.str_gr_dsp: 4, self.tp.str_gr_view: 1}) # step 7 self.tp.select_dsp(AppConfig.get("dsp")["apple"]) self.tp.refresh() self.tp.verify_params_in_url({self.tp.market: AppConfig.get("market")["us"]["url"], self.tp.str_gr_tab: 2, self.tp.str_gr_dsp: 2, self.tp.str_gr_view: 2}) # step 8 self.tp.dsp_change_sources([AppConfig.get("source")["discovery"], AppConfig.get("source")["library"]]) self.tp.refresh() self.tp.verify_params_in_url({self.tp.market: AppConfig.get("market")["us"]["url"], self.tp.str_gr_tab: 2, self.tp.str_gr_dsp: 2, self.tp.str_gr_view: 2}) sources_url = self.tp.parameter_from_url(self.tp.str_gr_source).split(",") assert_that(sources_url).is_equal_to(["discovery", "library"]) # step 9 self.tp.switch_to_streams_and_sources_tab() self.tp.refresh() self.tp.verify_params_in_url({self.tp.market: AppConfig.get("market")["us"]["url"], self.tp.str_gr_tab: 1, self.tp.str_gr_dsp: 2}) sources_url = self.tp.parameter_from_url(self.tp.str_gr_source).split(",") source = self.tp.get_current_source() assert_that(sources_url).is_equal_to(["discovery", "library"]) assert_that(source).is_equal_to("2 Sources") # step 10 self.tp.dsp_change_sources([AppConfig.get("source")["search"]]) self.tp.refresh() self.tp.verify_params_in_url({self.tp.market: AppConfig.get("market")["us"]["url"], self.tp.str_gr_tab: 1, self.tp.str_gr_dsp: 2, self.tp.str_gr_source: "search"}) # step 11 self.tp.select_dsp(AppConfig.get("dsp")["amazon"]) self.tp.refresh() self.tp.verify_params_in_url({self.tp.market: AppConfig.get("market")["us"]["url"], self.tp.str_gr_tab: 1, self.tp.str_gr_dsp: 3, self.tp.str_gr_view: 2}) source = self.tp.get_current_source() assert_that(source).is_equal_to(AppConfig.get("source")["all"]) # step 12 self.tp.dsp_change_sources([AppConfig.get("source")["station"]]) self.tp.refresh() self.tp.verify_params_in_url({self.tp.str_gr_source: "station"}) self.tp.dsp_change_sources([AppConfig.get("source")["all"]]) self.tp.refresh() self.tp.verify_params_not_in_url([self.tp.str_gr_source]) self.tp.dsp_change_sources([AppConfig.get("source")["station"], AppConfig.get("source")["playlists"], AppConfig.get("source")["search"]]) self.tp.refresh() sources_url = sorted(self.tp.parameter_from_url(self.tp.str_gr_source).split(",")) assert_that(sources_url).is_equal_to(sorted(["station", "playlists", "search"])) # step 13 self.tp.go_back() self.refresh_and_verify_source_dsp(AppConfig.get("source")["all"]) self.tp.go_back() self.refresh_and_verify_source_dsp(AppConfig.get("source")["station"]) self.tp.go_back() self.refresh_and_verify_source_dsp(AppConfig.get("source")["all"]) self.tp.go_back() self.refresh_and_verify_source_dsp(AppConfig.get("source")["search"], AppConfig.get("dsp")["apple"]) # step 14 self.tp.go_forward() self.refresh_and_verify_source_dsp(AppConfig.get("source")["all"]) self.tp.go_forward() self.refresh_and_verify_source_dsp(AppConfig.get("source")["station"]) self.tp.go_forward() self.refresh_and_verify_source_dsp(AppConfig.get("source")["all"]) self.tp.go_forward() self.refresh_and_verify_source_dsp("3 Sources") sources_url = sorted(self.tp.parameter_from_url(self.tp.str_gr_source).split(",")) assert_that(sources_url).is_equal_to(sorted(["station", "playlists", "search"])) # step 15 tastemaker = "Tastemaker" tiktok = "Tiktok" self.tp.select_dsp(AppConfig.get("dsp")["spotify"]) self.tp.dsp_change_sources(["Album Page", "Artist Page", "Chart", "Collection", "Daily Mix", "Discover Weekly", "Other", "Play Queue", "Playlists", "Radio", "Release Radar"]) self.tp.market_dd_choose_few_countries([AppConfig.get("market")["us"]["name"], AppConfig.get("market")["australia"]["name"]]) self.tp.choose_graph_view_area_graph_percentage() self.tp.select_previous_mounth_period() start = self.tp.parameter_from_url(self.tp.str_gr_start_date) end = self.tp.parameter_from_url(self.tp.str_gr_end_date) self.tp.td_change_owner_category_to(tastemaker) self.tp.td_change_owner_market_to([AppConfig.get("market")["sweden"]["name"]]) self.tp.td_switch_to_worldwide_streams() self.tp.td_search_filter(tiktok) self.tp.refresh() self.tp.verify_params_in_url( {self.tp.str_gr_dsp: 1, self.tp.str_gr_view: 3, self.tp.str_gr_start_date: start, self.tp.str_gr_end_date: end, self.tp.tr_det_owner_ctg: 7, self.tp.tr_det_owner_market: AppConfig.get("market")["sweden"]["header"].lower(), self.tp.tr_det_market_str: 1, self.tp.tr_det_filter: tiktok} ) sources_url = sorted(self.tp.parameter_from_url(self.tp.str_gr_source).split(",")) countries_url = sorted(self.tp.parameter_from_url(self.tp.str_gr_country).split(",")) assert_that(countries_url).is_equal_to(sorted([AppConfig.get("market")["us"]["market"], AppConfig.get("market")["australia"]["market"]])) assert_that(sources_url).is_equal_to(["album", "artist", "chart", "collection", "dailyMix", "discoverWeekly", "other", "othersPlaylist", "playQueue", "radio", "releaseRadar"]) # step 16 self.refresh_and_verify_source_dsp("11 Sources", AppConfig.get("dsp")["spotify"]) market_ui = self.tp.graph_get_selected_market() self.tp.verify_graph_view_chosen("Area Graph, %") start_ui = self.tp.get_calendar_start_date() end_ui = self.tp.get_calendar_end_date() owner_category_ui = self.tp.td_get_owner_category() owner_market_ui = self.tp.td_get_owner_market() self.tp.track_details_is_streams_tab_active("worldwide") filter_ui = self.tp.td_get_filter_value() assert_that(market_ui).is_equal_to("2 Markets") assert_that(start).is_equal_to(start_ui) assert_that(end).is_equal_to(end_ui) assert_that(owner_category_ui).is_equal_to(tastemaker) assert_that(owner_market_ui).is_equal_to(AppConfig.get("market")["sweden"]["name"]) assert_that(filter_ui).is_equal_to(tiktok) # step 17 self.tp.select_dsp(AppConfig.get("dsp")["apple"]) self.tp.dsp_change_sources(["External", "Now Playing", "Voice"]) self.tp.refresh() self.tp.verify_params_in_url({self.tp.str_gr_dsp: 2}) sources_url = sorted(self.tp.parameter_from_url(self.tp.str_gr_source).split(",")) self.refresh_and_verify_source_dsp("3 Sources", AppConfig.get("dsp")["apple"]) assert_that(sources_url).is_equal_to(["external", "nowPlaying", "voice"]) @allure.step("Track page - refresh and verify current source and dsp Amazon") def refresh_and_verify_source_dsp(self, source, dsp=AppConfig.get("dsp")["amazon"]): self.tp.refresh() source_ui = self.tp.get_current_source() dsp_ui = self.tp.get_current_dsp() assert_that(source_ui).is_equal_to(source) assert_that(dsp_ui).is_equal_to(dsp)