import logging 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 from ui_automation_framework.utils import logger as cl from app.api_client import ApiClient from app.mysql_db_client_custom import MySqlClient from app.src.pages.account_page import AccountPage from app.src.pages.album_page import AlbumPage from app.src.pages.apple_playlist_page import ApplePlaylistPage from app.src.pages.artist_page import ArtistPage from app.src.pages.global_search import GlobalSearch from app.src.pages.login_page import LoginPage from app.src.pages.spotify_playlist_page import SpotifyPlaylistPage from app.src.pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up") class GlobalSearchTest(unittest.TestCase): log = cl.Logger(logging.DEBUG) @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.gs = GlobalSearch(self.driver) self.tp = TrackPage(self.driver) self.sp = SpotifyPlaylistPage(self.driver) self.ap = ApplePlaylistPage(self.driver) self.album_page = AlbumPage(self.driver) self.artist_page = ArtistPage(self.driver) self.account_page = AccountPage(self.driver) self.api_client = ApiClient() self.sql_client = MySqlClient() self.ts = TestStatus(self.driver) @allure.story("AP-4117") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-942][AP-4501] Global Search flow verification. STEPS 1-12.") @allure.description(""" STEPS 1-12. TC verifies that users can search for different entities from Global Search.""") def test_global_search_flow_verification_steps_1_12(self): self.loginPage.login_with_worker() aut0_id = self.loginPage.get_auth0_id() self.sql_client.clear_search_history(id=aut0_id) self.tp.select_market(AppConfig.get("market")["us"]["name"]) # step 1 self.gs.verify_hint_in_search_field_in_top_header() # step 2 self.gs.put_focus_to_the_search_field() self.gs.verify_search_field_is_in_focus() self.gs.verify_active_search_field_has_blue_frame() self.gs.verify_hint_in_search_field_in_top_header() # step 3 self.gs.verify_empty_recent_search() # step 4 self.gs.click_beyond_search_field() self.gs.verify_search_window_is_not_present() # step 5 self.gs.enter_search_value("l") self.gs.check_clear_icon() self.gs.verify_hint_in_search_field_in_top_header() # step 6 self.gs.enter_search_value("o") self.gs.verify_all_tabs_are_present() # step 7 self.gs.clear_the_search_field() self.gs.enter_search_value(self.gs.SEARCH_VALUE[:-1]) self.gs.check_active_tab(self.gs.TOP_RESULTS) # step 8 self.gs.open_tab(self.gs.ALBUMS) self.gs.check_active_tab(self.gs.ALBUMS) self.gs.enter_search_value(self.gs.SEARCH_VALUE[-1]) self.gs.check_active_tab(self.gs.TOP_RESULTS) # step 9,10 time.sleep(2) self.gs.verify_all_tabs_are_present() self.gs.verify_search_target_market(AppConfig.get("market")["us"]["header"]) # step 11 search_request_url = f'&limit=20&market={AppConfig.get("market")["us"]["api"]}' events_from_console = self.tp.get_events_from_console(search_request_url, wait=15) assert_that(events_from_console[-1]).contains("/spotifysearch?search={}&limit=20&market={}".format(self.gs.SEARCH_VALUE, AppConfig.get("market")["us"]["api"])) assert_that(events_from_console[-2]).contains("/vendor-api/spotify/v1/search?query={}&item_type=track%2Cartist%2Calbum&limit=20&market={}".format(self.gs.SEARCH_VALUE, AppConfig.get("market")["us"]["api"])) # step 12 # Sweden self.tp.select_market(AppConfig.get("market")["sweden"]["name"]) self.gs.enter_search_value(self.gs.SEARCH_VALUE) self.gs.verify_search_target_market(AppConfig.get("market")["sweden"]["header"]) search_request_url = f'&limit=20&market={AppConfig.get("market")["sweden"]["api"]}' events_from_console = self.tp.get_events_from_console(search_request_url, wait=15) assert_that(events_from_console[-1]).contains("/spotifysearch?search={}&limit=20&market={}".format(self.gs.SEARCH_VALUE, AppConfig.get("market")["sweden"]["api"])) assert_that(events_from_console[-2]).contains("/vendor-api/spotify/v1/search?query={}&item_type=track%2Cartist%2Calbum&limit=20&market={}".format(self.gs.SEARCH_VALUE, AppConfig.get("market")["sweden"]["api"])) # Global self.tp.select_market(AppConfig.get("market")["global"]["name"]) self.gs.enter_search_value(self.gs.SEARCH_VALUE) self.gs.verify_search_target_market(AppConfig.get("market")["global"]["name"]) search_request_url = "&limit=20" events_from_console = self.tp.get_events_from_console(search_request_url, wait=15) assert_that(events_from_console[-1]).contains("/spotifysearch?search={}&limit=20".format(self.gs.SEARCH_VALUE)) assert_that(events_from_console[-2]).contains("/vendor-api/spotify/v1/search?query={}&item_type=track%2Cartist%2Calbum&limit=20".format(self.gs.SEARCH_VALUE)) assert_that(events_from_console[-1]).does_not_contain("market") assert_that(events_from_console[-2]).does_not_contain("market") @allure.story("AP-4117") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-942][AP-4501] Global Search flow verification. STEPS 12-29.") @allure.description(""" STEPS 12-29. TC verifies Global Search tab elements.""") def test_global_search_flow_verification_steps_12_29(self): self.loginPage.login_with_worker() # step 13 self.tp.select_market(AppConfig.get("market")["us"]["name"]) self.gs.enter_search_value(self.gs.SEARCH_VALUE) self.gs.verify_top_results_tab_elements() # step 14 for e in self.gs.top_results_elements: self.gs.verify_hover_over_element(e) self.gs.clear_the_search_field() # step 15-17 self.gs.verify_top_results_elements(self.gs.top_results_elements) # step 18-29 self.gs.verify_global_search_tabs() @allure.story("AP-4117") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-942][AP-4501] Global Search flow verification. STEPS 30-31.") @allure.description(""" STEPS 30-31. TC verifies recent searches list length and that single albums are not shown in Search Results""") def test_global_search_flow_verification_steps_30_31(self): self.loginPage.login_with_worker() self.tp.select_market(AppConfig.get("market")["us"]["name"]) # step 30 self.gs.put_focus_to_the_search_field() self.gs.enter_search_value(self.gs.SEARCH_VALUE) self.gs.open_tab("Tracks") self.gs.navigate_to_each_track_from_tracks_tab() self.gs.clear_the_search_field() self.gs.put_focus_to_the_search_field() self.gs.verify_resent_searches_elements_list_len() # step 31 self.gs.put_focus_to_the_search_field() self.gs.enter_search_value(self.gs.EMPTY_ALBUMS_SEARCH_VALUE) self.gs.verify_single_albums() album_section = self.gs.top_results_album_section_presence() assert_that(album_section).is_false()