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 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)) performance_tooltip = "First Friday (1ST FRI) refers to the first Friday of streaming data." @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-2645") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Streams Graph. Verification of all required components on the Stream Performance Section""") @allure.description( """TC verifies all required elements on the Track Performance section. All elements are present and work as expected on the the Track Performance section on Track Comparison page.""" ) def test_sp_section(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) 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")["us"]["name"]) # step 1-2 self.comparison_page.is_tp_title_displayed() # step 3 self.comparison_page.verify_info_icon_and_tooltip_for("performance-title", self.performance_tooltip) # step 4 self.comparison_page.tp_verify_axises() # step 5 self.comparison_page.track_performance_verify_legend([self.track6]) # step 6-8 self.comparison_page.verify_default_dsp_source_period() # step 7 self.comparison_page.verify_all_dsp_from_dd( "performance", [ AppConfig.get("dsp")["total_streams"], AppConfig.get("dsp")["spotify"], AppConfig.get("dsp")["apple"], AppConfig.get("dsp")["amazon"], ], ) # step 9 streams_before = self.comparison_page.get_track_performance_legend_streams() self.comparison_page.track_performance_select_dsp_from_dd(AppConfig.get("dsp")["apple"]) streams_after = self.comparison_page.get_track_performance_legend_streams() self.ts.markFinal(streams_before != streams_after, "STEP 9: streams are change after switch to apple dsp") # step 10 streams_before = self.comparison_page.get_track_performance_legend_streams() self.comparison_page.track_performance_select_dsp_from_dd(AppConfig.get("dsp")["total_streams"]) streams_after = self.comparison_page.get_track_performance_legend_streams() self.ts.markFinal( streams_before != streams_after, f'STEP 10: streams are change after switch to {AppConfig.get("dsp")["total_streams"]} dsp', ) # step 11 streams_before = self.comparison_page.get_track_performance_legend_streams() self.comparison_page.track_performance_select_dsp_from_dd(AppConfig.get("dsp")["spotify"]) streams_after = self.comparison_page.get_track_performance_legend_streams() self.ts.markFinal(streams_before != streams_after, "STEP 11: streams are change after switch to spotify dsp") # step 12 for dsp in [AppConfig.get("dsp")["spotify"], AppConfig.get("dsp")["apple"], AppConfig.get("dsp")["amazon"]]: self.comparison_page.track_performance_select_dsp_from_dd(dsp) self.comparison_page.verify_source_values(param=dsp, dd="performance") # step 13, 19 streams_before = self.comparison_page.get_track_performance_legend_streams() self.comparison_page.track_performance_select_dsp_from_dd(AppConfig.get("dsp")["spotify"]) self.comparison_page.track_performance_select_source(AppConfig.get("source")["album_page"]) tooltips = self.comparison_page.get_tooltip_info_track_performance(28) tooltip = self.comparison_page.get_tooltip_day_after_ff(0, tooltips) self.ts.markFinal( AppConfig.get("dsp")["spotify"] and AppConfig.get("source")["album_page"] in tooltip, "tooltip: {}".format(tooltip), ) streams_sp = self.comparison_page.get_track_performance_legend_streams() self.ts.markFinal(streams_before != streams_sp, "STEP 13: streams are change after switch to spotify dsp") self.comparison_page.track_performance_select_dsp_from_dd(AppConfig.get("dsp")["apple"]) self.comparison_page.track_performance_select_source(AppConfig.get("source")["discovery"]) tooltips = self.comparison_page.get_tooltip_info_track_performance(28) tooltip = self.comparison_page.get_tooltip_day_after_ff(0, tooltips) self.ts.markFinal( AppConfig.get("dsp")["apple"] and AppConfig.get("source")["discovery"] in tooltip, "tooltip: {}".format(tooltip), ) streams_ap = self.comparison_page.get_track_performance_legend_streams() self.ts.markFinal(streams_sp != streams_ap, "streams are change after switch to apple dsp") self.comparison_page.track_performance_select_dsp_from_dd(AppConfig.get("dsp")["amazon"]) self.comparison_page.track_performance_select_source(AppConfig.get("source")["playlists"]) tooltips = self.comparison_page.get_tooltip_info_track_performance(28) tooltip = self.comparison_page.get_tooltip_day_after_ff(0, tooltips) self.ts.markFinal( AppConfig.get("dsp")["amazon"] and AppConfig.get("source")["playlists"] in tooltip, "tooltip: {}".format(tooltip), ) streams_am = self.comparison_page.get_track_performance_legend_streams() self.ts.markFinal(streams_ap != streams_am, "streams are change after switch to amazon dsp") # step 14-18 for period in [ AppConfig.get("periods")["8w"]["name"], AppConfig.get("periods")["12w"]["name"], AppConfig.get("periods")["6m"]["name"], AppConfig.get("periods")["1y"]["name"], ]: streams_before = self.comparison_page.get_track_performance_legend_streams() self.comparison_page.select_period_from_dd(period) streams_after = self.comparison_page.get_track_performance_legend_streams() current_t = self.comparison_page.get_track_streams_performance_timeline() expected_t = self.comparison_page.get_expected_timeline(period) self.comparison_page.track_performance_verify_legend([self.track6]) self.ts.markFinal(streams_before != streams_after, "STEP 14: streams are change after switch period") self.ts.markFinal(current_t == expected_t, "STEP 15: timeline is correct: {}, expected: {}".format(current_t, expected_t)) # step 20-21 self.comparison_page.verify_market_period_dsp_source_hover() # step 22 streams_before = self.comparison_page.get_track_performance_legend_streams() self.comparison_page.select_market_from_dd(AppConfig.get("market")["argentina"]["name"]) streams_after = self.comparison_page.get_track_performance_legend_streams() self.trackPage.is_market_in_header_correct(AppConfig.get("market")["us"]["header"]) self.comparison_page.verify_default_dsp_source_period() self.ts.markFinal(streams_before != streams_after, "STEP 22: streams are change after change market") # step 23 streams_before = self.comparison_page.get_track_performance_legend_streams() self.trackPage.select_market(AppConfig.get("market")["global"]["name"]) self.trackPage.is_market_in_header_correct(AppConfig.get("market")["global"]["name"]) self.comparison_page.verify_default_dsp_source_period() current_market = self.comparison_page.get_selected_market() streams_after = self.comparison_page.get_track_performance_legend_streams() self.ts.markFinal(current_market == AppConfig.get("market")["global"]["name"], "STEP 23: market is correct") self.ts.markFinal(streams_before != streams_after, "STEP 23: streams are change after change market")