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.audience_graph import AudienceGraphChart 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)) track24 = json.loads(json.dumps(AppConfig.get("track24")), object_hook=lambda d: Namespace(**d)) track15 = json.loads(json.dumps(AppConfig.get("track15")), object_hook=lambda d: Namespace(**d)) track13 = json.loads(json.dumps(AppConfig.get("track13")), object_hook=lambda d: Namespace(**d)) track25 = json.loads(json.dumps(AppConfig.get("track25")), object_hook=lambda d: Namespace(**d)) track22 = json.loads(json.dumps(AppConfig.get("track22")), object_hook=lambda d: Namespace(**d)) track26 = json.loads(json.dumps(AppConfig.get("track26")), object_hook=lambda d: Namespace(**d)) source = json.loads(json.dumps(AppConfig.get("source")), 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.audience_graph = AudienceGraphChart(self.driver) self.api_client = ApiClient() self.sql_client = MySqlClient() self.ts = TestStatus(self.driver) @allure.story("AP-2702") @allure.severity(allure.severity_level.NORMAL) @allure.title("""By DSP graph elements verification""") @allure.description( """TC verifies that user can see the streams of compared tracks represented in the way of Radial Bar Chart view. All the elements are displayed in accordance with designs. """ ) def test_by_dsp_graph_elements_ui(self): tracks = [self.track6, self.track24, self.track15, self.track13, self.track25] self.comparison_page.remove_tracks_if_present_with_worker(self.us.market) user = self.loginPage.get_user_email_with_worker() token = self.api_client.authorize(user=user) for track in [tracks[0]]: 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(self.us.name) self.comparison_page.select_market_from_dd(self.us.name) self.comparison_page.select_period_from_dd(AppConfig.get("periods")["28d"]["name"]) self.comparison_page.by_dsp_verify_title() tooltips = self.comparison_page.by_dsp_get_tooltips() graph_track_names = self.comparison_page.by_dsp_graph_get_added_tracks() graph_scale = self.comparison_page.by_dsp_graph_get_scale() self.comparison_page.be_dsp_verify_legend() self.ts.markFinal(len(tooltips) == 1, "STEP 1: only one tooltip is displayed in by dsp graph") self.ts.markFinal([self.track6.name] == graph_track_names, "track: {} is displayed in graph".format(self.track6.name)) self.ts.markFinal(len(graph_scale) == 6, "graph scale is displayed") for track in tracks[1:]: self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=track.isrc, id=track.id) self.comparison_page.refresh() graph_track_names = self.comparison_page.by_dsp_graph_get_added_tracks() self.ts.markFinal(track.name in graph_track_names, "STEP 2: track: {} is displayed in graph".format(track.name)) graph_track_names = self.comparison_page.by_dsp_graph_get_added_tracks() self.ts.markFinal([t.name for t in tracks] == graph_track_names, "STEP 3: bars are displayed in correct order") self.comparison_page.remove_track(5) graph_track_names = self.comparison_page.by_dsp_graph_get_added_tracks() self.ts.markFinal([t.name for t in tracks[:4]] == graph_track_names, "STEP 4: track is removed from graph") for track in [tracks[-1]]: self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=track.isrc, id=track.id) self.comparison_page.refresh() graph_track_names = self.comparison_page.by_dsp_graph_get_added_tracks() self.ts.markFinal( [t.name for t in tracks] == graph_track_names, "track is added back to graph: tracks: {}, graph: {}".format([t.name for t in tracks], graph_track_names), ) # step 5 tooltips_parsed = self.comparison_page.by_dsp_get_tooltips_parsed() tooltip = self.comparison_page.by_dsp_get_tooltip_for_track(tooltips_parsed, self.track6) self.comparison_page.by_dsp_verify_tooltip(tooltip, self.track6) tooltip = self.comparison_page.by_dsp_get_tooltip_for_track(tooltips_parsed, self.track15) self.ts.markFinal( tooltip["amazon_value"] == "0", "STEP 6-7: amazon value is not in tooltip for track {}".format(self.track15.name), ) self.ts.markFinal(tooltip["apple_value"] == "0", "apple value is not in tooltip for track {}".format(self.track15.name)) self.comparison_page.select_market_from_dd(AppConfig.get("market")["australia"]["name"]) self.trackPage.is_market_in_header_correct(AppConfig.get("market")["us"]["header"]) self.trackPage.select_market(AppConfig.get("market")["brazil"]["name"]) for period in [ AppConfig.get("periods")["14d"]["name"], AppConfig.get("periods")["28d"]["name"], AppConfig.get("periods")["8w"]["name"], AppConfig.get("periods")["12w"]["name"], AppConfig.get("periods")["6m"]["name"], AppConfig.get("periods")["1y"]["name"], ]: tooltips_before = self.comparison_page.by_dsp_get_tooltips() self.comparison_page.select_period_from_dd(period) tooltips_after = self.comparison_page.by_dsp_get_tooltips() self.ts.markFinal(tooltips_before != tooltips_after, "STEP 10: info in barchart is change for period: {}".format(period)) self.comparison_page.remove_track(5) for track in [self.track22]: self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=track.isrc, id=track.id) self.comparison_page.refresh() tracks_by_dsp_chart = self.comparison_page.by_dsp_graph_get_added_tracks() self.ts.markFinal( self.track22.name not in tracks_by_dsp_chart, "STEP 11: track: {} is not displayed in by DSP graph".format(self.track22.name), ) self.comparison_page.remove_tracks_if_present_with_worker(self.us.market) for track in [self.track22, self.track26]: self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=track.isrc, id=track.id) self.comparison_page.refresh() # step 12 self.comparison_page.by_dsp_verify_graph_no_data()