import datetime 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): track7 = json.loads(json.dumps(AppConfig.get("track7")), object_hook=lambda d: Namespace(**d)) track8 = json.loads(json.dumps(AppConfig.get("track8")), object_hook=lambda d: Namespace(**d)) track10 = json.loads(json.dumps(AppConfig.get("track10")), object_hook=lambda d: Namespace(**d)) track11 = json.loads(json.dumps(AppConfig.get("track11")), object_hook=lambda d: Namespace(**d)) playlist7 = json.loads(json.dumps(AppConfig.get("playlist7")), object_hook=lambda d: Namespace(**d)) playlist8 = json.loads(json.dumps(AppConfig.get("playlist8")), object_hook=lambda d: Namespace(**d)) playlist9 = json.loads(json.dumps(AppConfig.get("playlist9")), object_hook=lambda d: Namespace(**d)) us = json.loads(json.dumps(AppConfig.get("market")["us"]), object_hook=lambda d: Namespace(**d)) chile = json.loads(json.dumps(AppConfig.get("market")["chile"]), object_hook=lambda d: Namespace(**d)) periods = [["14 Days", 14], ["28 Days", 28], ["8 Weeks", 56], ["12 Weeks", 84], ["6 Months", 182], ["1 Year", 365]] period_14_days = json.loads(json.dumps(AppConfig.get("periods")["14d"]), object_hook=lambda d: Namespace(**d)) period_28_days = json.loads(json.dumps(AppConfig.get("periods")["28d"]), object_hook=lambda d: Namespace(**d)) dsp_values_support = [ AppConfig.get("dsp")["spotify"], AppConfig.get("dsp")["apple"], AppConfig.get("dsp")["all_playlists"], ] @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-1776") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Verification of playlists displaying from the “First Friday” on Playlist Support section""") @allure.description( """TC verifies that lines representing tracks added to Comparison are aligned to "First Friday" after the first stream data appears in our system. """ ) def test_playlist_playlists_from_ff_displaying_on_playlist_support(self): track_list = [self.track7, self.track8, self.track10, self.track11] 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) for track in track_list: self.api_client.add_track_to_comparison(token=token, market=self.us.market, 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.wait_for_stream_performance_graph_visible() self.comparison_page.select_market_from_dd(self.us.name) self.comparison_page.wait_for_stream_performance_graph_visible() self.comparison_page.select_period_from_dd(self.period_28_days.name) self.comparison_page.wait_for_stream_performance_graph_visible() timeline_ps = self.comparison_page.get_playlist_details_timeline() self.ts.markFinal("1st fri" in timeline_ps, "STEP 1: 1 Fri is displayed in playlist support timeline") for track in track_list: first_date = self.comparison_page.get_api_first_date_all_dsp(isrc=track.isrc) # step 2 assert_that(first_date).is_equal_to(datetime.datetime.strptime(track.dates.f_date, "%Y-%m-%d").date()) days_count = int(self.period_28_days.count) + 5 tooltips = self.comparison_page.get_tooltip_info_track_performance(days_count) tooltip_day_ff_0 = self.comparison_page.get_tooltip_day_after_ff(day=0, tooltips=tooltips) for track in track_list: self.ts.markFinal(track.name in tooltip_day_ff_0, f"tooltip day 0 contains all titles: {track.name}") self.comparison_page.open_playlist_details() self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[0]) title_names_spotify = self.comparison_page.get_playlists_from_local_market_api_get( apple_spotify="spotify", period=self.period_28_days.count, tracks=[self.track7.id, self.track8.id, self.track10.id, self.track11.id], param="name", market=self.us.market, ) title_ids_spotify = self.comparison_page.get_playlists_from_local_market_api_get( apple_spotify="spotify", period=self.period_28_days.count, tracks=[self.track7.id, self.track8.id, self.track10.id, self.track11.id], param="id", market=self.us.market, ) title_index = title_names_spotify.index(self.playlist7.name) + 1 self.comparison_page.log.info("Title index: " + str(title_index)) for track in track_list: added_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(track_list.index(track) + 1, title_index, "added", self.playlist7.name) self.comparison_page.log.info("Added date on ui: " + str(added_date_ui)) self.ts.markFinal( added_date_ui[0] == datetime.datetime.strptime(track.dates.first_date, "%Y-%m-%d").date(), "STEP 3-6: added date is correct in playlist support for track {}, ui - {}\n td- {}".format(track.name, added_date_ui, [track.dates.first_date]), ) title_index = title_ids_spotify.index(self.playlist8.id) + 1 added_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "added", self.playlist8.name) self.ts.markFinal( added_date_ui[0] == datetime.datetime.strptime(self.track11.dates.before_ff_date, "%Y-%m-%d").date(), "STEP 7: added date for track: {} in playlist: {} is: {}".format(self.track11.name, self.playlist8.name, added_date_ui[0]), ) self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[1]) title_ids_apple = self.comparison_page.get_playlists_from_local_market_api_get( apple_spotify="apple", period=self.period_28_days.count, tracks=[self.track7.apple_id, self.track8.apple_id, self.track10.apple_id, self.track11.apple_id], param="id", market=self.us.market, ) title_index = title_ids_apple.index(self.playlist9.apple_id) + 1 added_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "added", self.playlist9.name) self.ts.markFinal( added_date_ui[0] == datetime.datetime.strptime(self.track8.dates.before_ff_date, "%Y-%m-%d").date(), "STEP 8: added date for track: {} in playlist: {} is: {}".format(self.track8.name, self.playlist9.name, added_date_ui[0]), ) self.comparison_page.select_period_from_dd(self.periods[2][0]) timeline_ps = self.comparison_page.get_playlist_details_timeline() self.ts.markFinal( timeline_ps[0] == "1st fri", "STEP 9: timeline in playlist support for period: {} starts from 1 fri".format(self.periods[2][0]), ) title_ids_spotify = self.comparison_page.get_playlists_from_local_market_api_get( apple_spotify="spotify", period=self.periods[3][1], tracks=[self.track7.id, self.track8.id, self.track10.id, self.track11.id], param="id", market=self.us.market, ) title_ids_apple = self.comparison_page.get_playlists_from_local_market_api_get( apple_spotify="apple", period=self.periods[3][1], tracks=[self.track7.apple_id, self.track8.apple_id, self.track10.apple_id, self.track11.apple_id], param="id", market=self.us.market, ) self.comparison_page.select_period_from_dd(self.periods[3][0]) self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[0]) title_index = title_ids_spotify.index(self.playlist8.id) + 1 added_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "added", self.playlist8.name) self.ts.markFinal( added_date_ui[0] == datetime.datetime.strptime(self.track11.dates.before_ff_date, "%Y-%m-%d").date(), "STEP 10: added date for track: {} in playlist: {} is: {}".format(self.track11.name, self.playlist8.name, added_date_ui[0]), ) self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[1]) title_index = title_ids_apple.index(self.playlist9.apple_id) + 1 added_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "added", self.playlist9.name) self.ts.markFinal( added_date_ui[0] == datetime.datetime.strptime(self.track8.dates.before_ff_date, "%Y-%m-%d").date(), f"added date for track: {self.track8.name} in playlist: {self.playlist9.name} is: {added_date_ui[0]}\n expected: {self.track8.dates.before_ff_date}", )