import json import unittest from argparse import Namespace import allure import pytest from assertpy import assert_that 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 = ["Easy", "Camila Cabello", "46D0hYb1B7qiU33VtXt21W", "USSM11912003", "2019-10-10"] track7 = json.loads(json.dumps(AppConfig.get("track7")), object_hook=lambda d: Namespace(**d)) dsp_values_support = ["Spotify", "Apple Music", AppConfig.get("dsp")["all_playlists"]] market_global = "Global" market_us = "us" db_global = "global" periods = [["14 Days", 14], ["28 Days", 28], ["8 Weeks", 56], ["12 Weeks", 84], ["6 Months", 182], ["1 Year", 365]] playlist1 = ["TODAY'S TOP HITS", "37i9dQZF1DXcBWIGoYBM5M"] playlists = [ playlist1, ["GET POPPED!", "37i9dQZF1DXboDblu798Pk"], ["NEW MUSIC FRIDAY ITALIA", "37i9dQZF1DWVKDF4ycOESi"], ["HOT HITS INDIA", "37i9dQZF1DX0ieekvzt1Ic"], ] pop_rising = "POP RISING" @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) @allure.story("AP-1741") @allure.severity(allure.severity_level.NORMAL) @allure.title("Playlist Support: Displaying of the playlists that belongs to Top Spotify Playlists for " "Global market STEP 1-10") @allure.description( "TC verifies that a user can see playlists where added to the comparison track participated in a defined period" " for all markets in a case of Global market selection. Users see track's life circle in the playlists on " "Playlist Support section, if these playlists belong to the 'Top 200 Spotify playlists': STEP 1-10" ) def test_playlist_displaying_top_spotify_steps_1_10(self): self.comparison_page.remove_tracks_if_present_with_worker(self.market_global) user = self.loginPage.get_user_email_with_worker() token = self.api_client.authorize(user=user) for track in [self.track7]: self.api_client.add_track_to_comparison(token=token, market=self.market_us, isrc=track.isrc, id=track.id) self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.left_panel.open_comparison_page() self.comparison_page.select_market_from_dd(self.market_global) self.comparison_page.select_period_from_dd(self.periods[5][0]) self.comparison_page.open_playlist_details() names_ui = self.comparison_page.get_playlist_details_names() spotify_names_api = self.comparison_page.get_playlist_param_from_api_get(apple_spotify="spotify", period=self.periods[5][1], track=self.track_name1[2], param="name") spotify_ids_api = self.comparison_page.get_playlist_param_from_api_get(apple_spotify="spotify", period=self.periods[5][1], track=self.track_name1[2], param="id") spotify_ids_db = self.comparison_page.select_all_spotify_playlists_ids_for_period_db(isrc=self.track_name1[3], exit_date=self.track_name1[4], period=self.periods[5][1]) self.ts.markFinal(names_ui == spotify_names_api, "STEP 1: ui and api match") assert_that(len(spotify_ids_api)).is_less_than_or_equal_to(len(spotify_ids_db)) assert_that(spotify_ids_api).is_subset_of(spotify_ids_db) custom_playlists_file = self.comparison_page.read_from_file("ap_1741") custom_playlists_db = self.comparison_page.get_custom_playlists_spotify_db() self.ts.markFinal( set(custom_playlists_file) == set(custom_playlists_db), "STEP 2: custom playlists are correct: {}".format(set(custom_playlists_file) - set(custom_playlists_db)), ) for playlist in self.playlists: entry_dates = self.comparison_page.get_dates_for_track_history_spotify(id=playlist[1], isrc=self.track_name1[3], column="EntryDate") exit_dates = self.comparison_page.get_dates_for_track_history_spotify(id=playlist[1], isrc=self.track_name1[3], column="ExitDate") title_names = self.comparison_page.get_playlists_from_api_get(apple_spotify="spotify", period=self.periods[5][1], tracks=[self.track_name1[2]], param="name") title_index = title_names.index(playlist[0]) + 1 added_dates_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "added", playlist[0]) removed_dates_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "removed", playlist[0]) self.ts.markFinal( set(added_dates_ui).issubset(entry_dates), "STEP 3-10: added dates ui and db match: db: {db}, \nui: {ui}".format(db=entry_dates, ui=added_dates_ui), ) self.ts.markFinal( set(removed_dates_ui).issubset(exit_dates), "removed dates ui and db match: db: {db}, \nui: {ui}".format(db=exit_dates, ui=removed_dates_ui), ) @allure.story("AP-1741") @allure.severity(allure.severity_level.NORMAL) @allure.title("Playlist Support: Displaying of the playlists that belongs to Top Spotify Playlists for " "Global market STEP 11-15") @allure.description( "TC verifies that a user can see playlists where added to the comparison track participated in a defined period" " for all markets in a case of Global market selection. Users see track's life circle in the playlists on " "Playlist Support section, if these playlists belong to the 'Top 200 Spotify playlists': STEP 11-15" ) def test_playlist_displaying_top_spotify_steps_11_15(self): self.comparison_page.remove_tracks_if_present_with_worker(self.market_global) user = self.loginPage.get_user_email_with_worker() token = self.api_client.authorize(user=user) for track in [self.track7]: self.api_client.add_track_to_comparison(token=token, market=self.market_us, isrc=track.isrc, id=track.id) self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.left_panel.open_comparison_page() self.comparison_page.select_market_from_dd(self.market_global) self.comparison_page.select_period_from_dd(self.periods[5][0]) self.comparison_page.open_playlist_details() names_ui = self.comparison_page.get_playlist_details_names() self.ts.markFinal(names_ui.count(self.pop_rising) == 1, "STEP 11-12: {} present in playlist support".format(self.pop_rising)) for period in self.periods: self.comparison_page.select_period_from_dd(period=period[0]) self.comparison_page.open_playlist_details() names_ui = self.comparison_page.get_playlist_details_names() names_api = self.comparison_page.get_playlists_from_api_get(apple_spotify="spotify", period=period[1], tracks=[self.track_name1[2]], param="name") self.ts.markFinal(len(names_ui) == len(names_api), "STEP 13: count ui and api equal and enlarges") names_ui = self.comparison_page.get_playlist_details_names() spotify_api_streams = self.comparison_page.get_playlists_from_api_get(apple_spotify="spotify", period=self.periods[5][1], tracks=[self.track_name1[2]], param="streams") spotify_api_name = self.comparison_page.get_playlists_from_api_get(apple_spotify="spotify", period=self.periods[5][1], tracks=[self.track_name1[2]], param="name") self.ts.markFinal( spotify_api_streams == sorted(spotify_api_streams, reverse=True), "STEP 14: playlists for spotify on BE are sorted by streams", ) self.ts.markFinal( names_ui == spotify_api_name, "ui and api names are equal: {ui}\n\n{api}".format(ui=names_ui, api=spotify_api_name), ) spotify_api_ids = self.comparison_page.get_playlists_from_api_get(apple_spotify="spotify", period=self.periods[5][1], tracks=[self.track_name1[2]], param="id") spotify_streams_db = self.comparison_page.get_spotify_streams_db(ids=spotify_api_ids) self.ts.markFinal( spotify_api_streams == spotify_streams_db, "STEP 15: api and db streams match: api: {api}\n\n db: {db}".format(api=spotify_api_streams, db=spotify_streams_db), )