import unittest from datetime import datetime 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 app.src.pages.comparison_page import TrackComparisonPage from app.src.pages.login_page import LoginPage from app.src.pages.third_party.spotifycharts_page import SpotifyCharts from app.src.pages.top_charts_page import TopChartsPage from app.src.pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up") class TopChartsPageTest(unittest.TestCase): us = AppConfig.get("market")["us"] date = "2019-12-12" @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.topChartsPage = TopChartsPage(self.driver) self.trackPage = TrackPage(self.driver) self.comparison_page = TrackComparisonPage(self.driver) self.spotify_charts = SpotifyCharts(self.driver) self.ts = TestStatus(self.driver) self.api_client = ApiClient() @allure.story("AP-2492") @allure.severity(allure.severity_level.NORMAL) @allure.title("Signifying new and re-entered tracks on Top Spotify Weekly chart") @allure.description( """TC verifies that blue dot is used instead of trend for Spotify chart in case new tracks are entering or re-entering the chart.""" ) def test_top_spotify_weekly_current(self): self.loginPage.login_with_worker() self.topChartsPage.open_top_chart_page() self.topChartsPage.select_market(self.us["name"]) self.topChartsPage.switch_tab(self.topChartsPage.SPOTIFY_TYPE) self.topChartsPage.change_sub_tab(self.topChartsPage.WEEKLY) current_date_ui = self.topChartsPage.get_chosen_date() current_date_ui_f = datetime.strptime(current_date_ui, AppConfig.get("date_formats")["mm/dd/yy"]).strftime("%Y-%m-%d") self.verify_new_and_reentered__weekle_date(market=self.us, date=current_date_ui_f, chart_type=self.topChartsPage.WEEKLY) self.verify_new_and_reentered__weekle_date(market=self.us, date=self.date, chart_type=self.topChartsPage.WEEKLY) def verify_new_and_reentered__weekle_date(self, market, date, chart_type): d = datetime.strptime(date, "%Y-%m-%d").strftime(AppConfig.get("date_formats")["mm/dd/yy"]) self.topChartsPage.log.info("Date format: " + d) self.topChartsPage.open_spotify_chart_for_date_dd(d) ui_data_from_table = self.topChartsPage.get_all_from_table() spotify_api = self.api_client.get_charts_tracks(vendor="spotify", market=market["api"], date=date, type=chart_type) entry_reentry_ui_tracks = [] for i, j in zip(ui_data_from_table[1]["trends"], ui_data_from_table[1]["names"]): if i == "": entry_reentry_ui_tracks.append(str(j).split("\n")[0]) self.topChartsPage.log.info("Entry and reentry tracks: " + str(entry_reentry_ui_tracks)) entry_api_tracks = [] reentry_api_tracks = [] for i in range(len(spotify_api["tracks"])): if spotify_api["tracks"][i]["is_new"] is True and spotify_api["tracks"][i]["is_re_enter"] is False: entry_api_tracks.append(spotify_api["tracks"][i]["name"]) for j in range(len(spotify_api["tracks"])): if spotify_api["tracks"][j]["is_new"] is True and spotify_api["tracks"][j]["is_re_enter"] is True: reentry_api_tracks.append(spotify_api["tracks"][j]["name"]) self.topChartsPage.log.info("Entry tracks: " + str(entry_api_tracks)) self.topChartsPage.log.info("Reentry tracks: " + str(reentry_api_tracks)) # step 1, 4 if len(entry_api_tracks) > 0: self.topChartsPage.verify_blue_dot_hover(track=entry_api_tracks[0], ui_table_tr=ui_data_from_table[1]["names"], new_reentry="new", tab="spotify") assert_that(entry_api_tracks).is_subset_of(entry_reentry_ui_tracks) # step 2-3 if len(reentry_api_tracks) > 0: self.topChartsPage.verify_blue_dot_hover(track=reentry_api_tracks[0], ui_table_tr=ui_data_from_table[1]["names"], new_reentry="reentry", tab="spotify") assert_that(reentry_api_tracks).is_subset_of(entry_reentry_ui_tracks)