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): track37 = json.loads(json.dumps(AppConfig.get("track37")), 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)) sweden = json.loads(json.dumps(AppConfig.get("market")["sweden"]), object_hook=lambda d: Namespace(**d)) global_m = json.loads(json.dumps(AppConfig.get("market")["global"]), object_hook=lambda d: Namespace(**d)) tracks = [track32, track1, track14, track6, track33] @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-2749") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Required elements verification for Lean Type Streams table""") @allure.description( """TC verifies Streams Detailed table’s layout and functionality. Streams Detailed table is shown for users only in the case when there are at least two tracks added to the comparison. Table can contain data for both Sony ans NoN-Sony tracks. """ ) def test_by_engagement_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.track37]: 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"]) # step 1 self.comparison_page.by_engagement_verify_table_is_displayed(False) # step 2 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 3 self.comparison_page.by_engagement_verify_table_is_displayed() # step 4 by_eng_table = self.comparison_page.get_by_engagement_table_values() self.ts.markFinal( by_eng_table["forward"][0] != by_eng_table["back"][0] != by_eng_table["total"][0], "STEP 4: data is displayed for first track in By Engagement table", ) self.ts.markFinal( by_eng_table["forward"][1] == by_eng_table["back"][1] == by_eng_table["total"][1] == "N/A", "na for second track is displayed in By Engagement table", ) # step 5 self.comparison_page.by_engagement_verify_table_columns() # step 6 self.comparison_page.by_engagement_verify_track_name_tooltip(1) # step 7 self.comparison_page.by_engagement_click_on_track_name_and_verify_track_page(1) # step 8 self.comparison_page.go_back() # step 9 self.comparison_page.verify_all_dsp_from_dd( "engagement", [AppConfig.get("dsp")["spotify"], AppConfig.get("dsp")["apple"], AppConfig.get("dsp")["amazon"]], ) # step 10 self.comparison_page.by_engagement_select_dsp_from_dd(AppConfig.get("dsp")["apple"]) table_val = self.comparison_page.get_by_engagement_table_values() self.ts.markFinal(table_val != by_eng_table, "STEP 10: values are changed in table") # step 11 self.comparison_page.remove_tracks_if_present_with_worker(self.us.market) 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.comparison_page.refresh() for dsp in [AppConfig.get("dsp")["spotify"], AppConfig.get("dsp")["apple"], AppConfig.get("dsp")["amazon"]]: self.comparison_page.by_engagement_select_dsp_from_dd(dsp) table_val = self.comparison_page.get_by_engagement_table_values() self.ts.markFinal(table_val["name"] == [t.name for t in self.tracks], "STEP 11: all 5 tracks are displayed for each dsp") # step 12 self.ts.markFinal(table_val["order"] == sorted(table_val["order"]), "STEP 12: default sorting is by order") # step 13 for column in ["name", "lean-forward", "lean-back", "total"]: val_before = self.comparison_page.get_by_engagement_table_values() self.comparison_page.by_engagement_sort_by_column_and_verify(column) val_after = self.comparison_page.get_by_engagement_table_values() self.ts.markFinal(val_before != val_after, "STEP 13: table change after sorting") 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"], ]: val_before = self.comparison_page.get_by_engagement_table_values() self.comparison_page.select_period_from_dd(period) val_after = self.comparison_page.get_by_engagement_table_values() self.ts.markFinal(val_before != val_after, "STEP 14: table change after period change") self.comparison_page.select_market_from_dd(self.sweden.name) self.trackPage.is_market_in_header_correct(self.us.header) val_se = self.comparison_page.get_by_engagement_table_values() self.comparison_page.verify_chosen_period(AppConfig.get("periods")["28d"]["name"]) self.ts.markFinal(val_se != val_after, "STEP 15: table change after market change") self.trackPage.select_market(self.sweden.name) self.trackPage.is_market_in_header_correct(self.sweden.header) market_ct = self.comparison_page.get_selected_market() val_se = self.comparison_page.get_by_engagement_table_values() self.comparison_page.verify_chosen_period(AppConfig.get("periods")["28d"]["name"]) self.ts.markFinal(val_se != val_after, "STEP 16: table change after market change") self.ts.markFinal(market_ct == self.sweden.name, "market on comparison is: {}".format(market_ct)) self.trackPage.select_market(self.global_m.name) self.trackPage.is_market_in_header_correct(self.global_m.name) market_ct = self.comparison_page.get_selected_market() val_after = self.comparison_page.get_by_engagement_table_values() self.comparison_page.verify_chosen_period(AppConfig.get("periods")["28d"]["name"]) self.ts.markFinal(val_se != val_after, "STEP 17-18: table change after market change") self.ts.markFinal(market_ct == self.global_m.name, "market on comparison is: {}".format(market_ct))