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-2705") @allure.severity(allure.severity_level.NORMAL) @allure.title("""By DSP tabel elements verification""") @allure.description( """TC verifies that user can see the streams of compared tracks across all of the DSPs represented in the table. All the elements are displayed in accordance with designs. """ ) def test_by_dsp_table_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.track6, self.track24]: 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.by_dsp_verify_table_headers() for track in [self.track15, self.track13, self.track25]: self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=track.isrc, id=track.id) self.comparison_page.refresh() track_names = self.comparison_page.get_by_dsp_table_values()["name"] market = self.comparison_page.get_selected_market() self.ts.markFinal(track.name in track_names, "STEP 2: track: {} is added in By DSP table".format(track.name)) self.ts.markFinal(market == self.us.name, "market is: {}".format(market)) track_names_all = self.comparison_page.get_by_dsp_table_values()["name"] self.ts.markFinal( [self.track6.name, self.track24.name, self.track15.name, self.track13.name, self.track25.name] == track_names_all, "STEP 3: order of tracks is correct: {}".format(track_names_all), ) self.comparison_page.remove_track(5) track_names_all = self.comparison_page.get_by_dsp_table_values()["name"] self.ts.markFinal( [self.track6.name, self.track24.name, self.track15.name, self.track13.name] == track_names_all, "STEP 4: removed track disappeared from bydsp table: {}".format(track_names_all), ) self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=self.track25.isrc, id=self.track25.id) self.comparison_page.refresh() track_names_all = self.comparison_page.get_by_dsp_table_values()["name"] self.ts.markFinal( [self.track6.name, self.track24.name, self.track15.name, self.track13.name, self.track25.name] == track_names_all, "added track appeared from By DSP table: {}".format(track_names_all), ) self.comparison_page.by_dsp_verify_track_name_tooltip(1) self.comparison_page.by_dsp_click_on_track_name_and_verify_track_page(1) self.left_panel.open_comparison_page() # step 7 self.comparison_page.by_dsp_hover_headers_and_verify_background() # step 8 self.comparison_page.by_dsp_click_on_each_column() # step 9 self.comparison_page.verify_tooltip_for_streams(column="spotify", index=1) # step 10 self.comparison_page.by_dsp_sort_by_default() halo_apple = self.comparison_page.get_by_dsp_table_values()["apple"][2] halo_amazon = self.comparison_page.get_by_dsp_table_values()["amazon"][2] self.ts.markFinal( halo_amazon == halo_apple == "N/A", "STEP 5-10: na for apple and amaxon for track: {}".format(self.track15.name), ) # step11 dsp_values_before = self.comparison_page.get_by_dsp_table_values() self.comparison_page.select_market_from_dd(AppConfig.get("market")["australia"]["name"]) dsp_values_after = self.comparison_page.get_by_dsp_table_values() self.ts.markFinal(dsp_values_before != dsp_values_after, "STEP 11: data in By DSP table updated after change market") self.trackPage.is_market_in_header_correct(self.us.header) dsp_values_before = self.comparison_page.get_by_dsp_table_values() self.trackPage.select_market(AppConfig.get("market")["brazil"]["name"]) dsp_values_after = self.comparison_page.get_by_dsp_table_values() self.trackPage.is_market_in_header_correct(AppConfig.get("market")["brazil"]["header"]) market_cp = self.comparison_page.get_selected_market() self.ts.markFinal(dsp_values_before != dsp_values_after, "STEP 12: data in By DSP table updated after change market") self.ts.markFinal(market_cp == AppConfig.get("market")["brazil"]["name"], "market on comparison page is: {}".format(market_cp)) 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"], ]: dsp_values_before = self.comparison_page.get_by_dsp_table_values() tooltips_before = self.comparison_page.by_dsp_get_tooltips() self.comparison_page.select_period_from_dd(period) dsp_values_after = self.comparison_page.get_by_dsp_table_values() tooltips_after = self.comparison_page.by_dsp_get_tooltips() self.ts.markFinal(dsp_values_before != dsp_values_after, "STEP 13: data in By DSP table updated after change period") self.ts.markFinal(tooltips_before != tooltips_after, "data in By DSP chart is updated after change period") self.comparison_page.remove_track(5) self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=self.track22.isrc, id=self.track22.id) self.comparison_page.refresh() tooltips = self.comparison_page.by_dsp_get_tooltips() table_values = self.comparison_page.get_by_dsp_table_values() self.ts.markFinal( table_values["spotify"][4] == table_values["apple"][4] == table_values["amazon"][4] == table_values["total"][4] == "N/A", "STEP 14: na for By DSP table for track: {}".format(self.track22.name), ) self.ts.markFinal(all(self.track22.name not in t for t in tooltips), "track: {} is not present in By DSP chart") 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() self.comparison_page.by_dsp_verify_no_data_displayed() for track in [self.track6, self.track24]: 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_dsp_sort_by_column(column="spotify") self.comparison_page.by_dsp_sort_by_column(column="spotify") values_order = self.comparison_page.get_by_dsp_table_values()["order"] self.ts.markFinal(values_order[2:] == sorted(values_order[2:]), "STEP 16: second sorting works correctly")