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.src.pages.apple_playlist_page import ApplePlaylistPage 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 ApplePlaylistPageTest(unittest.TestCase): playlist14 = json.loads(json.dumps(AppConfig.get("playlist14")), object_hook=lambda d: Namespace(**d)) us = json.loads(json.dumps(AppConfig.get("market")["us"]), object_hook=lambda d: Namespace(**d)) bolivia = json.loads(json.dumps(AppConfig.get("market")["bolivia"]), object_hook=lambda d: Namespace(**d)) canada = json.loads(json.dumps(AppConfig.get("market")["canada"]), object_hook=lambda d: Namespace(**d)) @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.apple_playlist = ApplePlaylistPage(self.driver) self.trackPage = TrackPage(self.driver) self.ts = TestStatus(self.driver) @allure.story("AP-3837") @allure.severity(allure.severity_level.NORMAL) @allure.title("Apple Playlist Donut charts data calculations") @allure.description("""TC verifies correctness of data calculation for Donut charts on the Apple Music playlist page.""") def test_apple_donut_charts_calculations(self): self.loginPage.login_with_worker() self.apple_playlist.open_apple_playlist_page_with_market(self.playlist14.apple_id, self.us.market) self.apple_playlist.are_donuts_displayed() frontline_ui = self.apple_playlist.get_percentage_frontline_ui() local_ui = self.apple_playlist.get_percentage_local_ui() frontline_api = self.apple_playlist.get_frontline_tracks_percentage_api(id=self.playlist14.apple_id, country=self.us.market) local_api = self.apple_playlist.get_local_tracks_percentage_api(id=self.playlist14.apple_id, country=self.us.market) # step 1-4 assert_that(frontline_api).is_equal_to(frontline_ui) # step 5-6 assert_that(local_ui).is_equal_to(local_api) self.trackPage.select_market(self.bolivia.name) self.trackPage.is_market_in_header_correct(self.bolivia.header) current_market = self.apple_playlist.get_selected_market() self.ts.markFinal(current_market == self.us.name, "STEP 7: market on page is {}".format(current_market)) self.apple_playlist.get_selected_market() self.apple_playlist.page_has_loaded() frontline_ui_bolivia = self.apple_playlist.get_percentage_frontline_ui() local_ui_bolivia = self.apple_playlist.get_percentage_local_ui() self.ts.markFinal( frontline_ui == frontline_ui_bolivia, "frontline is the same after change market in top header: {}".format(frontline_ui_bolivia), ) self.ts.markFinal(local_ui == local_ui_bolivia, "local is the same: {}".format(local_ui_bolivia)) self.apple_playlist.change_market(self.canada.name) frontline_ui = self.apple_playlist.get_percentage_frontline_ui() local_ui = self.apple_playlist.get_percentage_local_ui() frontline_api = self.apple_playlist.get_frontline_tracks_percentage_api(id=self.playlist14.apple_id, country=self.canada.market) local_api = self.apple_playlist.get_local_tracks_percentage_api(id=self.playlist14.apple_id, country=self.canada.market) self.ts.markFinal( frontline_api == frontline_ui, "STEPS 8-9: frontline percentage is correct: ui={ui}, api={api}".format(ui=frontline_ui, api=frontline_api), ) self.ts.markFinal(local_ui == local_api, "local percentage is correct: ui={ui}, api={api}".format(ui=local_ui, api=local_api))