import json import unittest from argparse import Namespace import allure import pytest from assertpy import assert_that from ui_automation_framework.core import TestStatus from ui_automation_framework.utils import AppConfig from app.api_client import ApiClient from app.src.pages.amazon_playlist_page import AmazonPlaylistPage from app.src.pages.apple_playlist_page import ApplePlaylistPage from app.src.pages.login_page import LoginPage from app.src.pages.position_playlist_popup import PositionPlaylistPopup from app.src.pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up") class ApplePlaylistPageTest(unittest.TestCase): playlist35 = json.loads(json.dumps(AppConfig.get("playlist35")), object_hook=lambda d: Namespace(**d)) @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.amazon_playlist = AmazonPlaylistPage(self.driver) self.ap = ApplePlaylistPage(self.driver) self.tp = TrackPage(self.driver) self.pip = PositionPlaylistPopup(self.driver) self.api_client = ApiClient() self.ts = TestStatus(self.driver) @allure.story("AP-8380") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-8040] [Amazon Playlist Page> Details Pop Up] Graph verification.") @allure.description("TC verifies graph and tooltip on Amazon Playlist Details popup.") def test_amazon_popup_graph_verification(self): self.loginPage.login_with_worker() self.tp.select_market(AppConfig.get("market")["global"]["name"]) self.amazon_playlist.open_amazon_playlist_page(self.playlist35.amazon_id) # step 1 self.amazon_playlist.sort_table_by_column("streams-average") self.amazon_playlist.open_popup(popup=2) self.pip.verify_axes() # steps 3-5 self.verify_tooltip_and_values() # step 13 self.tp.select_previous_mounth_period() self.verify_tooltip_and_values() # step 17 self.pip.close_popup() self.amazon_playlist.change_market(AppConfig.get("market")["canada"]["name"]) self.amazon_playlist.open_popup() self.verify_tooltip_and_values() @allure.step("PIP Amazon - verify tooltip and values") def verify_tooltip_and_values(self): tooltip = self.pip.get_amazon_tooltip() date_tooltip = str(tooltip["date"]) position_ui = tooltip["position"] gl_streams_ui = tooltip["global_streams"] market_table = self.tp.parameter_from_url(self.amazon_playlist.hd_filter_market) market_streams_ui = tooltip["local_streams"] metadata = self.pip.get_metadata() track_id = metadata["track_id"] pl_id = metadata["playlist_id"] start = self.tp.get_calendar_start_date() end = self.tp.get_calendar_end_date() isrc = self.api_client.get_isrc_by_apple_id(market=market_table, id=track_id)["data"][0]["attributes"]["isrc"] resp_amazon_positions = self.api_client.get_amazon_tracklist_start_end(isrc=isrc, id=f"{pl_id}_{market_table}", start=start, end=end)["items"] pl_id = f"""amazon_{resp_amazon_positions[0]["playlist"]["amazon_playlist_id"]}""" streams_us_api_resp = self.api_client.get_amazon_streams_playlist(isrc=isrc, playlist_id=pl_id, start=start, end=end, country=market_table) streams_gl_api_resp = self.api_client.get_amazon_streams_playlist(isrc=isrc, playlist_id=pl_id, start=start, end=end, country="worldwide") position_api, streams_us_api, streams_gl_api = -1, -1, -1 for i in resp_amazon_positions: if i["date"] == date_tooltip: position_api = i["current"] for i in streams_us_api_resp: if i["date"] == date_tooltip: streams_us_api = i["streams"] for i in streams_gl_api_resp: if i["date"] == date_tooltip: streams_gl_api = i["streams"] assert_that(position_ui).is_equal_to(position_api) assert_that(market_streams_ui).is_equal_to(streams_us_api) assert_that(gl_streams_ui).is_equal_to(streams_gl_api) percentage = tooltip["percentage"] assert_that(percentage).is_equal_to(int(market_streams_ui / gl_streams_ui * 100)) # NOT AUTOMATED STEPS - 2, 6-12, 14-16