import logging import random 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.album_page import AlbumPage from app.src.pages.comparison_page import TrackComparisonPage from app.src.pages.login_page import LoginPage from app.src.pages.track_page import TrackPage from app.src.pages.youtube_video_popup import YoutubeVideoPopup @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.cp = TrackComparisonPage(self.driver) self.ap = AlbumPage(self.driver) self.youtube_popup = YoutubeVideoPopup(self.driver) self.api_client = ApiClient() self.ts = TestStatus(self.driver) @allure.story("AP-5139") @allure.severity(allure.severity_level.NORMAL) @allure.title("[5168] [YT > Video page] Header verification.") @allure.description("TC verifies Video Page Header elements availability and appearance.") def test_youtube_nvp_header_verification(self): self.loginPage.login_with_worker() track = random.choice([AppConfig.get("track40")]) self.tp.open_youtube_video_page(track["isrc"], market=AppConfig.get("market")["global"]["url"]) # step 1 self.tp.open_video_page_from_tab() video_metadata = self.tp.get_nvp_video_metadata(False) 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 = [i["video_id"] for i in api_resp] url_before = self.tp.get_url() assert_that(video_metadata["title"]).is_equal_to("All Videos") assert_that(video_metadata["label"]).is_equal_to(f"{len(video_ids)} VIDEOS") # step 3, 4, 11, 12 self.tp.open_youtube_video_page(track["isrc"], market=AppConfig.get("market")["global"]["url"]) video_metadata = self.tp.get_nvp_video_metadata(False) assert_that(video_metadata["title"]).is_equal_to("All Videos") assert_that(video_metadata["label"]).is_equal_to(f"{len(video_ids)} VIDEOS") self.tp.stream_and_source_choose_region(self.tp.REGION_ASIA, "youtube_nvp") self.tp.change_param_in_url_new(self.tp.str_gr_video, video_ids[0]) video_metadata = self.tp.get_nvp_video_metadata() assert_that(video_metadata["video_link"]).is_not_none() # step 5 self.tp.nvp_youtube_check_videos_by_indexes([1]) video_metadata = self.tp.get_nvp_video_metadata() for d in video_metadata.keys(): assert_that(video_metadata[d]).is_not_none() # step 6 self.tp.verify_video_selector_hover() # step 7 self.tp.nvp_youtube_check_videos_by_indexes([1, 2]) video_metadata = self.tp.get_nvp_video_metadata(False) ids_url = self.tp.parameter_from_url(self.tp.str_gr_video).split(",") titles_api = ", ".join(sorted(i["video_title"] for i in api_resp if i["video_id"] in ids_url)) self.tp.verify_video_selector_hover(titles_api) assert_that(video_metadata["title"]).is_equal_to("2 Videos") assert_that(video_metadata["label"]).is_equal_to(f"{len(video_ids)} VIDEOS") # step 8 self.tp.nvp_youtube_check_videos_by_indexes([1, 2, 3]) video_metadata = self.tp.get_nvp_video_metadata(False) hint_3 = self.tp.get_video_selector_hover() assert_that(hint_3).ends_with(", and 1 more") hint3_set = set(hint_3.replace(", and 1 more", "").split(", ")) ids_url = self.tp.parameter_from_url(self.tp.str_gr_video).split(",") titles_api = [i["video_title"] for i in api_resp if i["video_id"] in ids_url] assert_that(hint3_set).is_length(2) assert_that(hint3_set).is_subset_of(titles_api) assert_that(video_metadata["title"]).is_equal_to("3 Videos") assert_that(video_metadata["label"]).is_equal_to(f"{len(video_ids)} VIDEOS") # step 9 self.tp.open_url(url_before) video_metadata = self.tp.get_nvp_video_metadata(False) self.tp.verify_video_selector_hover() assert_that(video_metadata["title"]).is_equal_to("All Videos") assert_that(video_metadata["label"]).is_equal_to(f"{len(video_ids)} VIDEOS") # step 10 url_before = self.tp.get_url() self.tp.click_element("(//*[contains(@class, 'icon-youtube')])[last()]", "xpath") url_after = self.tp.get_url() assert_that(url_after).is_equal_to(url_before) # NOT AUTOMATED STEPS - 2, 11