import json import unittest from argparse import Namespace import allure import pytest from ui_automation_framework.core import TestStatus from ui_automation_framework.utils import AppConfig, CoreConfig from app.api_client import ApiClient from app.mysql_db_client_custom import MySqlClient 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): track6 = json.loads(json.dumps(AppConfig.get("track6")), object_hook=lambda d: Namespace(**d)) us = json.loads(json.dumps(AppConfig.get("market")["us"]), object_hook=lambda d: Namespace(**d)) @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.sql_client = MySqlClient() self.ts = TestStatus(self.driver) @allure.story("AP-2647") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Verification of Track Streams Performance legend""") @allure.description( """TC verifies all required elements on the charts legend of Track Streams Performance section. All elements are present and streams values are calculated correctly.""" ) def test_tp_legend(self): self.comparison_page.remove_tracks_if_present_with_worker(AppConfig.get("market")["us"]["db"]) user = self.loginPage.get_user_email_with_worker() token = self.api_client.authorize(user=user) for track in [self.track6]: 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.trackPage.select_market(AppConfig.get("market")["australia"]["name"]) self.comparison_page.wait_for_stream_performance_graph_visible() # step 1-2 self.comparison_page.track_performance_verify_legend([self.track6]) # step 3 self.comparison_page.select_period_from_dd(AppConfig.get("periods")["14d"]["name"]) self.comparison_page.wait_for_stream_performance_graph_visible() self.comparison_page.track_performance_select_dsp_from_dd(AppConfig.get("dsp")["apple"]) self.comparison_page.wait_for_stream_performance_graph_visible() streams_cp = int(self.comparison_page.get_track_performance_legend_streams()[0]) url_open = "{base}/spotify/track/{id}?market={market}&str_gr_dsp=2&str_gr_view=2&str_gr_start_date={start}&str_gr_end_date={end}" self.comparison_page.open_new_tab() self.comparison_page.switch_to_tab(2) for track in [self.track6]: end_date = self.comparison_page.get_end_date_for_track_period(period=AppConfig.get("periods")["14d"]["count"], track=track) self.comparison_page.open_url( url_open.format( base=CoreConfig.ENV_BASE_URL, id=track.id, market=AppConfig.get("market")["australia"]["url"], start=track.dates.f_date, end=end_date, ) ) streams_tp = int(str(self.trackPage.get_streams_in_period_total()).replace(",", "")) self.comparison_page.switch_to_tab(1) self.ts.markFinal(streams_cp == streams_tp, "STEP 3: tp and cp streams are: cp: {}, tp: {}".format(streams_cp, streams_tp)) # step 4-5 self.comparison_page.track_performance_select_dsp_from_dd(AppConfig.get("dsp")["total_streams"]) self.comparison_page.wait_for_stream_performance_graph_visible() tooltips = self.comparison_page.get_tooltip_info_track_performance(30) tooltip = str(self.comparison_page.get_tooltip_day_after_ff(14, tooltips)).replace(",", "") url_open = "{base}/spotify/track/{id}?market={market}&str_gr_dsp=4&str_gr_view=1&str_gr_start_date={start}&str_gr_end_date={end}" self.comparison_page.switch_to_tab(2) for track in [self.track6]: end_date = self.comparison_page.get_end_date_for_track_period(period=AppConfig.get("periods")["14d"]["count"], track=track) self.comparison_page.open_url( url_open.format( base=CoreConfig.ENV_BASE_URL, id=track.id, market=AppConfig.get("market")["australia"]["url"], start=end_date, end=end_date, ) ) streams_tp = str(self.trackPage.get_streams_in_period_total_combined()) self.ts.markFinal(streams_tp in tooltip, "STEP 4: streams are equal: tooltip: {}, tp: {}".format(tooltip, streams_tp)) # step 6 self.comparison_page.switch_to_tab(1) streams_cp = int(self.comparison_page.get_track_performance_legend_streams()[0]) url_open = "{base}/spotify/track/{id}?market={market}&str_gr_dsp=4&str_gr_view=1&str_gr_start_date={start}&str_gr_end_date={end}" self.comparison_page.switch_to_tab(2) for track in [self.track6]: end_date = self.comparison_page.get_end_date_for_track_period(period=AppConfig.get("periods")["14d"]["count"], track=track) self.comparison_page.open_url( url_open.format( base=CoreConfig.ENV_BASE_URL, id=track.id, market=AppConfig.get("market")["australia"]["url"], start=track.dates.f_date, end=end_date, ) ) streams_tp = self.trackPage.get_streams_in_period_total_combined() self.comparison_page.switch_to_tab(1) self.ts.markFinal(streams_cp == streams_tp, "STEP 6: tp and cp streams are: cp: {}, tp: {}".format(streams_cp, streams_tp)) # step 7 for period in [AppConfig.get("periods")["8w"]["name"], AppConfig.get("periods")["1y"]["name"]]: streams_cp_before = int(self.comparison_page.get_track_performance_legend_streams()[0]) self.comparison_page.select_period_from_dd(period) streams_cp_after = int(self.comparison_page.get_track_performance_legend_streams()[0]) self.ts.markFinal(streams_cp_before != streams_cp_after, "STEP 7: streams changed due to chosen period") # step 8-9 streams_cp_before = int(self.comparison_page.get_track_performance_legend_streams()[0]) self.comparison_page.select_market_from_dd(AppConfig.get("market")["us"]["name"]) streams_cp_after = int(self.comparison_page.get_track_performance_legend_streams()[0]) self.comparison_page.verify_default_dsp_source_period() self.trackPage.is_market_in_header_correct(AppConfig.get("market")["australia"]["header"]) self.ts.markFinal(streams_cp_before != streams_cp_after, "STEP 9: streams changed due to chosen period") # step 10 streams_cp_before = int(self.comparison_page.get_track_performance_legend_streams()[0]) self.trackPage.select_market(AppConfig.get("market")["global"]["name"]) streams_cp_after = int(self.comparison_page.get_track_performance_legend_streams()[0]) self.trackPage.is_market_in_header_correct(AppConfig.get("market")["global"]["name"]) market = self.comparison_page.get_selected_market() self.comparison_page.verify_default_dsp_source_period() self.ts.markFinal(market == AppConfig.get("market")["global"]["name"], "STEP 10: chosen market is: {}".format(market)) self.ts.markFinal(streams_cp_before != streams_cp_after, "streams changed") # step 11 self.comparison_page.open_playlist_details() streams_before = self.comparison_page.get_track_performance_legend_streams() self.comparison_page.open_stream_details() streams_after = self.comparison_page.get_track_performance_legend_streams() self.ts.markFinal(streams_before == streams_after, "STEP 11: tp is not change after changing tabs")