import datetime import logging import unittest import allure import pytest from assertpy import assert_that from ui_automation_framework.utils import logger as cl from app.src.helpers.api_data_provider import ApiDataProvider from app.src.helpers.data_formaters import DataFormatter from app.src.pages.login_page import LoginPage from app.src.pages.playlist_placements_page import PlaylistPlacementsPage from app.src.pages.profile_page import ProfilePage from app.src.pages.search_page import SearchPage from app.src.pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up", "authorized_api") class TrackPlaylistsTest(unittest.TestCase): log = cl.Logger(logging.DEBUG) @pytest.fixture(autouse=True) def classSetup(self, authorized_api): self.api = authorized_api self.loginPage = LoginPage(self.driver, authorized_api) self.trackPage = TrackPage(self.driver, authorized_api) self.searchPage = SearchPage(self.driver, authorized_api) self.profilePage = ProfilePage(self.driver) self.playlistsPage = PlaylistPlacementsPage(self.driver, authorized_api) self.data_provider = ApiDataProvider(authorized_api) @allure.story("https://data-analytics.atlassian.net/browse/AG-7602") @allure.severity(allure.severity_level.NORMAL) @allure.title("Empty states") @allure.description("Empty states for missing playlists on the track page") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-7356" "https://data-analytics.atlassian.net/browse/AG-7368") @pytest.mark.smoke def test_empty_states(self): track_without_playlists_data = "Golliwog Deception Frozen" self.loginPage.login_as_regular_user() self.searchPage.search_for(track_without_playlists_data).open_track_page_from_results(1) assert_that( self.trackPage.are_spotify_playlists_empty_states_displayed(), "Playlists empty states don't displayed for Spotify tab", ).is_true() self.trackPage.select_playlist_dsp("APPLE MUSIC") assert_that( self.trackPage.are_apple_playlists_empty_states_displayed(), "Playlists empty states don't displayed for Apple tab", ).is_true() self.trackPage.select_playlist_dsp("AMAZON") assert_that( self.trackPage.are_amazon_playlists_empty_states_displayed(), "Playlists empty states don't displayed for Amazon tab", ).is_true() @allure.story("https://data-analytics.atlassian.net/browse/AG-7602") @allure.severity(allure.severity_level.NORMAL) @allure.title("Top 5 playlists navigation") @allure.description("Verifying user can open playlist placements from the top 5 playlists section") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-7325") @pytest.mark.smoke def test_top_5_playlists_navigation(self): test_data = self.data_provider.get_top_charts_spotify_track_data() test_track = test_data[0] self.loginPage.login_as_regular_user() self.searchPage.search_for(test_track).open_track_page_from_results(1) self.trackPage.scroll_to_top_5_playlists() playlist_name = self.trackPage.get_top_5_playlist_title() self.trackPage.click_on_playlist_from_top_5() assert_that( self.playlistsPage.is_playlists_placements_page_opened_for_name(playlist_name), "Appropriate playlist placements page wasn't opened", ).is_true() self.playlistsPage.click_back_button() self.trackPage.select_playlist_dsp("APPLE MUSIC") playlist_name = self.trackPage.get_top_5_playlist_title() self.trackPage.click_on_playlist_from_top_5() assert_that( self.playlistsPage.is_playlists_placements_page_opened_for_name(playlist_name), "Appropriate playlist placements page wasn't opened", ).is_true() @allure.story("https://data-analytics.atlassian.net/browse/AG-7602") @allure.severity(allure.severity_level.NORMAL) @allure.title("Top 5 content") @allure.description("Quantity and content of playlists cards on top 5 section") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-7357" "https://data-analytics.atlassian.net/browse/AG-7358") @pytest.mark.smoke def test_top_5_playlists_quantity_and_content_spotify(self): test_data = self.data_provider.get_top_charts_spotify_track_data() test_track = test_data[0] test_track_isrc = test_data[1] dates = self.data_provider.get_track_start_end_dates(test_track_isrc, 6) spotify_playlists_data = self.api.apollo.get_v1_spotify_track_top_playlists(test_track_isrc, dates[0], dates[1], None, 5, "_gl", order_by="-current_streams")["body"]["items"] self.loginPage.login_as_regular_user() self.searchPage.search_for(test_track).open_track_page_from_results(1) top_5_number = self.trackPage.scroll_to_top_5_playlists().get_top_5_playlist_count() assert_that(spotify_playlists_data, "Playlist number").is_length(top_5_number) for i in range(len(spotify_playlists_data)): top_5_ui_data = self.trackPage.get_top_5_playlist_data(i + 1) streams_trend = DataFormatter.calculate_streams_trend(spotify_playlists_data[i]["current_streams"], spotify_playlists_data[i]["prev_streams"]) days_added = (datetime.datetime.today() - datetime.datetime.strptime(spotify_playlists_data[i]["added_date"], "%Y-%m-%d")).days updated_date = DataFormatter.format_api_to_ui_dates(spotify_playlists_data[i]["updated_date"]) if spotify_playlists_data[i]["country_code"]: if spotify_playlists_data[i]["country_code"] == "global": assert_that(top_5_ui_data, "Playlist markets").contains("Global") else: assert_that(top_5_ui_data, "Playlist markets").contains(spotify_playlists_data[i]["country_code"].upper()) else: assert_that(top_5_ui_data, "Playlist markets").contains("N/A") assert_that(top_5_ui_data).described_as("Streams").contains(DataFormatter.round_streams(spotify_playlists_data[i]["current_streams"])).described_as("Names").contains(spotify_playlists_data[i]["name"]) if streams_trend > 0: assert_that(top_5_ui_data.partition("STREAMS")[2], "Trend icon").contains("\ue905") elif streams_trend < 0: assert_that(top_5_ui_data.partition("STREAMS")[2], "Trend icon").contains("\ue902") if spotify_playlists_data[i]["personalized"]: assert_that(top_5_ui_data, "Personalized label").contains("PERSONALIZED") else: assert_that(top_5_ui_data.partition("STREAMS")[0], "Trends").contains(str(abs(spotify_playlists_data[i]["trend"]))) if spotify_playlists_data[i]["trend"] > 0: icon = "\ue902" elif spotify_playlists_data[i]["trend"] < 0: icon = "\ue905" else: icon = "\ue904" assert_that(top_5_ui_data.partition("STREAMS")[0]).contains(icon) assert_that(top_5_ui_data, "Added date").contains(DataFormatter.convert_days_to_years(days_added)) assert_that(top_5_ui_data).described_as("Trend values").contains(DataFormatter.round_streams_trend(streams_trend)).described_as("Update date").contains(updated_date) self.trackPage.swipe_top_5_playlists() @allure.story("https://data-analytics.atlassian.net/browse/AG-7602") @allure.severity(allure.severity_level.NORMAL) @allure.title("Top 5 content") @allure.description("Quantity and content of playlists cards on top 5 section") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-7357" "https://data-analytics.atlassian.net/browse/AG-7358") @pytest.mark.smoke def test_top_5_playlists_quantity_and_content_apple(self): test_data = self.data_provider.get_top_charts_spotify_track_data() test_track = test_data[0] test_track_isrc = test_data[1] dates = self.data_provider.get_track_start_end_dates(test_track_isrc, 6) apple_playlists_data_global = self.api.apollo.get_v1_apple_music_track_top_playlists( test_track_isrc, dates[0], dates[1], market=["us", "ca", "gb", "au", "de", "fr"], limit=5, order_by="-current_streams", keep_zero_streams="false", )[ "body" ]["items"] self.loginPage.login_as_regular_user() self.searchPage.search_for(test_track).open_track_page_from_results(1) top_5_number = self.trackPage.select_playlist_dsp("APPLE MUSIC").scroll_to_top_5_playlists().get_top_5_playlist_count() assert_that(apple_playlists_data_global, "Playlist number").is_length(top_5_number) for i in range(len(apple_playlists_data_global)): top_5_ui_data = self.trackPage.get_top_5_playlist_data(i + 1) streams_trend = DataFormatter.calculate_streams_trend(apple_playlists_data_global[i]["current_streams"], apple_playlists_data_global[i]["prev_streams"]) days_added = (datetime.datetime.today() - datetime.datetime.strptime(apple_playlists_data_global[i]["added_date"], "%Y-%m-%d")).days updated_date = DataFormatter.format_api_to_ui_dates(apple_playlists_data_global[i]["updated_date"]) if apple_playlists_data_global[i]["country_code"] == "_gl": assert_that(top_5_ui_data).contains("Global") else: assert_that(top_5_ui_data, "Market").contains(apple_playlists_data_global[i]["country_code"].upper()) assert_that(top_5_ui_data).described_as("Streams").contains(DataFormatter.round_streams(apple_playlists_data_global[i]["current_streams"])).described_as("Names").contains(apple_playlists_data_global[i]["name"]) if streams_trend > 0: assert_that(top_5_ui_data.partition("STREAMS")[2]).contains("\ue905") elif streams_trend < 0: assert_that(top_5_ui_data.partition("STREAMS")[2]).contains("\ue902") if apple_playlists_data_global[i]["trend"]: assert_that(top_5_ui_data.partition("STREAMS")[0], "Positions").contains(str(abs(apple_playlists_data_global[i]["trend"]))) if apple_playlists_data_global[i]["trend"] is None: pass elif apple_playlists_data_global[i]["trend"] > 0: assert_that(top_5_ui_data.partition("STREAMS")[0]).contains("\ue902") elif apple_playlists_data_global[i]["trend"] < 0: assert_that(top_5_ui_data.partition("STREAMS")[0]).contains("\ue905") assert_that(top_5_ui_data).described_as("Trend values").contains(str(DataFormatter.round_streams_trend(abs(streams_trend)))).described_as("Added date").contains(DataFormatter.convert_days_to_years(days_added)).described_as("Update date").contains(updated_date) self.trackPage.swipe_top_5_playlists() @allure.story("https://data-analytics.atlassian.net/browse/AG-7602") @allure.severity(allure.severity_level.NORMAL) @allure.title("Top 5 content") @allure.description("Quantity and content of playlists cards on top 5 section") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-7357" "https://data-analytics.atlassian.net/browse/AG-7358") @pytest.mark.smoke def test_top_5_playlists_quantity_and_content_apple_market(self): test_track = "Dance Monkey" test_track_isrc = "QZES71982312" market = ["Australia", "au"] dates = self.data_provider.get_track_start_end_dates(test_track_isrc, 6) apple_playlists_data_global = self.api.apollo.get_v1_apple_music_track_top_playlists( test_track_isrc, dates[0], dates[1], market=market[1], limit=5, order_by="-current_streams", keep_zero_streams="false", )[ "body" ]["items"] self.loginPage.login_as_regular_user() self.searchPage.search_for(test_track).open_track_page_from_results(1) top_5_number = self.trackPage.click_select_market_button().select_market_via_search(market[0]).select_playlist_dsp("APPLE MUSIC").scroll_to_top_5_playlists().get_top_5_playlist_count() assert_that(apple_playlists_data_global, "Playlist number").is_length(top_5_number) for i in range(len(apple_playlists_data_global)): top_5_ui_data = self.trackPage.get_top_5_playlist_data(i + 1) streams_trend = DataFormatter.calculate_streams_trend(apple_playlists_data_global[i]["current_streams"], apple_playlists_data_global[i]["prev_streams"]) days_added = (datetime.datetime.today() - datetime.datetime.strptime(apple_playlists_data_global[i]["added_date"], "%Y-%m-%d")).days if days_added >= 365: added_date_in_years = int(days_added / 365) if added_date_in_years == 1: days_added = "1 Year Ago" else: days_added = f"{added_date_in_years} Years Ago" elif days_added == 0: days_added = "Today" elif days_added == 1: days_added = f"{days_added} Day Ago" else: days_added = f"{days_added} Days Ago" updated_date = DataFormatter.format_api_to_ui_dates(apple_playlists_data_global[i]["updated_date"]) assert_that(top_5_ui_data).described_as("Playlist markets ").contains( market[1].upper(), ).described_as( "Streams" ).contains(DataFormatter.round_streams(apple_playlists_data_global[i]["current_streams"])).described_as( "Names" ).contains(apple_playlists_data_global[i]["name"]).described_as( "Trend values" ).contains(str(DataFormatter.round_streams_trend(abs(streams_trend)))).described_as("Added date").contains(str(days_added)).described_as("Update date ").contains(updated_date) if streams_trend > 0: assert_that(top_5_ui_data.partition("STREAMS")[2]).contains("\ue905") elif streams_trend < 0: assert_that(top_5_ui_data.partition("STREAMS")[2]).contains("\ue902") if apple_playlists_data_global[i]["trend"]: assert_that(top_5_ui_data.partition("STREAMS")[0], "Positions").contains( str(abs(apple_playlists_data_global[i]["trend"]))) if apple_playlists_data_global[i]["trend"] is None: icon = None elif apple_playlists_data_global[i]["trend"] > 0: icon = "\ue902" elif apple_playlists_data_global[i]["trend"] < 0: icon = "\ue905" else: icon = "\ue904" if icon is not None: assert_that(top_5_ui_data.partition("STREAMS")[0]).contains(icon) self.trackPage.swipe_top_5_playlists() @allure.story("https://data-analytics.atlassian.net/browse/AG-7602") @allure.severity(allure.severity_level.NORMAL) @allure.title("Top 5 sorting") @allure.description("Cards should be sorted accordingly to the streams") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-7372") @pytest.mark.smoke def test_top_5_playlists_sorting(self): test_data = self.data_provider.get_top_charts_spotify_track_data() test_track = test_data[0] self.loginPage.login_as_regular_user() self.searchPage.search_for(test_track).open_track_page_from_results(1) top_5_number = self.trackPage.scroll_to_top_5_playlists().get_top_5_playlist_count() streams_m = [] streams_k = [] streams = [] for i in range(top_5_number): streams_value = self.trackPage.get_top_5_playlist_data(i + 1).partition("STREAMS")[2].split()[0] if streams_value.endswith("M"): streams_m.append(float(streams_value.replace("M", ""))) elif streams_value.endswith("k"): streams_k.append(float(streams_value.replace("k", ""))) else: streams.append(streams_value) assert_that(streams_m, "Sorting").is_sorted(reverse=True) assert_that(streams_k, "Sorting").is_sorted(reverse=True) assert_that(streams, "Sorting").is_sorted(reverse=True) self.trackPage.select_playlist_dsp("APPLE MUSIC") apple_streams_m = [] apple_streams_k = [] apple_streams = [] for i in range(top_5_number): streams_value = self.trackPage.get_top_5_playlist_data(i + 1).partition("STREAMS")[2].split()[0] if streams_value.endswith("M"): apple_streams_m.append(float(streams_value.replace("M", ""))) elif streams_value.endswith("k"): apple_streams_k.append(float(streams_value.replace("k", ""))) else: apple_streams.append(streams_value) assert_that(apple_streams_m).is_sorted(reverse=True) assert_that(apple_streams_k).is_sorted(reverse=True) assert_that(apple_streams).is_sorted(reverse=True) @allure.story("https://data-analytics.atlassian.net/browse/AG-7602") @allure.severity(allure.severity_level.NORMAL) @allure.title("Latest Adds Spotify Content") @allure.description("Verifying cards content and quantity") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-7387" "https://data-analytics.atlassian.net/browse/AG-7388" "https://data-analytics.atlassian.net/browse/AG-7389") @pytest.mark.smoke def test_latest_adds_spotify_quantity_content(self): market = "_gl" top_data = self.api.apollo.get_charts_top("spotify", "global", fields="is_sony")["body"]["tracks"] track = next(filter(lambda x: x["is_sony"], top_data)) test_track, test_track_isrc = track["name"], track["isrc"] dates = self.data_provider.get_track_start_end_dates(test_track_isrc, 6) latest_adds_api = self.api.apollo.get_v3_spotify_track_playlists(test_track_isrc, None, ["-added_date", "current_position"], "true", 5, "_gl")["body"]["items"] self.loginPage.login_as_regular_user() self.searchPage.search_for(test_track).open_track_page_from_results(1) latest_adds_number = self.trackPage.scroll_to_playlists_latest_adds().get_playlist_latest_adds_count() assert_that(latest_adds_api, "Playlist number").is_length(latest_adds_number) for i in range(len(latest_adds_api)): payload = { "isrc": test_track_isrc, "vendor": "spotify", "items": {latest_adds_api[i]["id"]: [market]}, "start_date": f"{dates[0]}", "end_date": f"{dates[1]}", } streams_data = self.api.dsp.post_track_playlists_streams(payload)["body"]["items"] streams = None if len(streams_data) == 0 else streams_data[0]["current_streams"] lastest_adds_ui_data = self.trackPage.get_latest_adds_playlist_data(i + 1) updated_date = DataFormatter.format_api_to_ui_dates(latest_adds_api[i]["updated_date"]) days_added = (datetime.datetime.today() - datetime.datetime.strptime(latest_adds_api[i]["added_date"], "%Y-%m-%d")).days assert_that(lastest_adds_ui_data).described_as("Track name ").contains(latest_adds_api[i]["name"]).described_as("Updated date").contains(updated_date) if latest_adds_api[i]["country_code"] == "global": assert_that(lastest_adds_ui_data).contains("Global") elif latest_adds_api[i]["country_code"] is None: assert_that(lastest_adds_ui_data).contains("N/A") else: assert_that(lastest_adds_ui_data, "Playlist markets").contains(latest_adds_api[i]["country_code"].upper()) if latest_adds_api[i]["personalized"]: assert_that(lastest_adds_ui_data, "Personalized label").contains("PERSONALIZED") else: assert_that(lastest_adds_ui_data, "Position").contains(str(latest_adds_api[i]["current_position"])) if latest_adds_api[i]["trend"]: if streams: assert_that(lastest_adds_ui_data, "Streams value").contains(str(DataFormatter.round_streams(streams))) else: assert_that(lastest_adds_ui_data, "Streams value").contains("N/A") assert_that(lastest_adds_ui_data).contains(str(abs(latest_adds_api[i]["trend"]))) if latest_adds_api[i]["trend"] > 0: icon = "\ue902" elif latest_adds_api[i]["trend"] < 0: icon = "\ue905" else: icon = "\ue904" assert_that(lastest_adds_ui_data).contains(icon) if days_added > 0: assert_that(lastest_adds_ui_data, "Added date").contains(str(days_added)) else: assert_that(lastest_adds_ui_data, "Added date").contains("Today") @allure.story("https://data-analytics.atlassian.net/browse/AG-7602") @allure.severity(allure.severity_level.NORMAL) @allure.title("Latest Adds Apple Content") @allure.description("Verifying cards content and quantity") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-7387" "https://data-analytics.atlassian.net/browse/AG-7388" "https://data-analytics.atlassian.net/browse/AG-7389") @pytest.mark.smoke def test_latest_adds_apple_global_quantity_content(self): test_data = self.data_provider.get_top_charts_spotify_track_data() test_track = test_data[0] test_track_isrc = test_data[1] # dates = self.data_provider.get_track_start_end_dates(test_track_isrc, 6) latest_adds_api = self.api.apollo.get_v1_apple_music_track_playlists(test_track_isrc, ["us", "ca", "gb", "au", "de", "fr"], ["-added_date", "current_position"], "true", 5)["body"]["items"] self.loginPage.login_as_regular_user() self.searchPage.search_for(test_track).open_track_page_from_results(1) latest_adds_number = self.trackPage.select_playlist_dsp("APPLE MUSIC").scroll_to_playlists_latest_adds().get_playlist_latest_adds_count() assert_that(latest_adds_api, "Playlist number").is_length(latest_adds_number) for i in range(len(latest_adds_api)): # payload = { # "isrc": test_track_isrc, # "vendor": "apple", # "items": {latest_adds_api[i]["id"]: [latest_adds_api[i]["country_code"]]}, # "start_date": f"{dates[0]}", # "end_date": f"{dates[1]}", # } # streams_data = self.api.dsp.post_track_playlists_streams(payload)["body"]["items"] # streams = "" # if not streams_data: # streams = None # else: # streams = streams_data[0]["current_streams"] lastest_adds_ui_data = self.trackPage.get_latest_adds_playlist_data(i + 1) updated_date = DataFormatter.format_api_to_ui_dates(latest_adds_api[i]["updated_date"]) days_added = (datetime.datetime.today() - datetime.datetime.strptime(latest_adds_api[i]["added_date"], "%Y-%m-%d")).days assert_that(lastest_adds_ui_data).described_as("Position").contains(str(latest_adds_api[i]["current_position"])).described_as("Track name").contains(latest_adds_api[i]["name"]).described_as("Updated date").contains(updated_date) # if streams: # assert_that(lastest_adds_ui_data, 'Streams value').contains(DataFormatter.round_streams(streams)) # else: # assert_that(lastest_adds_ui_data, 'Streams value').contains("N/A") country_code_expected = "Global" if latest_adds_api[i]["country_code"] == "_gl" else latest_adds_api[i]["country_code"].upper() assert_that(lastest_adds_ui_data, "Playlist market").contains(country_code_expected) if latest_adds_api[i]["trend"]: assert_that(lastest_adds_ui_data, "Trends").contains(str(abs(latest_adds_api[i]["trend"]))) if latest_adds_api[i]["trend"] > 0: icon = "\ue902" elif latest_adds_api[i]["trend"] < 0: icon = "\ue905" else: icon = "\ue904" assert_that(lastest_adds_ui_data).contains(icon) if days_added > 0: assert_that(lastest_adds_ui_data, "Added date").contains(str(days_added)) else: assert_that(lastest_adds_ui_data, "Added date").contains("Today") @allure.story("https://data-analytics.atlassian.net/browse/AG-7602") @allure.severity(allure.severity_level.NORMAL) @allure.title("Latest Adds Apple Content for specific market") @allure.description("Verifying cards content and quantity") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-7387" "https://data-analytics.atlassian.net/browse/AG-7388" "https://data-analytics.atlassian.net/browse/AG-7389") @pytest.mark.smoke def test_latest_adds_apple_market_quantity_content(self): test_data = self.data_provider.get_top_charts_spotify_track_data("gb") test_track = test_data[0] test_track_isrc = test_data[1] market = ["United Kingdom", "gb"] # dates = self.data_provider.get_track_start_end_dates(test_track_isrc, 6) latest_adds_api = self.api.apollo.get_v1_apple_music_track_playlists(test_track_isrc, market[1], ["-added_date", "current_position"], "true", 5)["body"]["items"] self.loginPage.login_as_regular_user() self.searchPage.search_for(test_track).open_track_page_from_results(1) latest_adds_number = self.trackPage.click_select_market_button().select_market_via_search(market[0]).select_playlist_dsp("APPLE MUSIC").scroll_to_playlists_latest_adds().get_playlist_latest_adds_count() assert_that(latest_adds_api, "Playlist number").is_length(latest_adds_number) for i in range(len(latest_adds_api)): # payload = { # "isrc": test_track_isrc, # "vendor": "apple", # "items": {latest_adds_api[i]["id"]: [market[1]]}, # "start_date": f"{dates[0]}", # "end_date": f"{dates[1]}", # } # streams_data = self.api.dsp.post_track_playlists_streams(payload)["body"]["items"] # streams = None if len(streams_data) == 0 else streams_data[0]["current_streams"] lastest_adds_ui_data = self.trackPage.get_latest_adds_playlist_data(i + 1) updated_date = DataFormatter.format_api_to_ui_dates(latest_adds_api[i]["updated_date"]) days_added = (datetime.datetime.today() - datetime.datetime.strptime(latest_adds_api[i]["added_date"], "%Y-%m-%d")).days # expected_streams_value = DataFormatter.round_streams(streams) if streams else "N/A" expected_market = "Global" if latest_adds_api[i]["country_code"] == "_gl" else latest_adds_api[i]["country_code"].upper() assert_that(lastest_adds_ui_data).described_as("Position").contains(str(latest_adds_api[i]["current_position"])).described_as("Track name").contains(latest_adds_api[i]["name"]).described_as("Updated date").contains(updated_date).described_as("Playlist markets").contains(expected_market) if latest_adds_api[i]["trend"]: if latest_adds_api[i]["trend"] > 0: icon = "\ue902" elif latest_adds_api[i]["trend"] < 0: icon = "\ue905" else: icon = "\ue904" expected_days = str(days_added) if days_added > 0 else "Today" assert_that(lastest_adds_ui_data).described_as("Trend icon").contains(icon).described_as("Added date").contains(expected_days).described_as("Trends").contains(str(abs(latest_adds_api[i]["trend"]))) @allure.story("https://data-analytics.atlassian.net/browse/AG-7602") @allure.severity(allure.severity_level.NORMAL) @allure.title("Latest Adds Navigation") @allure.description("Verifying user can open playlist placements from the Latest Adds section") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-7391") @pytest.mark.smoke def test_latest_adds_navigation(self): # Getting track from "Today's top Hits" test_track = self.api.apollo.get_spotify_playlist_tracklist("37i9dQZF1DXcBWIGoYBM5M", "global", "current_position", 100, 0)["body"]["items"][0]["name"] self.loginPage.login_as_regular_user() self.searchPage.search_for(test_track).open_track_page_from_results(1) self.trackPage.scroll_to_playlists_latest_adds() if self.trackPage.get_playlist_latest_adds_count() != 0: playlist_name = self.trackPage.get_latest_adds_playlist_title(1) self.trackPage.click_on_playlist_from_latest_adds() assert_that( self.playlistsPage.is_playlists_placements_page_opened_for_name(playlist_name), "Appropriate playlist placements page wasn't opened", ).is_true() self.playlistsPage.click_back_button() self.trackPage.select_playlist_dsp("APPLE MUSIC") if self.trackPage.get_playlist_latest_adds_count() != 0: playlist_name = self.trackPage.get_latest_adds_playlist_title(1) self.trackPage.click_on_playlist_from_latest_adds() assert_that( self.playlistsPage.is_playlists_placements_page_opened_for_name(playlist_name), "Appropriate playlist placements page wasn't opened", ).is_true() @allure.story("https://data-analytics.atlassian.net/browse/AG-7602") @allure.severity(allure.severity_level.NORMAL) @allure.title("Latest Adds Sorting") @allure.description("Verifying Latest Adds section sorting accordingly to date added and position in playlist") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-7391") @pytest.mark.smoke def test_latest_adds_sorting(self): test_data = self.data_provider.get_top_charts_spotify_track_data("gb") test_track = test_data[0] market = "United Kingdom" self.loginPage.login_as_regular_user() self.searchPage.search_for(test_track).open_track_page_from_results(1) playlists_number = self.trackPage.click_select_market_button().select_market_via_search(market).scroll_to_playlists_latest_adds().get_playlist_latest_adds_count() days = [] positions = [] for i in range(playlists_number): text = self.trackPage.get_latest_adds_playlist_data(i + 1) if "PERSONALIZED" not in text: added_ago = self.trackPage.get_latest_adds_playlist_data(i + 1).partition("Added")[2].split()[0] position = self.trackPage.get_latest_adds_playlist_data(i + 1).partition("#")[2].split()[0] days.append(added_ago) positions.append(position) else: continue for i in range(len(days) - 1): if days[i] == "Today": assert_that(positions[i] >= positions[i + 1], "Sortin is in wrong order").is_true() else: assert_that(days[i] <= days[i + 1], "Sorting is in wrong order").is_true() @allure.story("https://data-analytics.atlassian.net/browse/AG-7602") @allure.severity(allure.severity_level.NORMAL) @allure.title("Info popups") @allure.description("Verifying information popups on the playlists section") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-7423" "https://data-analytics.atlassian.net/browse/AG-7426" "https://data-analytics.atlassian.net/browse/AG-2635" "https://data-analytics.atlassian.net/browse/AG-7424") @pytest.mark.smoke def test_info_popups(self): test_data = self.data_provider.get_top_charts_spotify_track_data() test_track = test_data[0] self.loginPage.login_as_regular_user() self.searchPage.search_for(test_track).open_track_page_from_results(1) self.trackPage.scroll_to_top_5_playlists().click_playlists_info_icon() assert_that(self.trackPage.is_playlists_info_popup_opened(), "Info popup wasn't opened").is_true() self.trackPage.close_popup_by_swipe().click_lastest_adds_info_icon() assert_that(self.trackPage.is_latest_adds_info_popup_opened(), "Info popup wasn't opened").is_true() self.trackPage.close_popup_tap_outside().click_top_5_playlists_info_icon() assert_that(self.trackPage.is_top_5_playlists_popup_opened(), "Info popup wasn't opened").is_true() self.trackPage.close_popup_tap_outside().click_lastest_removals_info_icon() assert_that(self.trackPage.is_latest_removals_info_popup_opened(), "Info popup wasn't opened").is_true() @allure.story("https://data-analytics.atlassian.net/browse/AG-7602") @allure.severity(allure.severity_level.NORMAL) @allure.title("Latest Removals Content") @allure.description("Content of latest removals cards") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-7462" "https://data-analytics.atlassian.net/browse/AG-7473" "https://data-analytics.atlassian.net/browse/AG-7461") @pytest.mark.smoke def test_latest_removals_content_spotify(self): test_data = self.data_provider.get_top_charts_spotify_track_data() test_track = test_data[0] track_isrc = test_data[1] latest_removals_data = self.api.apollo.get_v3_spotify_track_previous_playlists( f"isrc={track_isrc}", "limit=5", "recent_removals_only=true", "exclude_current_playlists=true", "order_by=-removed_date", "order_by=id", "streams_market=_gl", )[ "body" ]["items"] self.loginPage.login_as_regular_user() self.searchPage.search_for(test_track).open_track_page_from_results(1) for i in range(len(latest_removals_data)): ui_data = self.trackPage.get_latest_removals_data(i + 1) days_removed = (datetime.datetime.today() - datetime.datetime.strptime(latest_removals_data[i]["removed_date"], "%Y-%m-%d")).days if latest_removals_data[i]["personalized"]: assert_that(ui_data, "Latest removals personalized label").contains("PERSONALIZED") if not latest_removals_data[i]["personalized"]: removed_days = "Removed {}".format("Today" if days_removed == 0 else days_removed) assert_that(ui_data, "Removed days data").contains(removed_days) assert_that(ui_data).described_as("Latest removals playlist name ").contains(latest_removals_data[i]["name"]).described_as("Updated date").contains(DataFormatter.format_api_to_ui_dates(latest_removals_data[i]["updated_date"])) self.trackPage.tap_to_latest_removals_card(i + 1) assert_that( self.playlistsPage.is_playlists_placements_page_opened_for_name(latest_removals_data[i]["name"]), "Playlist placement wasn't opened", ) self.playlistsPage.click_back_button() @allure.story("https://data-analytics.atlassian.net/browse/AG-7602") @allure.severity(allure.severity_level.NORMAL) @allure.title("Latest Removals Content. Apple") @allure.description("Content of latest removals cards") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-7462" "https://data-analytics.atlassian.net/browse/AG-7473" "https://data-analytics.atlassian.net/browse/AG-7461") @pytest.mark.smoke def test_latest_removals_content_apple(self): test_data = self.data_provider.get_top_charts_apple_track_data() track_isrc = test_data[1] test_track = self.api.apollo.get_list_of_spotify_tracks(f"isrc:{track_isrc}")["body"]["tracks"]["items"][0]["name"] latest_removals_data = self.api.apollo.get_v3_apple_music_track_previous_playlists( f"isrc={track_isrc}", "&limit=5", "recent_removals_only=true", "exclude_current_playlists=true", "order_by=-removed_date", "order_by=id", "market=us&market=ca&market=gb&market=de&market=au&market=fr", )[ "body" ]["items"] self.loginPage.login_as_regular_user() self.searchPage.search_for(test_track).open_track_page_from_results(1) for i in range(len(latest_removals_data)): ui_data = self.trackPage.select_playlist_dsp("APPLE MUSIC").get_latest_removals_data(i + 1) days_removed = (datetime.datetime.today() - datetime.datetime.strptime(latest_removals_data[i]["removed_date"], "%Y-%m-%d")).days expected_days_removed = "Removed {}".format(days_removed or "Today") assert_that(ui_data).described_as("Removed days").contains(expected_days_removed).described_as("Latest removals playlist name").contains(latest_removals_data[i]["name"]).described_as("Market data").contains(latest_removals_data[i]["country_code"].upper()).described_as( "Updated date" ).contains(DataFormatter.format_api_to_ui_dates(latest_removals_data[i]["updated_date"])) self.trackPage.tap_to_latest_removals_card(i + 1) assert_that( self.playlistsPage.is_playlists_placements_page_opened_for_name(latest_removals_data[i]["name"]), "Playlist placement wasn't opened", ) self.playlistsPage.click_back_button() @allure.story("https://data-analytics.atlassian.net/browse/AG-9096") @allure.severity(allure.severity_level.NORMAL) @allure.title("Filtered Playlists widget verification") @allure.description("Verify that the content and format of the Filtered Playlists widget match the endpoint") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-7416") @pytest.mark.smoke def test_content_and_format_of_the_filtered_playlists_widget(self): test_data = self.data_provider.get_top_charts_spotify_track_data() test_track = test_data[0] test_track_isrc = test_data[1] current_playlists_spotify = self.api.apollo.get_spotify_playlists_data_go( isrc=test_track_isrc, streams_market="_gl", streams_type="priority", keep_zero_streams=True, offset=0, limit=1)["body"]["count"] past_playlists_spotify = self.api.apollo.get_v3_spotify_track_previous_playlists( f"isrc={test_track_isrc}", "limit=1", "offset=0", "streams_market=_gl")["body"]["count"] total_playlists_spotify = current_playlists_spotify + past_playlists_spotify current_playlists_apple = self.api.apollo.get_apple_playlists_data_go( isrc=test_track_isrc, streams_type="priority", keep_zero_streams=True, offset=0, limit=1, market="us,ca,gb,de,au,fr")["body"]["count"] past_playlists_apple = self.api.apollo.get_v3_apple_music_track_previous_playlists( f"isrc={test_track_isrc}", "limit=1", "offset=0", "market=us,ca,gb,de,au,fr")["body"]["count"] total_playlists_apple = current_playlists_apple + past_playlists_apple current_playlists_amazon = self.api.apollo.get_amazon_playlists_data_go( isrc=test_track_isrc, streams_type="priority", keep_zero_streams=True, offset=0, limit=1, market="us,ca,gb,de,au,fr")["body"]["count"] self.loginPage.login_as_regular_user() self.searchPage.search_for(test_track).open_track_page_from_results(1) self.trackPage.is_filtered_playlists_widget_has_correct_information( current=current_playlists_spotify, past=past_playlists_spotify, total=total_playlists_spotify, vendor="Spotify") self.trackPage.select_playlist_dsp("APPLE MUSIC") self.trackPage.is_filtered_playlists_widget_has_correct_information( current=current_playlists_apple, past=past_playlists_apple, total=total_playlists_apple, vendor="Apple") self.trackPage.select_playlist_dsp("AMAZON") self.trackPage.is_filtered_playlists_widget_has_correct_information( current=current_playlists_amazon, vendor="Amazon")