import datetime import json import unittest from argparse import Namespace 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): track3 = json.loads(json.dumps(AppConfig.get("track3")), object_hook=lambda d: Namespace(**d)) us = json.loads(json.dumps(AppConfig.get("market")["us"]), object_hook=lambda d: Namespace(**d)) period_1_year = json.loads(json.dumps(AppConfig.get("periods")["1y"]), object_hook=lambda d: Namespace(**d)) playlist5 = json.loads(json.dumps(AppConfig.get("playlist5")), object_hook=lambda d: Namespace(**d)) playlist6 = json.loads(json.dumps(AppConfig.get("playlist6")), object_hook=lambda d: Namespace(**d)) columns = json.loads(json.dumps(AppConfig.get("columns")), object_hook=lambda d: Namespace(**d)) @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) @pytest.mark.timeout(300) @allure.story("AP-1431") @allure.severity(allure.severity_level.NORMAL) @allure.title( """Playlist Support [new logic]: Track is removed from the playlist that still belongs to Top 250 Apple 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 been already exit from the playlist, but this playlist still belongs to the 'Top 250 Apple playlists'. Playlist is displayed according to the selected period from release date and the selected market.""" ) def test_track_removed_top_250_apple(self): self.comparison_page.remove_tracks_if_present_with_worker(self.us.market) self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.left_panel.open_comparison_page() self.comparison_page.comparison_page_is_opened() self.comparison_page.click_add_first_track_button() self.add_track_popup.add_track_to_comparison([self.track3.name, self.track3.artist]) self.comparison_page.select_market_from_dd(self.us.name) self.comparison_page.select_period_from_dd(self.period_1_year.name) ids_db = self.comparison_page.select_playlists_ids_top_250_apple(id=self.playlist5.apple_id, country=self.us.db) self.ts.markFinal( ids_db == [self.playlist5.apple_id], "STEP 1-3: playlist {name} belongs to top 250 apple".format(name=self.playlist5.name), ) entry_dates = self.comparison_page.get_selected_apple_track_history_in_playlist_db(id=self.playlist5.apple_id, isrc=self.track3.isrc, column=self.columns.entry, store=self.us.db) exit_dates = self.comparison_page.get_selected_apple_track_history_in_playlist_db(id=self.playlist5.apple_id, isrc=self.track3.isrc, column=self.columns.exit, store=self.us.db) self.ts.markFinal( datetime.datetime.now().date() > exit_dates[-1], "STEP 4: {} track has already exit from playlist {}".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")["apple"]) names = self.comparison_page.get_playlist_details_names() self.ts.markFinal( self.playlist5.name or self.playlist5.name2 in names, "STEP 5: {} is present in playlist support".format(self.playlist5.name), ) title_names = self.comparison_page.get_playlists_from_local_market_api_get( apple_spotify="apple", period=self.period_1_year.count, tracks=[self.track3.apple_id], param="name", market=self.us.market, ) title_index = title_names.index(self.playlist5.name) + 1 added_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "added", self.playlist5.name) removed_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "removed", self.playlist5.name) self.ts.markFinal(added_date_ui == entry_dates, "STEP 6: added dates are correct") self.ts.markFinal(removed_date_ui == exit_dates, "removed dates are correct") top_250_apple_db_playlist2_name = self.comparison_page.select_playlists_ids_top_250_apple(id=self.playlist6.apple_id, country=self.us.db) self.ts.markFinal(top_250_apple_db_playlist2_name == [], "STEP 7: {} not in top 250".format(self.playlist6.name)) self.ts.markFinal(self.playlist6.name not in names, "STEP 8: {} playlist is not on ui".format(self.playlist6.name))