import datetime import unittest 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): track2 = AppConfig.get("track2") dsp_values_support = [ AppConfig.get("dsp")["spotify"], AppConfig.get("dsp")["apple"], AppConfig.get("dsp")["all_playlists"], ] spain = AppConfig.get("market")["spain"] columns = AppConfig.get("columns") period_1_year = AppConfig.get("periods")["1y"] periods = [ AppConfig.get("periods")["14d"], AppConfig.get("periods")["28d"], AppConfig.get("periods")["8w"], AppConfig.get("periods")["12w"], AppConfig.get("periods")["6m"], period_1_year, ] playlist3 = AppConfig.get("playlist3") playlist4 = AppConfig.get("playlist4") @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-1417") @allure.severity(allure.severity_level.NORMAL) @allure.title( """Playlist Support [new logic]: Displaying of the playlist that belongs to Top 200 Spotify Playlists STEP 1-5""" ) @allure.description( """TC verifies that a user can see track's life circle in the playlist on Playlist Support section, if this playlist belongs to the 'Top 200 Spotify playlists'. Playlist is displayed according to the selected period from release date and the selected market: STEP 1-5""" ) def test_playlist_displaying_top_200_spotify_steps_1_5(self): first_date = self.comparison_page.get_api_first_last_date_for_dsp(date="first_stream_date", dsp="spotify", isrc=self.track2["isrc"]) self.ts.markFinal(first_date == self.track2["dates"]["first_date"], "STEP 1-3: first date is: {}".format(first_date)) playlist_name = self.comparison_page.get_playlist_name_from_top_200_spotify(id=self.playlist3["id"], country=self.spain["db"]) # step 4 assert_that([p.replace(" ", "") for p in playlist_name]).is_equal_to([self.playlist3["name"].replace(" ", "")]) entry_date = self.comparison_page.get_dates_for_track_history_spotify(id=self.playlist3["id"], isrc=self.track2["isrc"], column=self.columns["entry"]) self.ts.markFinal( entry_date[0] == datetime.datetime.strptime(self.track2["dates"]["first_date"], "%Y-%m-%d").date(), "STEP 5: entry date for playlist is: {}".format(entry_date), ) @pytest.mark.flaky(reruns=0) @allure.story("AP-1417") @allure.severity(allure.severity_level.NORMAL) @allure.title( """Playlist Support [new logic]: Displaying of the playlist that belongs to Top 200 Spotify Playlists STEP 6""" ) @allure.description( """TC verifies that a user can see track's life circle in the playlist on Playlist Support section, if this playlist belongs to the 'Top 200 Spotify playlists'. Playlist is displayed according to the selected period from release date and the selected market: STEP 6""" ) def test_playlist_displaying_top_200_spotify_steps_6(self): self.comparison_page.remove_tracks_if_present_with_worker(self.spain["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.spain["market"], isrc=self.track2["isrc"], id=self.track2["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.spain["name"]) self.comparison_page.select_period_from_dd(self.period_1_year["name"]) self.comparison_page.open_playlist_details() self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[0]) dates_db = self.comparison_page.get_dates_track_in_playlist(track_id=self.track2["id"], playlist_id=self.playlist4["id"]) title_ids = self.comparison_page.get_playlists_from_local_market_api_get( apple_spotify="spotify", period=self.period_1_year["count"], tracks=[self.track2["id"]], param="id", market=self.spain["market"], ) title_index = title_ids.index(self.playlist4["id"]) + 1 added_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "added", self.playlist4["name"]) removed_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "removed", self.playlist4["name"]) date1 = datetime.datetime.strptime(self.playlist4["dates"][0], "%Y-%m-%d").date() date2 = datetime.datetime.strptime(self.playlist4["dates"][1], "%Y-%m-%d").date() date3 = datetime.datetime.strptime(self.playlist4["dates"][2], "%Y-%m-%d").date() self.ts.markFinal((date1 and date2) in dates_db, "STEP 6: 1 day gaps present in db") self.ts.markFinal(date3 not in dates_db, "gap is in db") self.ts.markFinal(date1 in added_date_ui, "added date is covered in ui") self.ts.markFinal(date2 in removed_date_ui, "removed date is covered in ui") @pytest.mark.flaky(reruns=0) @allure.story("AP-1417") @allure.severity(allure.severity_level.NORMAL) @allure.title( """Playlist Support [new logic]: Displaying of the playlist that belongs to Top 200 Spotify Playlists STEP 7-10""" ) @allure.description( """TC verifies that a user can see track's life circle in the playlist on Playlist Support section, if this playlist belongs to the 'Top 200 Spotify playlists'. Playlist is displayed according to the selected period from release date and the selected market: STEP 7-10""" ) def test_playlist_displaying_top_200_spotify_steps_7_10(self): self.comparison_page.remove_tracks_if_present_with_worker(self.spain["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.spain["market"], isrc=self.track2["isrc"], id=self.track2["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.spain["name"]) self.comparison_page.select_period_from_dd(self.period_1_year["name"]) self.comparison_page.open_playlist_details() self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[0]) entry_date = self.comparison_page.get_dates_for_track_history_spotify(id=self.playlist3["id"], isrc=self.track2["isrc"], column=self.columns["entry"]) exit_date = self.comparison_page.get_dates_for_track_history_spotify(id=self.playlist3["id"], isrc=self.track2["isrc"], column=self.columns["exit"]) for period in self.periods: self.comparison_page.select_period_from_dd(period["name"]) self.comparison_page.open_playlist_details() self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[0]) names_ui = self.comparison_page.get_playlist_details_names() self.ts.markFinal( self.playlist3["name"] in names_ui, "STEP 7: {playlist} is displayed in apple playlists for period: {period}".format(playlist=self.playlist3["name"], period=[period["name"]]), ) title_names = self.comparison_page.get_playlists_from_local_market_api_get( apple_spotify="spotify", period=self.period_1_year["count"], tracks=[self.track2["id"]], param="name", market=self.spain["db"], ) title_index = title_names.index(self.playlist3["name"]) + 1 added_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "added", self.playlist3["name"]) removed_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "removed", self.playlist3["name"]) # step 8 assert_that(added_date_ui).is_subset_of(entry_date) assert_that(removed_date_ui).is_subset_of(exit_date) names_ui = self.comparison_page.get_playlist_details_names() ids_db = self.comparison_page.get_spotify_playlists_track_belongs_to_db(country=self.spain["market"], isrc=self.track2["isrc"]) names_api = self.comparison_page.get_playlists_from_local_market_api_get( apple_spotify="spotify", period=self.period_1_year["count"], tracks=[self.track2["id"]], param="name", market=self.spain["market"], ) ids_api = self.comparison_page.get_playlists_from_local_market_api_get( apple_spotify="spotify", period=self.period_1_year["count"], tracks=[self.track2["id"]], param="id", market=self.spain["market"], ) # step 9-10 assert_that(set(ids_api)).is_subset_of(set(ids_db)) self.ts.markFinal(names_ui == names_api, "api and ui playlists names are equal")