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-2937") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Streams by Countries table elements verification""") @allure.description( """TC verifies that user can see streams broken down by countries with higher streams and can compare sources. All the elements are displayed in accordance with designs. """ ) def test_by_countries_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) self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=self.track6.isrc, id=self.track6.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.country_select_dsp_from_dd(AppConfig.get("dsp")["spotify"]) self.comparison_page.country_select_source(AppConfig.get("source")["all"]) track_name_ui = self.comparison_page.country_get_track_name_by_index(1) countries = self.comparison_page.country_get_values_by_track_index_countries(1) percentage = self.comparison_page.country_get_values_by_track_index_percentage(1) are_percentage_sorted = percentage == sorted(percentage, reverse=True) self.ts.markFinal( track_name_ui == self.track6.name, "STEP 1: track: {} is displayed in country table header".format(track_name_ui), ) self.ts.markFinal(len(countries) == 10, "count of countries in table: {}".format(len(countries))) self.ts.markFinal(are_percentage_sorted, "countries are sorted by percentage") tracks = [self.track6, self.track24, self.track15, self.track13, self.track25] 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() self.comparison_page.country_select_dsp_from_dd(AppConfig.get("dsp")["spotify"]) self.comparison_page.country_select_source(AppConfig.get("source")["all"]) for track in tracks: track_name_ui = self.comparison_page.country_get_track_name_by_index(tracks.index(track) + 1) countries = self.comparison_page.country_get_values_by_track_index_countries(tracks.index(track) + 1) percentage = self.comparison_page.country_get_values_by_track_index_percentage(tracks.index(track) + 1) are_percentage_sorted = percentage == sorted(percentage, reverse=True) self.ts.markFinal( track_name_ui == track.name, "STEP 2-4: track: {} is displayed in country table header".format(track_name_ui), ) self.ts.markFinal(len(countries) == 10, "count of countries in table: {}".format(len(countries))) self.ts.markFinal(are_percentage_sorted, "countries are sorted by percentage") self.comparison_page.verify_source_values(AppConfig.get("dsp")["spotify"]) country_content_all = self.comparison_page.country_get_percentage_for_tracks(len(tracks)) self.comparison_page.country_select_source(AppConfig.get("source")["chart"]) country_content_chart = self.comparison_page.country_get_percentage_for_tracks(len(tracks)) self.ts.markFinal(country_content_all != country_content_chart, "STEP 5-6: data is recalculated") self.comparison_page.country_select_dsp_from_dd(AppConfig.get("dsp")["apple"]) self.comparison_page.country_verify_dsp_values() current_source = self.comparison_page.country_get_current_source() country_content_apple = self.comparison_page.country_get_percentage_for_tracks(len(tracks)) self.ts.markFinal(current_source == AppConfig.get("source")["all"], "STEP 7: source for country is: {}".format(current_source)) self.ts.markFinal(country_content_apple != country_content_chart, "data is recalculated") self.comparison_page.verify_source_values(AppConfig.get("dsp")["apple"]) self.comparison_page.country_select_source(AppConfig.get("source")["search"]) country_content_chart = self.comparison_page.country_get_percentage_for_tracks(len(tracks)) self.ts.markFinal(country_content_apple != country_content_chart, "STEP 8: data is recalculated") self.comparison_page.country_select_dsp_from_dd(AppConfig.get("dsp")["amazon"]) self.comparison_page.country_verify_dsp_values() self.comparison_page.verify_source_values(AppConfig.get("dsp")["amazon"]) current_source = self.comparison_page.country_get_current_source() country_content_amazon = self.comparison_page.country_get_percentage_for_tracks(len(tracks)) self.ts.markFinal(country_content_amazon != country_content_chart, "STEP 9: data is recalculated") self.ts.markFinal(current_source == AppConfig.get("source")["all"], "source for country is: {}".format(current_source)) self.comparison_page.country_select_source(AppConfig.get("source")["station"]) country_content_radio = self.comparison_page.country_get_percentage_for_tracks(len(tracks)) self.ts.markFinal(country_content_amazon != country_content_radio, "data is recalculated") self.comparison_page.country_select_dsp_from_dd(AppConfig.get("dsp")["total_streams"]) self.comparison_page.country_verify_dsp_values() self.comparison_page.verify_source_values(AppConfig.get("dsp")["total_streams"]) country_content_combined = self.comparison_page.country_get_percentage_for_tracks(len(tracks)) is_country_source_active = self.comparison_page.is_country_source_active() self.ts.markFinal(country_content_combined != country_content_radio, "STEP 10: data is recalculated") self.ts.markFinal(is_country_source_active == False, "source dropdown is inactive") self.comparison_page.refresh() country_content_refreshed = self.comparison_page.country_get_percentage_for_tracks(len(tracks)) current_source = self.comparison_page.country_get_current_source() current_dsp = self.comparison_page.country_get_current_dsp() self.comparison_page.verify_source_values(AppConfig.get("dsp")["spotify"]) self.ts.markFinal(country_content_combined != country_content_refreshed, "STEP 11: data is recalculated") self.ts.markFinal(current_source == AppConfig.get("source")["all"], "source for country is: {}".format(current_source)) self.ts.markFinal(current_dsp == AppConfig.get("dsp")["spotify"], "current dsp is: {}".format(current_dsp)) self.comparison_page.country_select_dsp_from_dd(AppConfig.get("dsp")["amazon"]) self.comparison_page.country_select_source(AppConfig.get("source")["playlists"]) country_content_playlists = self.comparison_page.country_get_percentage_for_tracks(len(tracks)) self.ts.markFinal(country_content_refreshed != country_content_playlists, "STEP 12: data is recalculated") self.comparison_page.select_market_from_dd(AppConfig.get("market")["brazil"]["name"]) current_source = self.comparison_page.country_get_current_source() current_dsp = self.comparison_page.country_get_current_dsp() country_content_market = self.comparison_page.country_get_percentage_for_tracks(len(tracks)) self.ts.markFinal(country_content_market != country_content_playlists, "STEP 13: data is recalculated") self.ts.markFinal(current_source == AppConfig.get("source")["all"], "source for country is: {}".format(current_source)) self.ts.markFinal(current_dsp == AppConfig.get("dsp")["spotify"], "current dsp is: {}".format(current_dsp)) self.trackPage.select_market(AppConfig.get("market")["australia"]["name"]) current_source = self.comparison_page.country_get_current_source() current_dsp = self.comparison_page.country_get_current_dsp() self.comparison_page.country_select_dsp_from_dd(AppConfig.get("dsp")["amazon"]) self.comparison_page.country_select_source(AppConfig.get("source")["playlists"]) country_content_australia = self.comparison_page.country_get_percentage_for_tracks(len(tracks)) self.ts.markFinal(country_content_market != country_content_australia, "STEP 14: data is recalculated") self.ts.markFinal(current_source == AppConfig.get("source")["all"], "source for country is: {}".format(current_source)) self.ts.markFinal(current_dsp == AppConfig.get("dsp")["spotify"], "current dsp is: {}".format(current_dsp)) self.comparison_page.select_period_from_dd(AppConfig.get("periods")["1y"]["name"]) current_source = self.comparison_page.country_get_current_source() current_dsp = self.comparison_page.country_get_current_dsp() self.comparison_page.country_select_dsp_from_dd(AppConfig.get("dsp")["apple"]) self.comparison_page.country_select_source(AppConfig.get("source")["search"]) country_content_1_year = self.comparison_page.country_get_percentage_for_tracks(len(tracks)) self.ts.markFinal(country_content_1_year != country_content_australia, "data is recalculated") self.ts.markFinal(current_source == AppConfig.get("source")["all"], "source for country is: {}".format(current_source)) self.ts.markFinal(current_dsp == AppConfig.get("dsp")["spotify"], "current dsp is: {}".format(current_dsp)) self.comparison_page.country_verify_hints(self.track6) self.comparison_page.country_select_dsp_from_dd(AppConfig.get("dsp")["amazon"]) values = self.comparison_page.country_get_values_by_track_index_countries(tracks.index(self.track15) + 1) self.ts.markFinal(all(v == "N/A" for v in values), "STEP 16: na for track: {}".format(self.track15.name)) 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() values = self.comparison_page.country_get_values_by_track_index_countries(5) self.ts.markFinal(all(v == "N/A" for v in values), "STEP 17: na for track: {}".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() self.comparison_page.country_verify_no_data()