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): track37 = json.loads(json.dumps(AppConfig.get("track37")), object_hook=lambda d: Namespace(**d)) track31 = json.loads(json.dumps(AppConfig.get("track31")), object_hook=lambda d: Namespace(**d)) track32 = json.loads(json.dumps(AppConfig.get("track32")), object_hook=lambda d: Namespace(**d)) track1 = json.loads(json.dumps(AppConfig.get("track1")), object_hook=lambda d: Namespace(**d)) track14 = json.loads(json.dumps(AppConfig.get("track14")), object_hook=lambda d: Namespace(**d)) track6 = json.loads(json.dumps(AppConfig.get("track6")), object_hook=lambda d: Namespace(**d)) track4 = json.loads(json.dumps(AppConfig.get("track4")), object_hook=lambda d: Namespace(**d)) us = json.loads(json.dumps(AppConfig.get("market")["us"]), object_hook=lambda d: Namespace(**d)) au = json.loads(json.dumps(AppConfig.get("market")["australia"]), object_hook=lambda d: Namespace(**d)) sweden = json.loads(json.dumps(AppConfig.get("market")["sweden"]), object_hook=lambda d: Namespace(**d)) global_m = json.loads(json.dumps(AppConfig.get("market")["global"]), object_hook=lambda d: Namespace(**d)) tunisia = json.loads(json.dumps(AppConfig.get("market")["tunisia"]), object_hook=lambda d: Namespace(**d)) tracks = [track32, track1, track14, track6, track4] @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-2701") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Track Cards verification""") @allure.description( """TC verifies updated tracks cards functionality. Track cards functionality works as expected and tracks cards elements contain all required GUI components. Now user can add any track to comparison, despite Sony logic. Track that Sony has rights for specific market has 'Sony' label on the track cards. """ ) def test_track_cards_verification(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.track37]: 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) # step 1-2 self.comparison_page.verify_chosen_period(AppConfig.get("periods")["28d"]["name"]) # step 3 self.comparison_page.verify_track_card(1, self.track37) date_ct = self.comparison_page.get_release_date_with_track_index(1) # step 4 self.comparison_page.open_track_page_from_track_card(self.track37) date_tp = self.trackPage.get_release_date() # step 5 self.comparison_page.go_back() # step 6 self.ts.markFinal(date_ct == date_tp, "STEP 6: track page is opened") # step 7 self.comparison_page.open_artist_page_from_track_card(1) # step 8 self.left_panel.open_comparison_page() self.comparison_page.verify_sony_label_is_displayed(1) # step 9 self.comparison_page.track_card_verify_hover(1, self.track37) # step 10-11 self.comparison_page.remove_tracks_if_present_with_worker(self.us.market) for track in [self.track4]: self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=track.isrc, id=track.id2) self.comparison_page.refresh() self.comparison_page.select_market_from_dd(self.au.name) self.trackPage.is_market_in_header_correct(self.us.header) self.trackPage.page_has_loaded() r_date = self.comparison_page.get_release_date_with_track_index(1) self.comparison_page.verify_chosen_period(AppConfig.get("periods")["28d"]["name"]) self.ts.markFinal( str(r_date) == self.track4.dates.release, f"STEP 11: release dates is changed to: {r_date}, expected: {self.track4.dates.release}", ) # step 12 self.trackPage.select_market(self.au.name) self.trackPage.is_market_in_header_correct(self.au.header) market_tp = self.comparison_page.get_selected_market() self.comparison_page.verify_track_card(1, self.track4) self.comparison_page.verify_chosen_period(AppConfig.get("periods")["28d"]["name"]) self.ts.markFinal(market_tp == self.au.name, "STEP 12: market on comparison is: {}".format(market_tp)) # step 13 self.comparison_page.remove_tracks_if_present_with_worker(self.us.market) for track in [self.track4]: self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=track.isrc, id=track.id) self.trackPage.select_market(self.global_m.name) self.trackPage.is_market_in_header_correct(self.global_m.name) market_tp = self.comparison_page.get_selected_market() self.comparison_page.verify_chosen_period(AppConfig.get("periods")["28d"]["name"]) r_date = str(self.comparison_page.get_release_date_with_track_index(1)) self.ts.markFinal(r_date == "2019-10-17", "release date is: {}".format(r_date)) self.ts.markFinal(market_tp == self.global_m.name, "STEP 13: market on comparison is: {}".format(market_tp)) # step 14 self.comparison_page.open_playlist_details() r_date = str(self.comparison_page.get_release_date_with_track_index(1)) self.ts.markFinal(r_date == "2019-10-17", "STEP 14: release date is: {}".format(r_date)) # step 15 - 17 self.comparison_page.remove_tracks_if_present_with_worker(self.us.market) 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.comparison_page.refresh() count_tracks = self.comparison_page.get_count_of_added_tracks() self.ts.markFinal(count_tracks == 5, "count is: {}".format(count_tracks)) # step 18 - 19 self.comparison_page.remove_tracks_if_present_with_worker(self.us.market) for track in [self.track4]: self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=track.isrc, id=track.id) self.comparison_page.refresh() self.comparison_page.select_market_from_dd(self.tunisia.name) hint = self.comparison_page.get_release_hint_with_track_index(1) self.ts.markFinal(hint == "There’s no data to display\nfor the selected track.", "no data in track hint")