import datetime 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 = AppConfig.get("track1") us = AppConfig.get("market")["us"] period_1_year = AppConfig.get("periods")["1y"] playlist1 = AppConfig.get("playlist1") playlist1_name = str(AppConfig.get("playlist1")["name"]).replace(" ", "") playlist2 = AppConfig.get("playlist2") columns = AppConfig.get("columns") @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-1425") @allure.severity(allure.severity_level.NORMAL) @allure.title( """Playlist Support [new logic]: Track is removed form the playlist that still belongs to Top 200 Spotify Playlists""" ) @allure.description( """TC verifies that a user can see track's life circle in the playlist on Playlist Support section, if this track has already exited from the playlist, but this playlist still belongs to the 'Top 200 Spotify playlists'. Playlist is displayed according to the selected period from release date and the selected market.""" ) def test_track_removed_top_200_spotify(self): self.comparison_page.remove_tracks_if_present_with_worker(self.us["market"]) user = self.loginPage.get_user_email_with_worker() token = self.api_client.authorize(user=user) self.api_client.add_track_to_comparison(token=token, market=self.us["market"], isrc=self.track_name1["isrc"], id=self.track_name1["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.us["name"]) self.comparison_page.select_period_from_dd(self.period_1_year["name"]) entry_dates = self.comparison_page.get_dates_for_track_history_spotify(id=self.playlist1["id"], isrc=self.track_name1["isrc"], column=self.columns["entry"]) exit_dates = self.comparison_page.get_dates_for_track_history_spotify(id=self.playlist1["id"], isrc=self.track_name1["isrc"], column=self.columns["exit"]) self.ts.markFinal( datetime.datetime.now().date() > exit_dates[-1], "STEP 1-3: {} bigger than {}".format(datetime.datetime.now().date(), exit_dates[-1]), ) self.comparison_page.open_playlist_details() self.comparison_page.playlist_details_select_dsp_from_dd(AppConfig.get("dsp")["spotify"]) names = self.comparison_page.get_playlist_details_names() self.ts.markFinal(self.playlist1_name in names, "STEP 4: {} is present in playlist support".format(self.playlist1_name)) title_names = self.comparison_page.get_playlists_from_local_market_api_get( apple_spotify="spotify", period=self.period_1_year["count"], tracks=[self.track_name1["id"]], param="name", market=self.us["market"], ) title_index = title_names.index(self.playlist1_name) + 1 added_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "added", self.playlist1_name) removed_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "removed", self.playlist1_name) self.ts.markFinal(added_date_ui == entry_dates, "STEP 5: added dates are correct") self.ts.markFinal(removed_date_ui == exit_dates, "removed dates are correct") entry_dates_p2 = self.comparison_page.get_dates_for_track_history_spotify(id=self.playlist2["id"], isrc=self.track_name1["isrc"], column=self.columns["entry"]) top_200_db_playlist2_name = self.comparison_page.get_playlist_name_from_top_200_spotify(id=self.playlist2["id"], country=self.us["market"]) self.ts.markFinal(top_200_db_playlist2_name == [], "STEP 6: {} not in top 200".format(self.playlist2["name"])) self.ts.markFinal(entry_dates_p2 != [], "STEP 7: {} playlist has history in db".format(self.playlist2["name"])) self.ts.markFinal(self.playlist2["name"] not in names, "STEP 8: {} playlist is not on ui".format(self.playlist2["name"]))