import datetime 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 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): playlist9 = json.loads(json.dumps(AppConfig.get("playlist9")), object_hook=lambda d: Namespace(**d)) playlist15 = json.loads(json.dumps(AppConfig.get("playlist15")), object_hook=lambda d: Namespace(**d)) 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.ap = ApplePlaylistPage(self.driver) self.tp = TrackPage(self.driver) self.api_client = ApiClient() self.sql_client = MySqlClient() self.ts = TestStatus(self.driver) @allure.story("AP-3844") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Apple Playlist Tracklist and table verification - STEP 1-16""") @allure.description("""TC verifies tracklist of the playlist and possibility of historical data view. - STEP 1-16""") def test_tracklist_table_steps_1_16(self): user = self.loginPage.get_user_email_with_worker() token = self.api_client.authorize(user=user) self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.ap.open_apple_playlist_page(self.playlist9.apple_id) self.ap.change_market(self.us.name) # step 1 self.ap.tl_verify_header() # step 2-6 self.ap.tl_verify_initial_date_dd(id=self.playlist9.apple_id, market=self.us.market) # step 7 self.ap.verify_columns() # step 8 self.ap.verify_default_sorting() # step 11-12 self.ap.star_unstar_track_and_verify(market=self.us.market, token=token) # step 13 self.ap.verify_country_hint() # step 14 self.ap.verify_track_name_hint() # step 15 self.ap.verify_track_name_link() self.ap.open_apple_playlist_page(self.playlist9.apple_id) # step 16 self.ap.verify_artist_name_hint() @allure.story("AP-3844") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Apple Playlist Tracklist and table verification - STEP 17-34""") @allure.description("""TC verifies tracklist of the playlist and possibility of historical data view. - STEP 17-34""") def test_tracklist_table_steps_17_34(self): self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.ap.open_apple_playlist_page(self.playlist9.apple_id) self.ap.change_market(self.us.name) # step 17-18 self.ap.verify_hint_in_playlist_days() # step 19 self.ap.tl_sort_by_column(self.ap.TL_COLUMN_AVG_STREAMS) indexes = self.ap.tl_get_column_values(self.ap.TL_COLUMN_STREAMS_INDEX) self.ts.markFinal(all(isinstance(i, float) for i in indexes) and len(indexes) > 0, "indexes are percentages") # step 20 streams = self.ap.tl_get_column_values(self.ap.TL_COLUMN_AVG_STREAMS) self.ts.markFinal(len(streams) == len(indexes), "streams are present for tracks with indexes only") # step 22-23 self.ap.scroll_down_verify_back_button() # step 24-25 self.ap.refresh() prev_date = "11/14/20" prev_date_date = datetime.datetime.strptime(prev_date, "%m/%d/%y").date() self.ap.tl_choose_date(prev_date) self.ap.verify_chosen_date_bold(prev_date) # step 26 ui_song_ids = self.ap.tl_get_song_ids() db_song_ids = self.sql_client.tl_verify_tracks_for_chosen_date(date=prev_date_date, id=self.playlist9.apple_id, market=self.us.market)[: len(ui_song_ids)] self.ts.markFinal(ui_song_ids == db_song_ids, f"songs for \nui: {ui_song_ids} and \ndb: {db_song_ids} match") # step 27 self.ap.verify_columns(date=prev_date) # step 28-29 tracks_before = self.ap.tl_get_column_values(self.ap.TL_COLUMN_TRACKS) self.ap.change_market(AppConfig.get("market")["canada"]["name"]) current_market = self.ap.get_selected_market() self.ap.tl_verify_initial_date_dd(id=self.playlist9.apple_id, market=AppConfig.get("market")["canada"]["market"]) tracks_after = self.ap.tl_get_column_values(self.ap.TL_COLUMN_TRACKS) self.ts.markFinal(current_market == AppConfig.get("market")["canada"]["name"], f"current market: {current_market}") self.ts.markFinal(tracks_before != tracks_after, "tracks are updated due to chosen market") # step 34 self.ap.open_apple_playlist_page(AppConfig.get("playlist16")["apple_id"]) self.ap.verify_playlist_empty() @allure.story("AP-3844") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Apple Playlist Tracklist and table verification - STEP 9""") @allure.description("""TC verifies tracklist of the playlist and possibility of historical data view. - STEP 9""") def test_tracklist_table_step_9(self): self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.ap.open_apple_playlist_page(self.playlist15.apple_id) self.ap.change_market(self.us.name) # step 9 self.ap.verify_each_column_sorting() # NOT AUTOMATED - step 10, 21, 30-33