import unittest import allure import pytest from assertpy import assert_that from ui_automation_framework.core import TestStatus from ui_automation_framework.utils import AppConfig from ...pages.login_page import LoginPage from ...pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up") class DeepLinkingTrackPageTest(unittest.TestCase): daily_all_streams_exp = "116,984" values_exp = [3626516, 846431, 767177, 58763, 12518, 0, 878439, 1063188] device_types_exp = [1743534, 1640983, 82016, 159983] os_types_exp = [1734824, 881886, 766608, 4044, 25625, 213529] totals_by_dsp_all_exp = ["71,833,874", "2,317,222"] totals_by_dsp_exp = totals_by_dsp_all_exp + ["63,228,549\n(88.0%)", "2,039,631", "4,978,809\n(6.9%)", "160,607", "3,626,516\n(5.0%)", "116,984"] @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.tp = TrackPage(self.driver) self.ts = TestStatus(self.driver) @allure.story("AP-5928") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-4429] Data recalculation upon switching DSP with region selected STEPS 1-4, 6-8, 10") @allure.description( """TC verifies that data is recalculated correctly for each DSP while switching between them with selected region. STEPS 1-4, 6-8, 10""" ) def test_data_recalculation_switching_dsp_with_region_steps_1_4_6_8_10(self): self.loginPage.login_with_worker() self.tp.open_spotify_track_page_with_market_id(track_id=AppConfig.get("track40")["id"], market_id=AppConfig.get("market")["us"]["url"]) # step 1 self.tp.select_dsp("Spotify") streams_spotify_us = self.tp.get_streams_in_period_total() self.tp.stream_and_source_choose_region(self.tp.REGION_EUROPE) streams_spotify_europe_before = self.tp.get_streams_in_period_total() assert_that(streams_spotify_us).is_not_equal_to(streams_spotify_europe_before) # step 2 self.tp.markets_dd_click() self.tp.graph_verify_selected_countries_and_hover(region=self.tp.REGION_EUROPE, param=AppConfig.get("regions")["europe"]["countries"], countries_strict=AppConfig.get("regions")["europe"]["countries"], strict=True) self.tp.markets_dd_click() # step 3 self.tp.select_dsp(AppConfig.get("dsp")["apple"]) region = self.tp.graph_get_selected_market() assert_that(region).is_equal_to(self.tp.REGION_EUROPE) # step 4 self.tp.markets_dd_click() self.tp.graph_verify_selected_countries_and_hover(region=self.tp.REGION_EUROPE, param=AppConfig.get("regions")["europe"]["countries"], countries_strict=AppConfig.get("regions")["europe"]["countries"], strict=True) self.tp.markets_dd_click() # step 6 self.tp.select_dsp(AppConfig.get("dsp")["by_dsp"]) region = self.tp.graph_get_selected_market() assert_that(region).is_equal_to(self.tp.REGION_EUROPE) self.tp.markets_dd_click() self.tp.graph_verify_selected_countries_and_hover(region=self.tp.REGION_EUROPE, param=AppConfig.get("regions")["europe"]["countries"], countries_strict=AppConfig.get("regions")["europe"]["countries"], strict=True) self.tp.markets_dd_click() # step 7 self.tp.select_dsp(AppConfig.get("dsp")["amazon"]) region = self.tp.graph_get_selected_market() assert_that(region).is_equal_to(self.tp.REGION_EUROPE) # step 8 self.tp.markets_dd_click() self.tp.graph_verify_selected_countries_and_hover(region=self.tp.REGION_EUROPE, param=AppConfig.get("regions")["europe"]["countries"], countries_strict=AppConfig.get("regions")["europe"]["countries"], strict=True) self.tp.markets_dd_click() # step 10 self.tp.select_dsp(AppConfig.get("dsp")["spotify"]) streams_spotify_europe_after = self.tp.get_streams_in_period_total() region = self.tp.graph_get_selected_market() assert_that(region).is_equal_to(self.tp.REGION_EUROPE) assert_that(streams_spotify_europe_after).is_equal_to(streams_spotify_europe_before) self.tp.markets_dd_click() self.tp.graph_verify_selected_countries_and_hover(region=self.tp.REGION_EUROPE, param=AppConfig.get("regions")["europe"]["countries"], countries_strict=AppConfig.get("regions")["europe"]["countries"], strict=True) self.tp.markets_dd_click() @allure.story("AP-5928") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-4429] Data recalculation upon switching DSP with region selected STEP 5") @allure.description( """TC verifies that data is recalculated correctly for each DSP while switching between them with selected region. STEP 5""" ) def test_data_recalculation_switching_dsp_with_region_step_5(self): self.loginPage.login_with_worker() self.tp.open_spotify_track_page_with_market_id(track_id=AppConfig.get("track40")["id"], market_id=AppConfig.get("market")["us"]["url"]) url_base = self.tp.get_url() self.tp.select_dsp(AppConfig.get("dsp")["apple"]) self.tp.stream_and_source_choose_region(self.tp.REGION_EUROPE) # step 5 lb_lf_values = self.tp.get_lean_values() lb_lf_values = lb_lf_values["lean_forward_by_source"] + lb_lf_values["lean_back_by_source"] api_values = self.tp.graph_legend_get_api_values_apple( markets=AppConfig.get("regions")["europe"]["api"], isrc=AppConfig.get("track40")["isrc"], ) assert_that(lb_lf_values).is_equal_to(list(api_values["lf"].values()) + list(api_values["lb"].values())) apple_in_period = int(self.tp.get_streams_in_period_total().replace(",", "")) self.tp.select_dsp(AppConfig.get("dsp")["by_dsp"]) by_dsp_in_period = int(self.tp.graph_get_legend_by_dsp()[4].split("\n")[0].replace(",", "")) assert_that(apple_in_period).is_equal_to(by_dsp_in_period) assert_that(api_values["total"]).is_equal_to(by_dsp_in_period) self.tp.open_url(f"{url_base}&str_gr_dsp=2&str_gr_view=2&str_gr_start_date=2020-10-01&str_gr_end_date=2020-10-31&str_gr_region=reu") api_values = self.tp.graph_legend_get_api_values_apple( markets=AppConfig.get("regions")["europe"]["api"], isrc=AppConfig.get("track40")["isrc"], ) month_total = int(self.tp.get_streams_in_period_total().replace(",", "")) assert_that(month_total).is_equal_to(api_values["total"]) self.tp.select_dsp(AppConfig.get("dsp")["by_dsp"]) by_dsp_in_period_total = int(self.tp.graph_get_legend_by_dsp()[4].split("\n")[0].replace(",", "")) by_dsp_in_period_avg = int(self.tp.graph_get_legend_by_dsp()[5].replace(",", "")) assert_that(by_dsp_in_period_total).is_equal_to(api_values["total"]) assert_that(by_dsp_in_period_avg).is_equal_to(self.tp.apply_rounding_percentage(api_values["total"] / 31)) self.tp.go_back() lb_lf_values = self.tp.get_lean_values() lb_lf_values = lb_lf_values["lean_forward_by_source"] + lb_lf_values["lean_back_by_source"] assert_that(lb_lf_values).is_equal_to(list(api_values["lf"].values()) + list(api_values["lb"].values())) containers_values = self.tp.get_container_values()["streams"] assert_that(containers_values).is_equal_to(list(api_values["container"].values())) age_group_values = self.tp.get_age_groups_tooltip_info()["streams"] assert_that(age_group_values).is_equal_to(api_values["ages"]) gender_values = self.tp.get_gender_groups_tooltip_info()["streams"] assert_that(gender_values).is_equal_to(api_values["genders"]) @allure.story("AP-5928") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-4429] Data recalculation upon switching DSP with region selected STEP 9") @allure.description( """TC verifies that data is recalculated correctly for each DSP while switching between them with selected region. STEP 9""" ) def test_data_recalculation_switching_dsp_with_region_step_9(self): self.loginPage.login_with_worker() self.tp.open_spotify_track_page_with_market_id(track_id=AppConfig.get("track40")["id"], market_id=AppConfig.get("market")["us"]["url"]) url_base = self.tp.get_url() # step 9 self.tp.open_url(f"{url_base}&str_gr_start_date=2020-10-01&str_gr_end_date=2020-10-31&str_gr_region=reu") self.tp.select_dsp(AppConfig.get("dsp")["amazon"]) url_month = self.tp.get_url() for s in [self.tp.dd_by_voice, self.tp.dd_lean_back_forward, self.tp.dd_by_tier]: total_before = self.tp.graph_amazon_get_totals()[0] self.tp.change_source_type(s) total = self.tp.graph_amazon_get_totals()[0] assert_that(total).is_equal_to(total_before) self.tp.change_source_type(AppConfig.get("source")["all_streams"]) total = self.tp.graph_amazon_get_totals()[2].split("\n")[0].strip() assert_that(total).is_equal_to(total_before) self.tp.select_dsp(AppConfig.get("dsp")["by_dsp"]) total = self.tp.graph_get_legend_by_dsp()[6].split("\n")[0] assert_that(total).is_equal_to(total_before) self.tp.open_url(url_month) total_before = self.tp.get_streams_in_period_total() for s in [self.tp.dd_by_voice, self.tp.dd_lean_back_forward, self.tp.dd_by_tier]: self.tp.change_source_type(s) total = self.tp.graph_amazon_get_totals()[0] daily_avg_ui = self.tp.graph_amazon_get_totals()[1] assert_that(total).is_equal_to(total_before) assert_that(daily_avg_ui).is_equal_to(self.daily_all_streams_exp) self.tp.change_source_type(AppConfig.get("source")["all_streams"]) total = self.tp.graph_amazon_get_totals()[2].split("\n")[0].strip() daily_avg_ui = self.tp.graph_amazon_get_totals()[3] assert_that(total).is_equal_to(total_before) assert_that(daily_avg_ui).is_equal_to(self.daily_all_streams_exp) self.tp.select_dsp(AppConfig.get("dsp")["by_dsp"]) total = self.tp.graph_get_legend_by_dsp()[6].split("\n")[0] daily_avg_ui = self.tp.graph_get_legend_by_dsp()[7] assert_that(total).is_equal_to(total_before) assert_that(daily_avg_ui).is_equal_to(self.daily_all_streams_exp) self.tp.select_dsp(AppConfig.get("dsp")["amazon"]) values_lb_lf = self.tp.get_lean_values() values_lb_lf = values_lb_lf["lean_forward_by_source"] + values_lb_lf["lean_back_by_source"] values_lb_lf = [sum(values_lb_lf)] + values_lb_lf file_csv = self.tp.export_and_get_csv(columns=self.tp.CSV_AMAZON_BY_SOURCE_COLUMNS) file_values = [sum(file_csv[c]) for c in self.tp.CSV_AMAZON_BY_SOURCE_COLUMNS] self.ts.markFinal(file_values == values_lb_lf, f"{file_values}\nand\n{values_lb_lf} match") self.ts.markFinal(values_lb_lf == self.values_exp, f"{values_lb_lf}\nand {self.values_exp} match") assert_that(values_lb_lf).is_equal_to(self.values_exp) device_types = self.tp.get_device_type_tooltips()["streams"] assert_that(device_types).is_equal_to(self.device_types_exp) os_types = self.tp.graph_get_os_tooltips()["streams"] self.ts.markFinal(os_types == self.os_types_exp, f"{os_types} and {self.os_types_exp} match") self.tp.select_dsp(AppConfig.get("dsp")["by_dsp"]) totals_ui = self.tp.graph_amazon_get_totals(totals="by_dsp") self.ts.markFinal(totals_ui == self.totals_by_dsp_exp, f"{totals_ui}\nand {self.totals_by_dsp_exp} match") self.tp.select_dsp(AppConfig.get("dsp")["total_streams"]) totals_ui = self.tp.graph_amazon_get_totals(totals="by_dsp") self.ts.markFinal(totals_ui == self.totals_by_dsp_all_exp, f"{totals_ui}\nand {self.totals_by_dsp_all_exp} match")