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 = [ "Liar", "Camila Cabello", "pl.f4d106fed2bd41149aaacabb233eb5eb", 1478601842, 0, 1, "Today’s Hits", "USSM11905818", "2019-09-06", "2019-10-04", "2019-09-05", ] playlist1 = "New Music Daily" playlist2 = "Pure Party" dsp_values_support = ["Spotify", "Apple Music", AppConfig.get("dsp")["all_playlists"]] market_global = "Global" market_us = "us" db_global = "global" period_28 = ["28 Days", 28] periods = [["14 Days", 14], ["28 Days", 28], ["8 Weeks", 56], ["12 Weeks", 84], ["6 Months", 182], ["1 Year", 365]] first_date = "2019-09-05" first_friday = "09/06/19" first_entry = datetime.datetime.strptime("19/09/19", "%d/%m/%y").date() str_first_friday = "Days after First Friday: 0" a_list_pop = "A-List Pop" @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-1840") @allure.severity(allure.severity_level.NORMAL) @allure.title("Playlist Support: Displaying of the playlists that belongs to Top Apple Playlists " "for Global market STEP 1-7") @allure.description( "TC verifies that a user can see playlists where added to comparison track participated in a defined period " "for Top 10 markets in a case of Global market selection. Users see track's life circle in the playlists on " "Playlist Support section, if these playlists belongs to the 'Top 250 Apple playlists': STEP 1-7" ) def test_playlist_displaying_top_apple_steps_1_7(self): self.comparison_page.remove_tracks_if_present_with_worker(self.market_global) 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.track_name1) self.comparison_page.select_market_from_dd(self.market_global) self.comparison_page.select_period_from_dd(self.period_28[0]) apple_api_streams_count = int(self.comparison_page.get_playlist_param_from_api_get(apple_spotify="apple", period=self.period_28[1], track=self.track_name1[3], param="streams")[self.track_name1[4]]) apple_api_playlist_id = self.comparison_page.get_playlist_param_from_api_get(apple_spotify="apple", period=self.period_28[1], track=self.track_name1[3], param="id")[self.track_name1[4]] streams_count_db = self.comparison_page.get_streams_count_for_apple_playlist_db(apple_api_playlist_id, self.db_global) self.ts.markFinal(apple_api_streams_count == streams_count_db, "STEP 1: api and db match") self.comparison_page.open_playlist_details() self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[1]) title_names = self.comparison_page.get_playlists_from_api_get(apple_spotify="apple", period=self.period_28[1], tracks=[self.track_name1[3]], param="name") title_index = title_names.index(self.track_name1[6]) + 1 added_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "added", self.track_name1[6]) removed_date_ui = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "removed", self.track_name1[6]) self.ts.markFinal( added_date_ui[0] == datetime.datetime.strptime(self.track_name1[8], "%Y-%m-%d").date(), "STEP 2-3: added dates are the same in ui and db", ) self.ts.markFinal( removed_date_ui[0] == datetime.datetime.strptime(self.track_name1[9], "%Y-%m-%d").date(), "removed dates in ui and db are the same", ) apple_names = self.comparison_page.get_playlist_details_names() self.ts.markFinal(self.playlist1 in apple_names, "STEP 4: {} playlist is displayed".format(self.playlist1)) self.ts.markFinal(apple_names.count(self.playlist1) == 1, "STEP 5: {} playlist displayed only once".format(self.playlist1)) apple_streams_api = self.comparison_page.get_playlists_from_api_get(apple_spotify="apple", period=self.period_28[1], tracks=[self.track_name1[3]], param="streams") apple_names_api = self.comparison_page.get_playlists_from_api_get(apple_spotify="apple", period=self.period_28[1], tracks=[self.track_name1[3]], param="name") apple_id_db = self.comparison_page.select_playlists_ids_for_28_days_top_250_apple(isrc=self.track_name1[7], period=self.period_28[1], exit_date=self.track_name1[8]) apple_api_ids = self.comparison_page.get_playlist_param_from_api_get(apple_spotify="apple", period=self.period_28[1], track=self.track_name1[3], param="id") self.ts.markFinal( apple_streams_api == sorted(apple_streams_api, reverse=True), "STEP 6: playlists for apple on BE are sorted by streams", ) self.ts.markFinal( apple_names_api == apple_names, "ui and api for apple are match: {}".format(set(apple_names_api) - set(apple_names)), ) self.ts.markFinal( len(apple_id_db) == len(apple_api_ids), "STEP 7: db and api count ids are equal: db {}, api{}".format(len(apple_id_db), len(apple_api_ids)), ) self.ts.markFinal( set(apple_id_db) == set(apple_api_ids), "db and api ids are equal: {}".format(set(apple_id_db) - set(apple_api_ids)), ) @allure.story("AP-1840") @allure.severity(allure.severity_level.NORMAL) @allure.title("Playlist Support: Displaying of the playlists that belongs to Top Apple Playlists " "for Global market STEP 8") @allure.description( "TC verifies that a user can see playlists where added to comparison track participated in a defined period " "for Top 10 markets in a case of Global market selection. Users see track's life circle in the playlists on " "Playlist Support section, if these playlists belongs to the 'Top 250 Apple playlists': STEP 8" ) def test_playlist_displaying_top_apple_steps_8(self): self.comparison_page.remove_tracks_if_present_with_worker(self.market_global) 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.track_name1) self.trackPage.select_market(self.market_global) 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 = self.comparison_page.get_playlist_details_names() apple_id_db = self.comparison_page.select_playlists_ids_for_28_days_top_250_apple(isrc=self.track_name1[7], period=period[1], exit_date=self.track_name1[10]) apple_api_ids = self.comparison_page.get_playlist_param_from_api_get(apple_spotify="apple", period=period[1], track=self.track_name1[3], param="id") apple_api_names = self.comparison_page.get_playlist_param_from_api_get(apple_spotify="apple", period=period[1], track=self.track_name1[3], param="name") self.ts.markFinal( set(apple_id_db) == set(apple_api_ids), "STEP 8: db and api ids for period: {} are equal: {}".format(period[0], set(apple_id_db) - set(apple_api_ids)), ) self.ts.markFinal(names == apple_api_names, "api and ui names are equal") @allure.story("AP-1840") @allure.severity(allure.severity_level.NORMAL) @allure.title("Playlist Support: Displaying of the playlists that belongs to Top Apple Playlists " "for Global market STEP 9") @allure.description( "TC verifies that a user can see playlists where added to comparison track participated in a defined period " "for Top 10 markets in a case of Global market selection. Users see track's life circle in the playlists on " "Playlist Support section, if these playlists belongs to the 'Top 250 Apple playlists': STEP 9" ) def test_playlist_displaying_top_apple_steps_9(self): self.comparison_page.remove_tracks_if_present_with_worker(self.market_global) 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.track_name1) self.trackPage.select_market(self.market_global) self.comparison_page.select_period_from_dd(self.periods[0][0]) self.comparison_page.wait_for_stream_performance_graph_visible() tooltips = self.comparison_page.get_tooltip_info_track_performance((self.periods[0][1] + 2) * 2) apple_first_date = self.comparison_page.get_api_first_last_date_for_dsp(date="first_stream_date", dsp="apple", isrc=self.track_name1[7]) self.comparison_page.select_period_from_dd(self.periods[5][0]) self.comparison_page.open_playlist_details() self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[1]) title_names = self.comparison_page.get_playlists_from_api_get(apple_spotify="apple", period=self.periods[5][1], tracks=[self.track_name1[3]], param="name") title_index = title_names.index(self.playlist2) + 1 added_days = self.comparison_page.get_tooltip_info_for_track_and_title(1, title_index, "added", self.playlist2) self.ts.markFinal(apple_first_date == self.first_date, "STEP 9: first date correct") self.ts.markFinal(self.str_first_friday in tooltips[0], "first friday is 0, tooltip value: {}".format(tooltips[0])) self.ts.markFinal(self.first_friday in tooltips[0], "first friday is {}".format(self.first_friday)) self.ts.markFinal( self.first_entry == added_days[0], "first entry for {} is correct, all: {}".format(self.playlist2, added_days), ) @allure.story("AP-1840") @allure.severity(allure.severity_level.NORMAL) @allure.title("Playlist Support: Displaying of the playlists that belongs to Top Apple Playlists " "for Global market STEP 10-11") @allure.description( "TC verifies that a user can see playlists where added to comparison track participated in a defined period " "for Top 10 markets in a case of Global market selection. Users see track's life circle in the playlists on " "Playlist Support section, if these playlists belongs to the 'Top 250 Apple playlists': STEP 10-11" ) def test_playlist_displaying_top_apple_steps_10_11(self): apple_api_playlist_id = self.comparison_page.get_playlists_from_local_market_for_track_api_get( apple_spotify="apple", period=self.period_28[1], track=self.track_name1[3], param="id", market=self.market_us, )[1] apple_api_playlist_name = self.comparison_page.get_playlists_from_local_market_for_track_api_get( apple_spotify="apple", period=self.period_28[1], track=self.track_name1[3], param="name", market=self.market_us, )[1] apple_api_playlist_streams = self.comparison_page.get_playlists_from_local_market_for_track_api_get( apple_spotify="apple", period=self.period_28[1], track=self.track_name1[3], param="streams", market=self.market_us, )[1] streams_count_db = self.comparison_page.get_streams_count_for_apple_playlist_db(apple_api_playlist_id, self.market_us) self.ts.markFinal( apple_api_playlist_name == self.a_list_pop, f"STEP 10-11: name for title is: {apple_api_playlist_name}\n expected: {self.a_list_pop}", ) self.ts.markFinal( apple_api_playlist_streams == streams_count_db, "streams db and api are equal: db: {}, api: {}".format(streams_count_db, apple_api_playlist_streams), )