import datetime import json import unittest from argparse import Namespace import allure import pandas as pd 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 = [ "Easy", "Camila Cabello", "46D0hYb1B7qiU33VtXt21W", "USSM11912003", "2019-10-10", "2019-10-11", 1482838030, ] 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_us = "us" united_states = "United States" periods = [["14 Days", 14], ["28 Days", 28], ["8 Weeks", 56], ["12 Weeks", 84], ["6 Months", 182], ["1 Year", 365]] playlist1 = ["New Music Daily", "pl.2b0e6e332fdf4b7a91164da3162127b5"] playlist2 = ["Today's Top Hits", "pl.3e67440d6a124b3bbab19cf3d4b2345b", "2020-02-04", "2020-02-06"] @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-1434") @allure.severity(allure.severity_level.NORMAL) @allure.title("Playlist Support [new logic]: Displaying of the playlist that belongs to Top 250 Apple Playlists" " STEP 1-5") @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-5" ) def test_playlist_displaying_top_250_apple_steps_1_5(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.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.united_states) self.comparison_page.select_period_from_dd(self.periods[0][0]) self.comparison_page.open_playlist_details() self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[1]) first_date = self.comparison_page.get_api_first_last_date_for_dsp(date="first_stream_date", dsp="apple", isrc=self.track_name1[3]) self.ts.markFinal(first_date == self.track_name1[4], "STEP 1-3: first date is: {}".format(first_date)) entry_date = self.comparison_page.get_selected_apple_track_history_in_playlist_db(id=self.playlist1[1], store=self.market_us, isrc=self.track_name1[3], column="EntryDate") title_names = self.comparison_page.get_playlists_from_local_market_api_get( apple_spotify="apple", period=self.periods[0][1], tracks=[self.track_name1[6]], param="name", market=self.market_us, ) title_index = title_names.index(self.playlist1[0]) + 1 added_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "added", self.playlist1[0]) self.ts.markFinal( entry_date == added_date_ui == [datetime.datetime.strptime(self.track_name1[5], "%Y-%m-%d").date()], "STEP 4: added date is correct", ) entry_date2 = self.comparison_page.get_selected_apple_track_history_in_playlist_db(id=self.playlist2[1], store=self.market_us, isrc=self.track_name1[3], column="EntryDate") exit_date2 = self.comparison_page.get_selected_apple_track_history_in_playlist_db(id=self.playlist2[1], store=self.market_us, isrc=self.track_name1[3], column="ExitDate") self.ts.markFinal( ((datetime.datetime.strptime(self.playlist2[2], "%Y-%m-%d").date() and datetime.datetime.strptime(self.playlist2[3], "%Y-%m-%d").date()) in pd.date_range(start=entry_date2[0], end=exit_date2[0]).tolist()), "STEP 5: gaps in range are not displayed", ) @pytest.mark.flaky(reruns=0) @pytest.mark.timeout(300) @allure.story("AP-1434") @allure.severity(allure.severity_level.NORMAL) @allure.title("Playlist Support [new logic]: Displaying of the playlist that belongs to Top 250 Apple Playlists" " STEP 6-9") @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 6-9" ) def test_playlist_displaying_top_250_apple_steps_6_9(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.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.united_states) entry_date = self.comparison_page.get_apple_playlists_track_belongs_to_db( id=self.playlist1[1], country=self.market_us, store=self.market_us, isrc=self.track_name1[3], column="EntryDate", ) exit_date = self.comparison_page.get_apple_playlists_track_belongs_to_db( id=self.playlist1[1], country=self.market_us, store=self.market_us, isrc=self.track_name1[3], column="ExitDate", ) for period in self.periods: self.comparison_page.select_period_from_dd(period[0]) self.comparison_page.open_playlist_details() self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[1]) names_ui = self.comparison_page.get_playlist_details_names() title_names = self.comparison_page.get_playlists_from_local_market_api_get( apple_spotify="apple", period=period[1], tracks=[self.track_name1[6]], param="name", market=self.market_us, ) title_index = title_names.index(self.playlist1[0]) + 1 added_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "added", self.playlist1[0]) removed_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "removed", self.playlist1[0]) self.ts.markFinal( self.playlist1[0] in names_ui, "STEP 6: {playlist} is displayed in apple playlists for period: {period}".format(playlist=self.playlist1[0], period=[period[0]]), ) self.ts.markFinal(added_date_ui == entry_date, "STEP 7: added dates are correct") self.ts.markFinal(removed_date_ui == exit_date, "removed dates are correct") names_ui = self.comparison_page.get_playlist_details_names() ids_db = self.comparison_page.get_apple_playlists_track_belongs_to_db( country=self.market_us, store=self.market_us, isrc=self.track_name1[3], column="tblAppleMusicWeeklyTopPlaylist.PlaylistId", ) names_api = self.comparison_page.get_playlists_from_local_market_api_get( apple_spotify="apple", period=self.periods[5][1], tracks=[self.track_name1[6]], param="name", market=self.market_us, ) ids_api = self.comparison_page.get_playlists_from_local_market_api_get( apple_spotify="apple", period=self.periods[5][1], tracks=[self.track_name1[6]], param="id", market=self.market_us, ) self.ts.markFinal( sorted(ids_db) == sorted(ids_api), "STEP 8-9: db and api ids playlists are equal: {ids_db}\n\n{ids_api}".format(ids_api=ids_api, ids_db=ids_db), ) self.ts.markFinal(names_ui == names_api, "api and ui playlists names are equal")