import json import unittest from argparse import Namespace import allure import pytest from ui_automation_framework.core import TestStatus from ui_automation_framework.utils import AppConfig from app.api_client import ApiClient from app.mysql_db_client_custom import MySqlClient from ...pages.add_track_popup import AddTrackPopup from ...pages.audience_graph import AudienceGraphChart from ...pages.comparison_page import TrackComparisonPage from ...pages.left_navigation_panel import LeftNavigationPanel from ...pages.login_page import LoginPage from ...pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up") class ComparisonPlaylistSupportTest(unittest.TestCase): track6 = json.loads(json.dumps(AppConfig.get("track6")), object_hook=lambda d: Namespace(**d)) track24 = json.loads(json.dumps(AppConfig.get("track24")), object_hook=lambda d: Namespace(**d)) track15 = json.loads(json.dumps(AppConfig.get("track15")), object_hook=lambda d: Namespace(**d)) track13 = json.loads(json.dumps(AppConfig.get("track13")), object_hook=lambda d: Namespace(**d)) track22 = json.loads(json.dumps(AppConfig.get("track22")), object_hook=lambda d: Namespace(**d)) tracks = [track6, track24, track15, track13, track22] us = json.loads(json.dumps(AppConfig.get("market")["us"]), object_hook=lambda d: Namespace(**d)) @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.trackPage = TrackPage(self.driver) self.add_track_popup = AddTrackPopup(self.driver) self.comparison_page = TrackComparisonPage(self.driver) self.left_panel = LeftNavigationPanel(self.driver) self.audience_graph = AudienceGraphChart(self.driver) self.api_client = ApiClient() self.sql_client = MySqlClient() self.ts = TestStatus(self.driver) @allure.story("AP-2703") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Track Cards removing verification""") @allure.description( """TC verifies that user can easily remove tracks cards from comparison. Just after removing the last track card from comparison initial layout page should be displayed. Also track cards state should be saved on BE for a particular user and be displayed during every login.""" ) def test_track_cards_remove(self): self.comparison_page.remove_tracks_if_present_with_worker(self.us.market) user = self.loginPage.get_user_email_with_worker() token = self.api_client.authorize(user=user) for track in self.tracks: self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=track.isrc, id=track.id) self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.left_panel.open_comparison_page() self.trackPage.select_market(self.us.name) self.comparison_page.select_market_from_dd(self.us.name) self.comparison_page.select_period_from_dd(AppConfig.get("periods")["28d"]["name"]) # step1 self.comparison_page.remove_icon_verify_layout(5) # step 2 self.comparison_page.remove_track(5) self.comparison_page.is_add_card_displayed() # step 3 self.left_panel.sign_out() # step 4 self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.left_panel.open_comparison_page() tracks_added = self.comparison_page.get_added_tracks() self.ts.markFinal(tracks_added == [t.name for t in self.tracks[:4]], "STEP 4: tracks are the same as before log out") # step 5 self.left_panel.sign_out() self.comparison_page.open_new_tab() self.comparison_page.switch_to_tab(2) # step 6 self.loginPage.open_login_page() self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.left_panel.open_comparison_page() # step 7 tracks_added = self.comparison_page.get_added_tracks() self.ts.markFinal(tracks_added == [t.name for t in self.tracks[:4]], "STEP 7: tracks are the same as before log out") # step 8 self.comparison_page.remove_tracks_if_present_with_worker(self.us.market) self.comparison_page.refresh() self.comparison_page.comparison_page_is_opened()