import logging import unittest import allure import pytest from assertpy import assert_that from faker import Faker from ui_automation_framework.utils import logger as cl from app.src.pages.login_page import LoginPage from app.src.pages.playlist_page import PlaylistPage from app.src.pages.search_page import SearchPage from app.src.pages.starred_page import StarredPage from app.src.pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up", "authorized_api") class GlobalSearchPlaylistsTest(unittest.TestCase): log = cl.Logger(logging.DEBUG) @pytest.fixture(autouse=True) def classSetup(self, authorized_api): self.api = authorized_api self.loginPage = LoginPage(self.driver, authorized_api) self.searchPage = SearchPage(self.driver, authorized_api) self.trackPage = TrackPage(self.driver, authorized_api) self.starredPage = StarredPage(self.driver, authorized_api) self.playlistPage = PlaylistPage(self.driver, authorized_api) self.fake = Faker() @allure.story("https://data-analytics.atlassian.net/browse/AG-4869") @allure.severity(allure.severity_level.CRITICAL) @allure.title("Focus on the search field") @allure.description("User should be able to see keyboard and recent searches") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-369") @pytest.mark.smoke def test_focusing_on_search_field(self): self.loginPage.login_as_regular_user() self.searchPage.click_playlists_tab().click_search_field() assert_that(self.driver.is_keyboard_shown(), "Keyboard is presented").is_true() assert_that(self.searchPage.is_recent_search_displayed(), "Recent search is displayed").is_true() # @allure.story("https://data-analytics.atlassian.net/browse/AG-4869") # @allure.severity(allure.severity_level.CRITICAL) # @allure.title("Search results according to the search query") # @allure.description("Search results should be relevant to the search query") # @allure.testcase("https://data-analytics.atlassian.net/browse/AG-370") # @pytest.mark.smoke # @pytest.mark.skip("Partial entry doesn't implement in tests") # def test_search_results_accordingly_to_query(self): # search_query = self.fake.word() # new_query = self.fake.word() # # self.loginPage.login_as_regular_user() # self.searchPage.click_playlists_tab().search_for(search_query) # results = self.searchPage.get_result_playlists_title_full(1) # assert_that(results).described_as("Search result includes query").contains(search_query) # # self.searchPage.update_search_query(new_query) # wait(lambda: new_query in self.searchPage.get_result_playlists_title_full(1), timeout_seconds=5, # sleep_seconds=0.01, waiting_for="Search results to include the search query") @allure.story("https://data-analytics.atlassian.net/browse/AG-4869") @allure.severity(allure.severity_level.CRITICAL) @allure.title("Scrolling through search results") @allure.description("Search results are uploading when user in the bottom of the screen proceeds scrolling") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-371") @pytest.mark.smoke def test_search_results_scroll(self): search_query = "Love" self.loginPage.login_as_regular_user() self.searchPage.click_playlists_tab().search_for(search_query).scroll_down_search_results() assert_that(self.searchPage.is_track_scrolled(), "Track is scrolled").is_true() @allure.story("https://data-analytics.atlassian.net/browse/AG-6512") @allure.severity(allure.severity_level.CRITICAL) @allure.title("No search results") @allure.description("Appropriate message should be shown") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-372") @pytest.mark.regression def test_no_search_results(self): search_query = "zzzzz123" self.loginPage.login_as_regular_user() self.searchPage.click_playlists_tab().search_for(search_query) assert_that(self.searchPage.is_no_results_shown(), "No results message is displayed").is_true() @allure.story("https://data-analytics.atlassian.net/browse/AG-6512") @allure.severity(allure.severity_level.CRITICAL) @allure.title("Search initiates after 2 entered chars") @allure.description("Search is initiated only after entering ≥2 symbols") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-407") @pytest.mark.regression def test_search_after_two_chars_entered(self): search_query = "top" self.loginPage.login_as_regular_user() self.searchPage.click_playlists_tab().search_for(search_query) results = self.searchPage.get_result_playlists_title_full(1) assert_that(results.lower()).described_as("Search result includes query").contains(search_query) @allure.story("https://data-analytics.atlassian.net/browse/AG-6512") @allure.severity(allure.severity_level.CRITICAL) @allure.title("Paste to the search") @allure.description("User should be able to paste search from clipboard") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-734") @pytest.mark.regression def test_paste_query_from_clipboard(self): self.loginPage.login_as_regular_user() self.searchPage.set_clipboard("love").click_playlists_tab().search_for(self.searchPage.get_clipboard()) results = self.searchPage.get_result_playlists_title_full(1) assert_that(results).described_as("Search result includes query").contains(self.searchPage.get_clipboard()) @allure.story("https://data-analytics.atlassian.net/browse/AG-6512") @allure.severity(allure.severity_level.CRITICAL) @allure.title("No duplicates") @allure.description("No duplicated tracks should be in the test result") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-2134") @pytest.mark.regression def test_no_duplicates(self): query = "Ibiza" self.loginPage.login_as_regular_user() self.searchPage.click_playlists_tab().search_for(query) results = self.searchPage.get_playlist_search_results() results_api = self.api.apollo.get_playlist_search_results(query) assert_that(results).described_as("Search results shown without duplicates").is_length(len(results_api)) @allure.story("https://data-analytics.atlassian.net/browse/AG-4869") @allure.severity(allure.severity_level.CRITICAL) @allure.title("Navigation to playlists screen via clicking on search result") @allure.description("User should be able to open relevant playlist from the search results") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-371") @pytest.mark.smoke def test_playlist_opening(self): search_query = self.fake.word() self.loginPage.login_as_regular_user() self.searchPage.click_playlists_tab().search_for(search_query) first_track_name = self.searchPage.get_result_playlists_title(1) self.searchPage.open_playlist_page_from_results(1) assert_that( self.playlistPage.is_playlist_page_opened_for_name(first_track_name), "Playlist page was successfully opened", ).is_true()