import logging 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 ui_automation_framework.utils import logger as cl from app.api_client import ApiClient from app.src.pages.login_page import LoginPage from app.src.pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up") class DeepLinkingTrackPageTest(unittest.TestCase): log = cl.Logger(logging.DEBUG) @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.tp = TrackPage(self.driver) self.api_client = ApiClient() self.ts = TestStatus(self.driver) @allure.story("AP-5177") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-5170] Video Page -> Views by Markets. 'Sources' filter") @allure.description("TC verifies the ‘Sources’ multi select filter in ‘Views by Markets’ tab.") def test_youtube_nvp_vbm_source_filter(self): self.loginPage.login_with_worker() track = AppConfig.get("track40") self.tp.open_youtube_video_page(track["isrc"], market=AppConfig.get("market")["global"]["url"]) self.tp.youtube_switch_to_views_by_market_tab() # step 1-2 self.tp.youtube_vbm_verify_source_filter("All Sources") # step 3 for m in ["Top Markets", "Sony Offices", "All Markets"]: if m == self.tp.all_markets: self.tp.market_dd_choose_few_countries([self.tp.all_markets], "youtube_vbm") else: self.tp.stream_and_source_choose_region(m, "youtube_vbm") self.tp.youtube_vbm_verify_source_filter("All Sources") # step 4-5 self.tp.youtube_vbm_verify_sources_dd_values() # step 6-10 self.tp.youtube_change_sources(param=["Other Sources"], dd="vbm", apply=False) self.tp.click_on_side_panel() self.tp.youtube_vbm_verify_source_filter("All Sources") self.tp.graph_dd_verify_hint(["All Sources"], "vbm_youtube_sources_dd") # step 11-14 for s in ["Key Sources", "Other Sources", "Suggested Videos", "Direct or Unkn"]: self.tp.click_on_side_panel() self.tp.youtube_change_sources(param=[s], dd="vbm") self.tp.youtube_vbm_verify_source_filter(s) self.tp.graph_dd_verify_hint([s], "vbm_youtube_sources_dd") # step 15 two_keys = ["Suggested Videos", "Direct or Unkn"] self.tp.youtube_change_sources(param=two_keys, dd="vbm") self.tp.youtube_vbm_verify_source_filter("2 Sources") self.tp.graph_dd_verify_hint(["Suggested Videos", "Direct or Unkn"], "vbm_youtube_sources_dd") # step 16 self.tp.youtube_change_sources(param=["Suggested Videos", "Direct or Unkn", "Channels Page"], dd="vbm") self.tp.youtube_vbm_verify_source_filter("3 Sources") self.tp.graph_dd_verify_hint(["Suggested Videos", "Direct or Unkn", "Channels Page"], "vbm_youtube_sources_dd") # step 20 self.tp.youtube_change_sources(param=["Video Cards & Annotations"], dd="vbm") self.tp.vdm_choose_graph_view_bar_chart() views_ui = self.tp.get_graph_vbm_barchart_views() start = self.tp.get_calendar_start_date() end = self.tp.get_calendar_end_date() api_resp = self.api_client.get_delphi_videos( isrc=track["isrc"], params="group_by=date%2Cvideo_id&sort_by=views&limit=20&views=1000&expand_to=related_isrcs&content_type=partner_uploaded%2Cpremium_ugc&", ) video_ids = list(set([i["video_id"] for i in api_resp])) views_source_api = [] views_all_api = [] for m in views_ui["markets"]: api_resps = [ self.api_client.get_video_analytics( video_id=i, market=m.lower(), start_date=start, end_date=end, ) for i in video_ids ] views_source = sum(sum(v["metrics"]["traffic_source_types"]["video_cards_and_annotations"] for v in api_resp) for api_resp in api_resps) views_all = sum(sum(v["metrics"]["views"] for v in api_resp) for api_resp in api_resps) views_source_api.append(views_source) views_all_api.append(views_all) assert_that(views_source_api).is_equal_to(views_ui["source_views"]) # NOT AUTOMATED STEPS - 17-19