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 = ["Call You Mine", "The Chainsmokers,Bebe Rexha", 1, "USQX91901124", "2019-05-30", "2oejEp50ZzPuQTQ6v54Evp", "1464767458"] track_name2 = ["Panini", "Lil Nas X", 2, "USSM11903948", "2019-06-20", "6fTt0CH2t0mdeB2N9XFG5r", "1468166328"] track_name3 = [ "Higher Love", "Kygo,Whitney Houston", 3, "USRC11901901", "2019-06-27", "6oJ6le65B3SEqPwMRNXWjY", "1469941840", ] track_name4 = [ "China", "Anuel AA,Daddy Yankee,KAROL G,J Balvin,Ozuna", 4, "QM6P41952433", "2019-07-19", "2ksOAxtIxY8yElEWw8RhgK", "1473307010", ] track_name5 = [ "Talk (feat. Disclosure)", "Khalid,Disclosure", 5, "USRC11900004", "2019-02-07", "6TqXcAFInzjp0bODyvrWEq", "1451262393", ] dsp_values_support = ["Spotify", "Apple Music", AppConfig.get("dsp")["all_playlists"]] global_market = "Global" market_us = "us" periods = [["14 Days", 14], ["28 Days", 28], ["8 Weeks", 56], ["12 Weeks", 84], ["6 Months", 182], ["1 Year", 365]] new_music_friday = "NEW MUSIC FRIDAY" @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=4) @allure.story("AP-1851") @allure.severity(allure.severity_level.NORMAL) @allure.title( """Playlist Support: Adding of five tracks that belong to the Top Spotify/Apple playlists for Global market STEP 1-3""" ) @allure.description( """TC verifies that a user can add five tracks to comparison tool and see tracks' life circle in the playlists simultaneously for all markets in a case of Global market selection on Playlist Support section. Displayed playlists belong to the ‘Top 200 Spotify' and 'Top 250 Apple’ playlists. STEP 1-3""" ) def test_add_five_tracks_life_circle_step_1_3(self): self.comparison_page.remove_tracks_if_present_with_worker(self.market_us) 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.global_market) 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.periods[5][0]) for track in [self.track_name2, self.track_name3, self.track_name4, self.track_name5]: self.comparison_page.open_playlist_details() playlists_before = self.comparison_page.get_playlist_details_names() self.comparison_page.add_card_to_comparison(track) self.comparison_page.open_playlist_details() playlists_after = self.comparison_page.get_playlist_details_names() self.ts.markFinal( set(playlists_before).issubset(playlists_after), "STEP 1-3: new playlist contains all tracks from previous", ) self.ts.markFinal(0 < len(playlists_before) < len(playlists_after), "new playlist len is: {}".format(len(playlists_after))) @pytest.mark.flaky(reruns=5) @allure.story("AP-1851") @allure.severity(allure.severity_level.NORMAL) @allure.title( """Playlist Support: Adding of five tracks that belong to the Top Spotify/Apple playlists for Global market API: STEP 4-8""" ) @allure.description( """TC verifies that a user can add five tracks to comparison tool and see tracks' life circle in the playlists simultaneously for all markets in a case of Global market selection on Playlist Support section. Displayed playlists belong to the ‘Top 200 Spotify' and 'Top 250 Apple’ playlists. API: STEP 4-8""" ) def test_add_five_tracks_life_circle_compare_api_db_step_4_8(self): apple_ids = [ self.track_name1[6], self.track_name2[6], self.track_name3[6], self.track_name4[6], self.track_name5[6], ] spotify_ids = [ self.track_name1[5], self.track_name2[5], self.track_name3[5], self.track_name4[5], self.track_name5[5], ] isrc = [self.track_name1[3], self.track_name2[3], self.track_name3[3], self.track_name4[3], self.track_name5[3]] exit_dates = [ self.track_name1[4], self.track_name2[4], self.track_name3[4], self.track_name4[4], self.track_name5[4], ] user = self.loginPage.get_user_email_with_worker() token = self.api_client.authorize(user=user) for period in self.periods: spotify_playlists_db = self.comparison_page.get_playlist_ids_spotify_from_db(isrcs=isrc, exit_dates=exit_dates, period=period[1]) apple_playlists_db = self.comparison_page.get_playlist_ids_apple_from_db(isrcs=isrc, exit_dates=exit_dates, period=period[1]) spotify_playlists_api = self.api_client.get_playlist_ids_with_period_tracks(apple_spotify="spotify", period=period[1], track=spotify_ids, param_name="id", token=token) apple_playlists_api = self.api_client.get_playlist_ids_with_period_tracks(apple_spotify="apple", period=period[1], track=apple_ids, param_name="id", token=token) spotify_streams = self.api_client.get_playlist_ids_with_period_tracks(apple_spotify="spotify", period=period[1], track=spotify_ids, param_name="streams", token=token) apple_streams = self.api_client.get_playlist_ids_with_period_tracks(apple_spotify="apple", period=period[1], track=apple_ids, param_name="streams", token=token) for i in range(0, len(apple_streams)): apple_streams[i] = int(apple_streams[i]) for i in range(0, len(spotify_streams)): spotify_streams[i] = int(spotify_streams[i]) self.ts.markFinal( len(spotify_playlists_db) == len(spotify_playlists_api), "STEP 4-8: period: {}, count values in db and api for spotify are equal: db = {}, api = {}".format(period[0], len(spotify_playlists_db), len(spotify_playlists_api)), ) self.ts.markFinal( len(apple_playlists_db) in list(range(len(apple_playlists_api) - 1, len(apple_playlists_api) + 1)), "count values in db and api for apple are equal: db = {}, api = {}".format(len(apple_playlists_db), len(apple_playlists_api)), ) self.ts.markFinal( set(apple_playlists_db) == set(apple_playlists_api), "values in db and api for apple are equal: {}".format(set(apple_playlists_db) - set(apple_playlists_api)), ) self.ts.markFinal( set(spotify_playlists_db) == set(spotify_playlists_api), "values in db and api for spotify are equal: {} and {}".format(spotify_playlists_db[0], spotify_playlists_api[0]), ) self.ts.markFinal(apple_streams == sorted(apple_streams, reverse=True), "playlists for apple on BE are sorted by streams") self.ts.markFinal( spotify_streams == sorted(spotify_streams, reverse=True), "playlists for spotify on BE are sorted by streams", ) @pytest.mark.flaky(reruns=2) @allure.story("AP-1851") @allure.severity(allure.severity_level.NORMAL) @allure.title( """Playlist Support: Adding of five tracks that belong to the Top Spotify/Apple playlists for Global market UI: STEP 4-8""" ) @allure.description( """TC verifies that a user can add five tracks to comparison tool and see tracks' life circle in the playlists simultaneously for all markets in a case of Global market selection on Playlist Support section. Displayed playlists belong to the ‘Top 200 Spotify' and 'Top 250 Apple’ playlists. UI: STEP 4-8""" ) def test_add_five_tracks_life_circle_api_ui_step_4_8(self): apple_ids = [ self.track_name1[6], self.track_name2[6], self.track_name3[6], self.track_name4[6], self.track_name5[6], ] spotify_ids = [ self.track_name1[5], self.track_name2[5], self.track_name3[5], self.track_name4[5], self.track_name5[5], ] self.comparison_page.remove_tracks_if_present_with_worker(self.market_us) user = self.loginPage.get_user_email_with_worker() token = self.api_client.authorize(user=user) for track in [self.track_name1, self.track_name2, self.track_name3, self.track_name4, self.track_name5]: self.api_client.add_track_to_comparison(token=token, market=self.market_us, isrc=track[3], id=track[5]) self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.left_panel.open_comparison_page() self.comparison_page.wait_for_stream_performance_graph_visible() self.trackPage.select_market(self.global_market) self.comparison_page.wait_for_stream_performance_graph_visible() for period in self.periods: self.comparison_page.select_period_from_dd(period[0]) self.comparison_page.open_playlist_details() spotify_playlists_api_name = self.api_client.get_playlist_ids_with_period_tracks(apple_spotify="spotify", period=period[1], track=spotify_ids, param_name="name", token=token) remove_str = "\u200b\u200d\u200f ‏‏​​ ‍‍" spotify_playlists_api_name = [str(i).rstrip(remove_str) for i in spotify_playlists_api_name] apple_playlists_api_name = self.api_client.get_playlist_ids_with_period_tracks(apple_spotify="apple", period=period[1], track=apple_ids, param_name="name", token=token) spotify_playlists_ui = self.comparison_page.get_playlist_details_names() spotify_playlists_ui = [str(i).rstrip(remove_str) for i in spotify_playlists_ui] self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[1]) apple_playlists_ui = self.comparison_page.get_playlist_details_names() self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[2]) combined_playlist_ui = self.comparison_page.get_playlist_details_names() combined_playlist_ui = [str(i).rstrip(remove_str) for i in combined_playlist_ui] self.ts.markFinal( len(spotify_playlists_api_name) == len(spotify_playlists_ui), "STEP 4-5: period: {}, ui and api for spotify length are match: api {}, ui {}".format(period[0], len(spotify_playlists_api_name), len(spotify_playlists_ui)), ) self.ts.markFinal( spotify_playlists_api_name == spotify_playlists_ui, "ui and api for spotify are match: ui - {}, diff: {}".format(period[0], (set(spotify_playlists_ui) - set(spotify_playlists_api_name))), ) self.ts.markFinal( apple_playlists_api_name == apple_playlists_ui, "ui and api for apple are match: {}".format(set(apple_playlists_api_name) - set(apple_playlists_ui)), ) apple_playlists_ui = [str(i).rstrip(remove_str) for i in apple_playlists_ui] self.ts.markFinal( sorted(apple_playlists_ui + spotify_playlists_ui) == sorted(combined_playlist_ui), "STEP 6-7: combined playlist has all from apple and spotify dsp\n\n ++:{}\n\n all:{}".format(apple_playlists_ui + spotify_playlists_ui, combined_playlist_ui), ) @pytest.mark.flaky(reruns=5) @allure.story("AP-1851") @allure.severity(allure.severity_level.NORMAL) @allure.title( """Playlist Support: Adding of five tracks that belong to the Top Spotify/Apple playlists for Global market STEP 9-10""" ) @allure.description( """TC verifies that a user can add five tracks to comparison tool and see tracks' life circle in the playlists simultaneously for all markets in a case of Global market selection on Playlist Support section. Displayed playlists belong to the ‘Top 200 Spotify' and 'Top 250 Apple’ playlists. STEP 9-10""" ) def test_add_five_tracks_life_circle_step_9_10(self): self.comparison_page.remove_tracks_if_present_with_worker(self.market_us) user = self.loginPage.get_user_email_with_worker() token = self.api_client.authorize(user=user) for track in [self.track_name1, self.track_name2, self.track_name3, self.track_name4, self.track_name5]: self.api_client.add_track_to_comparison(token=token, market=self.market_us, isrc=track[3], id=track[5]) self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.left_panel.open_comparison_page() self.comparison_page.wait_for_stream_performance_graph_visible() self.comparison_page.select_market_from_dd(self.global_market) self.comparison_page.wait_for_stream_performance_graph_visible() self.comparison_page.select_period_from_dd(self.periods[5][0]) self.comparison_page.wait_for_stream_performance_graph_visible() self.comparison_page.open_playlist_details() playlist_names = self.comparison_page.get_playlist_details_names() playlist_tracks = self.comparison_page.get_playlist_tracks() self.ts.markFinal(self.new_music_friday in playlist_names, "STEP 9: {} is present ".format(self.new_music_friday)) self.ts.markFinal( {self.track_name1[0], self.track_name2[0], self.track_name3[0], self.track_name4[0], self.track_name5[0]} == playlist_tracks, "all added tracks are displayed in playlist support tracks: {}\n\n{}".format( { self.track_name1[0], self.track_name2[0], self.track_name3[0], self.track_name4[0], self.track_name5[0], }, playlist_tracks, ), ) for track in [self.track_name5, self.track_name4, self.track_name3, self.track_name1]: self.comparison_page.remove_track(track[2]) self.comparison_page.open_playlist_details() playlist_names = self.comparison_page.get_playlist_details_names() playlist_tracks = self.comparison_page.get_playlist_tracks() self.ts.markFinal( self.new_music_friday in playlist_names, "STEP 10: {} is present after remove track: {}".format(self.new_music_friday, track[0]), ) self.ts.markFinal(track[0] not in playlist_tracks, "track {} is removed from playlist support".format(track)[0])