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)) track22 = json.loads(json.dumps(AppConfig.get("track22")), object_hook=lambda d: Namespace(**d)) tracks = [track6, track24, track15, track13, track22] 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-753") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Streams Graph. Removing the added to comparison tracks.""") @allure.description( """TC verifies how the Track Performance section is displayed during and after removing tracks that were added to comparison. Link to the Comparison tool page on the Apollo Portal: https://qa.apollo.stream/comparison-tool""" ) def test_stream_graph_track_cards_remove(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.tracks: 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.comparison_page.wait_for_stream_performance_graph_visible() 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"]) for dsp in [ AppConfig.get("dsp")["spotify"], AppConfig.get("dsp")["apple"], AppConfig.get("dsp")["amazon"], AppConfig.get("dsp")["total_streams"], ]: self.comparison_page.track_performance_select_dsp_from_dd(dsp) tracks_legend = self.comparison_page.track_performance_get_legend_tracks() self.ts.markFinal( tracks_legend == [str(t.name).upper() for t in self.tracks], "STEP 1: added tracks are displayed in legend: {}".format(tracks_legend), ) for t in [5, 4, 3]: self.comparison_page.remove_track(t) tracks_legend = self.comparison_page.track_performance_get_legend_tracks() self.comparison_page.open_stream_details() by_dsp_names = self.comparison_page.get_by_dsp_table_values()["name"] by_eng_names = self.comparison_page.get_by_engagement_table_values()["name"] self.comparison_page.open_playlist_details() ps_tracks = self.comparison_page.pd_get_displayed_tracks() self.ts.markFinal( tracks_legend == [str(t.name).upper() for t in self.tracks[: t - 1]], "STEP 2: added tracks are displayed in legend: {}, expected: {}".format(tracks_legend, [str(t.name).upper() for t in self.tracks[: t - 1]]), ) self.ts.markFinal( by_dsp_names == by_eng_names == [t.name for t in self.tracks[: t - 1]], "STEP 3: added tracks are displayed in by dsp table: {}".format(tracks_legend), ) self.ts.markFinal( self.tracks[t - 1].name not in ps_tracks, "tracks is removed from playlist details: {}".format(ps_tracks), ) self.comparison_page.remove_track(2) self.comparison_page.remove_track(1) self.comparison_page.comparison_page_is_opened()