import datetime 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 ...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): track21 = json.loads(json.dumps(AppConfig.get("track21")), 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)) us = json.loads(json.dumps(AppConfig.get("market")["us"]), object_hook=lambda d: Namespace(**d)) days_before_ff = 2 @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.comparison_page = TrackComparisonPage(self.driver) self.left_panel = LeftNavigationPanel(self.driver) self.audience_graph = AudienceGraphChart(self.driver) self.track_page = TrackPage(self.driver) self.api_client = ApiClient() self.ts = TestStatus(self.driver) @allure.story("AP-2757") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Audience Graph elements verification""") @allure.description( """TC verifies that user can see the streams of compared tracks represented by the audience breakdown. All the elements are displayed in accordance with designs.""" ) def test_audience_graph_elements(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.track21.isrc, id=self.track21.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.audience_graph.verify_dsp(AppConfig.get("dsp")["spotify"]) self.track_page.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.audience_graph.verify_elements(1) # step 2 self.audience_graph.verify_dsp_options() # step 3 self.audience_graph.verify_age_groups(AppConfig.get("dsp")["spotify"]) # step 4 spotify_demographics_api = self.audience_graph.get_demographics_delphi_api( market=self.us.market, isrc=self.track21.isrc, start_date=self.track21.dates.f_date, period=AppConfig.get("periods")["28d"]["count"] + self.days_before_ff, token=token, dsp=AppConfig.get("dsp")["spotify"], ) spotify_ui = self.audience_graph.get_demographics_tooltip_values() self.ts.markFinal( spotify_demographics_api == spotify_ui, "STEP 4: deplphi api and ui match for spotify: ui: {}\n, api: {}".format(spotify_ui, spotify_demographics_api), ) # step 6-7 self.audience_graph.verify_age_groups(AppConfig.get("dsp")["apple"]) # step 8 apple_demographics_api = self.audience_graph.get_demographics_delphi_api( market=self.us.market, isrc=self.track21.isrc, start_date=self.track21.dates.f_date, period=AppConfig.get("periods")["28d"]["count"] + self.days_before_ff, token=token, dsp=AppConfig.get("dsp")["apple"], ) apple_ui = self.audience_graph.get_demographics_tooltip_values() self.ts.markFinal( apple_ui == apple_demographics_api, "STEP 8: delphi api and ui match for apple: ui: {}\n, api: {}".format(apple_ui, apple_demographics_api), ) # step 10 self.track_page.select_market(AppConfig.get("market")["global"]["name"]) self.comparison_page.select_period_from_dd(AppConfig.get("periods")["1y"]["name"]) self.comparison_page.wait_for_stream_performance_graph_visible() self.audience_graph.change_dsp(AppConfig.get("dsp")["spotify"]) spotify_demographics_api = self.audience_graph.get_demographics_delphi_api( market=AppConfig.get("market")["global"]["api"], isrc=self.track21.isrc, start_date=self.track21.dates.f_date, period=AppConfig.get("periods")["1y"]["count"] + self.days_before_ff, token=token, dsp=AppConfig.get("dsp")["spotify"], ) spotify_ui = self.audience_graph.get_demographics_tooltip_values() self.ts.markFinal( spotify_demographics_api == spotify_ui, "STEP 10: delphi api and ui match for spotify: ui: {}\n, api: {}".format(spotify_ui, spotify_demographics_api), ) self.audience_graph.verify_age_groups(AppConfig.get("dsp")["apple"]) apple_demographics_api = self.audience_graph.get_demographics_delphi_api( market=AppConfig.get("market")["global"]["api"], isrc=self.track21.isrc, start_date=self.track21.dates.f_date, period=AppConfig.get("periods")["1y"]["count"] + self.days_before_ff, token=token, dsp=AppConfig.get("dsp")["apple"], ) apple_ui = self.audience_graph.get_demographics_tooltip_values() self.ts.markFinal( apple_ui == apple_demographics_api, "delphi api and ui match for apple: ui: {}\n, api: {}".format(apple_ui, apple_demographics_api), ) # step 11 tracks = [self.track21, self.track24, self.track13, self.track25] for track in [self.track24, 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.audience_graph.refresh() # step 12 self.audience_graph.verify_elements(4) # step 13 self.comparison_page.remove_track(3) self.audience_graph.verify_elements(4) self.audience_graph.verify_coloring(4) # step 14 tooltip = self.audience_graph.get_demographics_tooltip_values_parsed()[0] dates_expected = [ "{}–{}".format( datetime.datetime.strptime(t.dates.f_date, "%Y-%m-%d").strftime(self.track_page.get_date_format_from_locale()), datetime.datetime.strptime( str((datetime.datetime.strptime(t.dates.first_date, "%Y-%m-%d") + datetime.timedelta(days=AppConfig.get("periods")["28d"]["count"])).date()), "%Y-%m-%d", ).strftime(self.track_page.get_date_format_from_locale()), ) for t in tracks ] self.ts.markFinal( tooltip["names"] == [t.name for t in tracks], "STEP 14: track names are: {}, expected: {}".format(tooltip["names"], [t.name for t in tracks]), ) self.ts.markFinal( tooltip["dates"] == dates_expected, "track dates are: {}, expected: {}".format(tooltip["dates"], dates_expected), ) # step 15 self.audience_graph.change_dsp(AppConfig.get("dsp")["apple"]) self.audience_graph.verify_chart_height(0, 3) # step 16 tooltip = self.audience_graph.get_demographics_tooltip_values_parsed()[0] self.ts.markFinal( tooltip["streams"] == [0, 0, 0, 0], "STEP 16: total streams count for first age groupd: {}".format(tooltip["streams"]), ) # step 17 self.comparison_page.remove_track(4) for track in [self.track22]: self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=track.isrc, id=track.id) self.comparison_page.refresh() self.audience_graph.verify_dsp(AppConfig.get("dsp")["spotify"]) # step 18 tooltip = self.audience_graph.get_demographics_tooltip_values_parsed()[0] self.ts.markFinal( self.track22.name not in tooltip["names"], "STEP 18: track: {} not in : {}".format(self.track22.name, tooltip["names"]), ) # step 19 self.comparison_page.select_market_from_dd(AppConfig.get("market")["australia"]["name"]) self.audience_graph.verify_dsp(AppConfig.get("dsp")["spotify"]) tooltip_au = self.audience_graph.get_demographics_tooltip_values_parsed()[0] self.ts.markFinal(tooltip != tooltip_au, "STEP 19: info is changed in by audience graph") # step 20 self.track_page.select_market(AppConfig.get("market")["brazil"]["name"]) self.audience_graph.verify_dsp(AppConfig.get("dsp")["spotify"]) tooltip_br = self.audience_graph.get_demographics_tooltip_values_parsed()[0] self.ts.markFinal(tooltip_br != tooltip_au, "STEP 20: info is changed in by audience graph") # step 21-22 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"], ]: tooltips_before = self.audience_graph.get_demographics_tooltip_values_parsed() self.comparison_page.select_period_from_dd(period) self.audience_graph.verify_dsp(AppConfig.get("dsp")["spotify"]) tooltips_after = self.audience_graph.get_demographics_tooltip_values_parsed() self.ts.markFinal( tooltips_before != tooltips_after, "STEP 21: info is changed in by audience graph, period: {}".format(period), ) # step 23 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.audience_graph.refresh() self.audience_graph.no_data_placeholder_is_displayed()