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): track15 = json.loads(json.dumps(AppConfig.get("track15")), object_hook=lambda d: Namespace(**d)) track30 = json.loads(json.dumps(AppConfig.get("track30")), object_hook=lambda d: Namespace(**d)) track31 = json.loads(json.dumps(AppConfig.get("track31")), object_hook=lambda d: Namespace(**d)) track32 = json.loads(json.dumps(AppConfig.get("track32")), object_hook=lambda d: Namespace(**d)) track1 = json.loads(json.dumps(AppConfig.get("track1")), object_hook=lambda d: Namespace(**d)) track14 = json.loads(json.dumps(AppConfig.get("track14")), object_hook=lambda d: Namespace(**d)) track6 = json.loads(json.dumps(AppConfig.get("track6")), object_hook=lambda d: Namespace(**d)) track33 = json.loads(json.dumps(AppConfig.get("track33")), object_hook=lambda d: Namespace(**d)) us = json.loads(json.dumps(AppConfig.get("market")["us"]), object_hook=lambda d: Namespace(**d)) bh = json.loads(json.dumps(AppConfig.get("market")["bahrain"]), 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-2748") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Required elements verification for graph in 'By engagement' section""") @allure.description("""TC verifies bar chart layout and functionality. Graph can contain data for both Sony ans NoN-Sony tracks.""") def test_by_engagement_graph_elements_ui(self): 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 [self.track15]: 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.bh.name) self.comparison_page.select_market_from_dd(self.bh.name) self.comparison_page.select_period_from_dd(AppConfig.get("periods")["28d"]["name"]) # step 2 self.comparison_page.by_engagement_verify_title() # step 3 self.comparison_page.by_engagement_graph_verify_no_data() # step 4 for track in [self.track30]: self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=track.isrc, id=track.id) self.comparison_page.refresh() # step 5 self.comparison_page.by_engagement_graph_verify_no_data() self.comparison_page.get_by_engagement_table_verify_no_data() # step 6 self.trackPage.select_market(self.us.name) # step 7 table_eng_val = self.comparison_page.get_by_engagement_table_values() tooltips = self.comparison_page.by_engagement_get_graph_tooltips() self.ts.markFinal( table_eng_val["name"] == [self.track15.name, self.track30.name], "STEP 7: By Engagement table contains two tracks", ) self.ts.markFinal(len(tooltips) == 2, "graph contains 2 tracks") # step 8 self.comparison_page.by_engagement_graph_verify_coloring() self.comparison_page.by_engagement_graph_verify_titles(2) # step 9 self.comparison_page.by_engagement_graph_verify_tooltip_structure() # step 10 for track in [self.track31]: self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=track.isrc, id=track.id) self.comparison_page.refresh() # step 11 table_eng_val = self.comparison_page.get_by_engagement_table_values() tooltips = self.comparison_page.by_engagement_get_graph_tooltips() self.ts.markFinal( table_eng_val["name"] == [self.track15.name, self.track30.name, self.track31.name], "STEP 11: By Engagement table contains three tracks", ) self.ts.markFinal(len(tooltips) == 2, "graph contains 2 tracks") # step 12 self.comparison_page.by_engagement_select_dsp_from_dd(AppConfig.get("dsp")["apple"]) # step 13 self.comparison_page.by_engagement_graph_verify_no_data() self.comparison_page.get_by_engagement_table_verify_no_data() # step 14 self.comparison_page.by_engagement_select_dsp_from_dd(AppConfig.get("dsp")["amazon"]) self.comparison_page.by_engagement_graph_verify_no_data() self.comparison_page.get_by_engagement_table_verify_no_data() # step 15-16 self.comparison_page.remove_tracks_if_present_with_worker(self.us.market) for track in [self.track32, self.track1, self.track14, self.track6, self.track33]: self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=track.isrc, id=track.id) self.comparison_page.refresh() self.comparison_page.by_engagement_select_dsp_from_dd(AppConfig.get("dsp")["spotify"]) tooltips = self.comparison_page.by_engagement_get_graph_tooltips() self.ts.markFinal(len(tooltips) == 5, "STEP 15-16: graph contains 5 tracks")