import unittest import allure import pytest from ui_automation_framework.core import TestStatus from ui_automation_framework.utils import AppConfig from app.api_client import ApiClient from ...pages.add_track_popup import AddTrackPopup from ...pages.comparison_page import TrackComparisonPage from ...pages.left_navigation_panel import LeftNavigationPanel from ...pages.login_page import LoginPage from ...pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up") class ComparisonPlaylistSupportTest(unittest.TestCase): track_name1 = ["Liar", "Camila Cabello", 1] market = "us" united_states = "United States" us = "US" belgium = "Belgium" be = "BE" global_market = "Global" period_14 = "14 Days" timeline_14_days = ["1st fri", "day 2", "day 4", "day 6", "day 8", "day 10", "day 12", "day 14"] periods = ["28 Days", "8 Weeks", "12 Weeks", "6 Months", "1 Year"] dsp_values_support = [AppConfig.get("dsp")["all_playlists"], "Spotify", "Apple Music"] dsp_values_performance = ["Apple Music", "Amazon", AppConfig.get("dsp")["total_streams"]] @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.trackPage = TrackPage(self.driver) self.add_track_popup = AddTrackPopup(self.driver) self.comparison_page = TrackComparisonPage(self.driver) self.left_panel = LeftNavigationPanel(self.driver) self.api_client = ApiClient() self.ts = TestStatus(self.driver) @pytest.mark.flaky(reruns=0) @allure.story("AP-2638") @allure.severity(allure.severity_level.NORMAL) @allure.title("Verification layout of 'Playlist Details' area STEP 1-8") @allure.description("TC verifies layout of the ‘Playlist Details' (’Playlist Support' in V1) area as part of the new version of " "Track comparison page. All required elements are present and work as expected. STEP 1-8") def test_layout_playlist_details_area_1_8(self): self.comparison_page.remove_tracks_if_present_with_worker(self.market) self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.left_panel.open_comparison_page() self.comparison_page.comparison_page_is_opened() self.trackPage.select_market(self.united_states) self.comparison_page.click_add_first_track_button() self.add_track_popup.add_track_to_comparison(self.track_name1) self.comparison_page.open_playlist_details() is_header_displayed = self.comparison_page.playlist_details_is_header_displayed() self.ts.markFinal(is_header_displayed, "STEP 2: header of open details section is displayed: {}".format(is_header_displayed)) track_timeline = self.comparison_page.get_track_streams_performance_timeline() details_timeline = self.comparison_page.get_playlist_details_timeline() self.ts.markFinal(track_timeline == details_timeline, "STEP 3-4: track timeline is equal to details timeline") positions = self.comparison_page.get_playlist_details_positions() art_count = self.comparison_page.get_playlist_details_art_count() names = self.comparison_page.get_playlist_details_names() spotify_icons_count = self.comparison_page.get_spotify_icons_count() track_lines_count = self.comparison_page.get_track_lines_count() self.ts.markFinal(positions == sorted(positions, reverse=False), "STEP 5: positions are sorted: {}".format(positions)) self.ts.markFinal(0 < art_count == len(names) == spotify_icons_count < track_lines_count, "all elements count is correct") card_color = self.comparison_page.get_track_card_identifier_color_by_id(self.track_name1[2]) track_line_color_name = self.comparison_page.get_track_line_name_color(self.track_name1) track_line_color = self.comparison_page.get_track_line_color(self.track_name1[2]) self.ts.markFinal(card_color == track_line_color == track_line_color_name, "STEP 6: track line and card colors are the same") tooltip_text = self.comparison_page.get_text_in_track_line_tooltip() self.ts.markFinal( self.track_name1[0] in tooltip_text, f"STEP 7: tooltip: \n{tooltip_text} contains track name:\n {self.track_name1[0]}", ) self.ts.markFinal("Added" in tooltip_text, "tooltip contains added date") self.ts.markFinal("Removed" in tooltip_text, "tooltip contains removed date") self.comparison_page.select_period_from_dd(self.period_14) self.comparison_page.open_playlist_details() current_timeline = self.comparison_page.get_playlist_details_timeline() self.ts.markFinal(all(elem in self.timeline_14_days for elem in current_timeline), "STEP 8: timeline is for 14 days") @allure.story("AP-2638") @allure.severity(allure.severity_level.NORMAL) @allure.title("Verification layout of 'Playlist Details' area STEP 9-11, 13-16") @allure.description("TC verifies layout of the ‘Playlist Details' (’Playlist Support' in V1) area as part of the new version of " "Track comparison page. All required elements are present and work as expected. STEP 9-11, 13-16") def test_layout_playlist_details_area_9_11_13_16(self): self.comparison_page.remove_tracks_if_present_with_worker(self.market) self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.left_panel.open_comparison_page() self.comparison_page.comparison_page_is_opened() self.trackPage.select_market(self.united_states) self.comparison_page.click_add_first_track_button() self.add_track_popup.add_track_to_comparison(self.track_name1) self.comparison_page.select_period_from_dd(self.period_14) for period in self.periods: self.comparison_page.select_period_from_dd(period) self.comparison_page.open_playlist_details() performance_timeline = self.comparison_page.get_track_streams_performance_timeline() current_timeline = self.comparison_page.get_playlist_details_timeline() expected_timeline = self.comparison_page.get_expected_timeline(period) self.ts.markFinal( performance_timeline == current_timeline, "STEP 9: timeline for performance and playlist details are equal", ) self.ts.markFinal(expected_timeline == current_timeline, "timeline for playlist details is correct") self.comparison_page.verify_all_dsp_from_dd("support", self.dsp_values_support) displayed_names_spotify = self.comparison_page.get_playlist_details_names() displayed_spotify_count = self.comparison_page.get_spotify_icons_count() self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[2]) self.comparison_page.verify_all_dsp_from_dd("support", self.dsp_values_support) displayed_apple_count = self.comparison_page.get_apple_icons_count() displayed_names_apple = self.comparison_page.get_playlist_details_names() displayed_names_count = len(self.comparison_page.get_playlist_details_names()) current_dsp_performance = self.comparison_page.get_current_dsp("performance") self.ts.markFinal( displayed_apple_count == displayed_names_count, f"STEP 10-14: all displayed playlists are apple displayed: {displayed_apple_count}, expected: {displayed_names_count}", ) self.ts.markFinal( current_dsp_performance == self.dsp_values_support[1], "dsp in performance is: {}".format(self.dsp_values_support[1]), ) self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[0]) self.comparison_page.verify_all_dsp_from_dd("support", self.dsp_values_support) displayed_names_all = self.comparison_page.get_playlist_details_names() current_dsp_performance = self.comparison_page.get_current_dsp("performance") self.ts.markFinal(displayed_apple_count == displayed_names_count, "STEP 15: all displayed playlists are apple") self.ts.markFinal( current_dsp_performance == self.dsp_values_support[1], "dsp in performance is: {}".format(self.dsp_values_support[1]), ) self.ts.markFinal((displayed_spotify_count + displayed_apple_count) == len(displayed_names_all), "combined = apple + spotify") self.ts.markFinal( sorted(displayed_names_apple + displayed_names_spotify) == sorted(displayed_names_all), "combined playlist has all from apple and spotify dsp\n\n ++:{}\n\n all:{}".format(displayed_names_apple + displayed_names_spotify, displayed_names_all), ) for dsp in self.dsp_values_performance: self.comparison_page.track_performance_select_dsp_from_dd(dsp) current_dsp_support = self.comparison_page.get_current_dsp("support") self.ts.markFinal( current_dsp_support == self.dsp_values_support[0], "STEP 16: support dsp is still: {}".format(self.dsp_values_support[0]), ) @allure.story("AP-2638") @allure.severity(allure.severity_level.NORMAL) @allure.title("Verification layout of 'Playlist Details' area STEP 12") @allure.description("TC verifies layout of the ‘Playlist Details' (’Playlist Support' in V1) area as part of the new version of " "Track comparison page. All required elements are present and work as expected. STEP 12") def test_layout_playlist_details_area_12(self): self.comparison_page.remove_tracks_if_present_with_worker(self.market) self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.left_panel.open_comparison_page() self.comparison_page.comparison_page_is_opened() self.trackPage.select_market(self.united_states) self.comparison_page.click_add_first_track_button() self.add_track_popup.add_track_to_comparison(self.track_name1) self.comparison_page.open_playlist_details() self.comparison_page.verify_dsp_dd_hover("support") @allure.story("AP-2638") @allure.severity(allure.severity_level.NORMAL) @allure.title("Verification layout of 'Playlist Details' area STEP 17-24") @allure.description("TC verifies layout of the ‘Playlist Details' (’Playlist Support' in V1) area as part of the new version of " "Track comparison page. All required elements are present and work as expected. STEP 17-24") def test_layout_playlist_details_area_17_24(self): self.comparison_page.remove_tracks_if_present_with_worker(self.market) self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.left_panel.open_comparison_page() self.comparison_page.comparison_page_is_opened() self.trackPage.select_market(self.united_states) self.comparison_page.click_add_first_track_button() self.add_track_popup.add_track_to_comparison(self.track_name1) self.comparison_page.open_playlist_details() playlist_before = self.comparison_page.get_playlist_details_names() self.comparison_page.select_market_from_dd(self.belgium) top_header_correct = self.trackPage.is_market_in_header_correct(self.us) self.comparison_page.open_playlist_details() playlist_after = self.comparison_page.get_playlist_details_names() support_current_dsp = self.comparison_page.get_current_dsp("support") support_performance_dsp = self.comparison_page.get_current_dsp("performance") self.ts.markFinal(top_header_correct, "STEP 17: top header market is correct") self.ts.markFinal( support_current_dsp == support_performance_dsp == self.dsp_values_support[1], f"dsp is default in both dd, \nsupport: {support_current_dsp}, \nperformance: {support_performance_dsp}\nexpected: {self.dsp_values_support[0]}", ) self.ts.markFinal(playlist_before != playlist_after, "playlist is changed after market change") self.trackPage.select_market(self.belgium) top_header_correct = self.trackPage.is_market_in_header_correct(self.be) current_market = self.comparison_page.get_selected_market() self.comparison_page.open_playlist_details() playlist_after_market_change = self.comparison_page.get_playlist_details_names() self.ts.markFinal(top_header_correct, "STEP 18: top header market is correct") self.ts.markFinal(current_market == self.belgium, "current market is: {}".format(self.belgium)) self.ts.markFinal(playlist_after_market_change == playlist_after, "playlist is not changed") self.trackPage.select_market(self.global_market) self.comparison_page.open_playlist_details() top_header_correct = self.trackPage.is_market_in_header_correct(self.global_market) current_market = self.comparison_page.get_selected_market() playlist_market_global = self.comparison_page.get_playlist_details_names() self.ts.markFinal(top_header_correct, "STEP 19: top header market is correct") self.ts.markFinal(current_market == self.global_market, "current market is: {}".format(self.global_market)) self.ts.markFinal(playlist_after_market_change != playlist_market_global, "playlist is changed") self.comparison_page.scroll_to_last_row() self.comparison_page.verify_sticky_headers_displayed() self.comparison_page.click_back_to_top_button() self.comparison_page.is_title_displayed() self.comparison_page.track_performance_select_dsp_from_dd(self.dsp_values_performance[1]) self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[2]) self.comparison_page.refresh() self.comparison_page.open_playlist_details() support_current_dsp = self.comparison_page.get_current_dsp("support") support_performance_dsp = self.comparison_page.get_current_dsp("performance") self.ts.markFinal( support_current_dsp == support_performance_dsp == self.dsp_values_support[1], "STEP 24: dsp is default in both dd after refresh", ) self.comparison_page.track_performance_select_dsp_from_dd(self.dsp_values_performance[1]) self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[2]) self.comparison_page.select_market_from_dd(self.united_states) self.comparison_page.open_playlist_details() support_current_dsp = self.comparison_page.get_current_dsp("support") support_performance_dsp = self.comparison_page.get_current_dsp("performance") self.ts.markFinal( support_current_dsp == support_performance_dsp == self.dsp_values_support[1], "dsp is default in both dd after change market", ) self.comparison_page.track_performance_select_dsp_from_dd(self.dsp_values_performance[1]) self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[2]) self.comparison_page.select_period_from_dd(self.periods[2]) self.comparison_page.open_playlist_details() support_current_dsp = self.comparison_page.get_current_dsp("support") support_performance_dsp = self.comparison_page.get_current_dsp("performance") self.ts.markFinal( support_current_dsp == support_performance_dsp == self.dsp_values_support[1], "dsp is default in both dd after change period", )