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.login_page import LoginPage from ...pages.spotify_playlist_page import SpotifyPlaylistPage from ...pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up") class TrackPageTest(unittest.TestCase): track = json.loads(json.dumps(AppConfig.get("track63")), object_hook=lambda d: Namespace(**d)) market = AppConfig.get("market")["us"] playlist11_id = json.loads(json.dumps(AppConfig.get("playlist11")["id"]), object_hook=lambda d: Namespace(**d)) @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.trackPage = TrackPage(self.driver) self.api_client = ApiClient() self.spotify_playlist_page = SpotifyPlaylistPage(self.driver) self.ts = TestStatus(self.driver) @allure.story("AP-4686") @allure.severity(allure.severity_level.NORMAL) @allure.title("Verification of streams on UI and in endpoint on Track pages - Streams 7 Days") @allure.description("""Compare data in endpoint response and on Ui""") def test_compare_streams_7_days_ui_api_track_details_spotify(self): self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.trackPage.open_spotify_track_page(self.track.id) self.trackPage.select_market(self.market["name"]) self.trackPage.td_change_dsp([AppConfig.get("dsp")["spotify"]]) end_date = self.trackPage.get_calendar_end_date() # ui self.trackPage.td_switch_to_worldwide_streams() ww_streams_ui = self.trackPage.td_get_track_streams_7_days_values() ww_playlists_ui = self.trackPage.td_get_playlist_ids() ww_playlists_ui_formatted = ["spotify:playlist:" + playlist_id for playlist_id in ww_playlists_ui] self.trackPage.td_switch_to_worldwide_streams(ww=False) market_streams_ui = self.trackPage.td_get_track_streams_7_days_values() market_playlists_ui = self.trackPage.td_get_playlist_ids() market_playlists_ui_formatted = ["spotify:playlist:" + playlist_id for playlist_id in market_playlists_ui] # api ww_streams_api = self.trackPage.get_spotify_api_streams_7_days_by_playlists_id(track_isrc=self.track.isrc, latest_date=end_date, market_api=self.market["market"], playlists_id=ww_playlists_ui_formatted[:5], ww_streams=True) market_streams_api = self.trackPage.get_spotify_api_streams_7_days_by_playlists_id(track_isrc=self.track.isrc, latest_date=end_date, market_api=self.market["market"], playlists_id=market_playlists_ui_formatted[:5]) assert_that(ww_streams_ui[:5]).is_equal_to(sorted(ww_streams_api, reverse=True)) assert_that(market_streams_ui[:5]).is_equal_to(sorted(market_streams_api, reverse=True)) @allure.story("AP-4686") @allure.severity(allure.severity_level.NORMAL) @allure.title("Verification of streams on UI and in endpoint on Track pages - Streams 7 Days") @allure.description("""Compare data in endpoint response and on Ui""") def test_compare_streams_7_days_ui_api_track_details_apple(self): user = self.loginPage.get_user_email_with_worker() token = self.api_client.authorize(user=user) self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.trackPage.open_spotify_track_page(self.track.id) self.trackPage.select_market(self.market["name"]) self.trackPage.td_change_dsp([AppConfig.get("dsp")["apple"]]) self.trackPage.td_change_entities(AppConfig.get("source")["playlists"]) end_date = self.api_client.get_latest_date_all()["apple"] start_date = (datetime.datetime.strptime(end_date, "%Y-%m-%d") - datetime.timedelta(days=6)).date() self.trackPage.td_switch_to_worldwide_streams() # ui market_streams_ui = self.trackPage.td_get_track_streams_7_days_values() market_playlists_ui = self.trackPage.td_get_playlist_ids() # api market_streams_7_days_api = self.trackPage.get_apple_api_streams_1_7_days_by_playlists_id(track_isrc=self.track, start_date=start_date, end_date=end_date, market=self.market, playlists_id=market_playlists_ui[:5], token=token) assert_that(market_streams_ui[:5]).is_equal_to(market_streams_7_days_api) @allure.story("AP-4686") @allure.severity(allure.severity_level.NORMAL) @allure.title("Verification of streams on UI and in endpoint on Track pages - Streams 7 Days") @allure.description("""Compare data in endpoint response and on Ui""") def test_compare_streams_7_days_ui_api_spotify_playlist(self): self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.spotify_playlist_page.open_spotify_playlist_page(self.playlist11_id) self.trackPage.select_market(self.market["name"]) end_date = self.api_client.get_latest_date_all()["apple"] start_date = (datetime.datetime.strptime(end_date, "%Y-%m-%d") - datetime.timedelta(days=6)).date() self.spotify_playlist_page.scroll_to_track_details() self.spotify_playlist_page.sort_by_column(self.spotify_playlist_page.STREAMS_7_DAYS_AVG) self.spotify_playlist_page.switch_to_ww_streams() ww_tracks_id = self.spotify_playlist_page.get_spotify_ids() ww_tracks_isrc = [self.api_client.get_isrc_by_spotify_id(market=self.market["market"], id=track_id)["external_ids"]["isrc"] for track_id in ww_tracks_id] ww_streams_ui = self.spotify_playlist_page.get_values_from_column(self.spotify_playlist_page.STREAMS_7_DAYS_AVG) self.spotify_playlist_page.switch_to_ww_streams(ww=False) market_tracks_id = self.spotify_playlist_page.get_spotify_ids() market_tracks_isrc = [self.api_client.get_isrc_by_spotify_id(market=self.market["market"], id=track_id)["external_ids"]["isrc"] for track_id in market_tracks_id] market_streams_ui = self.spotify_playlist_page.get_values_from_column(self.spotify_playlist_page.STREAMS_7_DAYS_AVG) api_response = self.api_client.get_track_in_playlist_summary_2(start_date=start_date, end_date=end_date, market=self.market["market"], playlist_id=self.playlist11_id) ww_streams_api = [] market_streams_api = [] for track_api in api_response: for track_ui in ww_tracks_isrc[:5]: if track_ui == track_api["isrc"]: ww_track_streams = [v["globalStreams"] for v in track_api["values"]] ww_streams_api.append(round(sum(ww_track_streams) / len(track_api["values"]))) for track_api in api_response: for track_ui in market_tracks_isrc[:5]: if track_ui == track_api["isrc"]: market_track_streams = [v["marketStreams"] for v in track_api["values"]] market_streams_api.append(round(sum(market_track_streams) / len(track_api["values"]))) assert_that(ww_streams_ui[:5]).is_equal_to(sorted(ww_streams_api, reverse=True)) assert_that(market_streams_ui[:5]).is_equal_to(sorted(market_streams_api, reverse=True))