import unittest 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.mysql_db_client_custom import MySqlClient from app.src.pages.chart_digest import ChartDigestPage 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 ChartDigestPageTest(unittest.TestCase): track_id1 = AppConfig.get("track1") track_id2 = AppConfig.get("track2") track_id3 = AppConfig.get("track4") track_id4 = AppConfig.get("track5") track_id5 = AppConfig.get("track6") track_id6 = AppConfig.get("track7") track_id7 = AppConfig.get("track9") track_id8 = AppConfig.get("track12") track_id9 = AppConfig.get("track13") tracks_list = [track_id1, track_id2, track_id3, track_id4, track_id5, track_id6, track_id7] @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.chartDigestPage = ChartDigestPage(self.driver) self.trackPage = TrackPage(self.driver) self.sql_client = MySqlClient() self.ts = TestStatus(self.driver) @allure.story("AP-414") @allure.severity(allure.severity_level.NORMAL) @allure.title("Verification of most visited tracks on Dashboard page") @allure.description( """TC verifies 'Most Visited' Tracks section functionality works as expected. Track visiting data is stored in tblApolloVisitLog table. Tracks with the highest visits number are sorted DESC and displayed from the top. If several tracks have the same number of visits, last visited track is displayed.""" ) def test_most_visited_tracks_section(self): self.loginPage.login_with_worker() self.loginPage.is_logged_in() aut0_id = self.loginPage.get_auth0_id() self.sql_client.clear_most_visited_history(id=aut0_id) self.chartDigestPage.refresh() self.chartDigestPage.is_opened() # dashboard-most-visited-no-tracks is present is_present = self.chartDigestPage.no_most_visited_tracks_are_present() self.ts.markFinal( is_present, "Step 1: There are no tracks in the section. Placeholder with ‘You have not visited any tracks recently.’ message is shown", ) # 1st track appears in ‘Most Visited Tracks’ section of Dashboard self.trackPage.open_spotify_track_page(self.track_id1["id"]) self.trackPage.page_has_loaded() self.trackPage.is_track_page_title_present(self.track_id1["name"]) self.chartDigestPage.open_charts_digest_page() self.chartDigestPage.page_has_loaded() is_one_track_card_present = self.chartDigestPage.get_number_for_the_track_cards() self.ts.markFinal( is_one_track_card_present == 1, "Step 2: Only one track card appears in ‘Most Visited Tracks’ section of Dashboard.", ) track_A_name = self.chartDigestPage.get_present_tracks_names()[0] self.ts.markFinal( track_A_name == self.track_id1["name"], "track A name should be: " + str(self.track_id1["name"]) + ", is: " + str(track_A_name), ) self.trackPage.open_spotify_track_page(self.track_id2["id"]) self.trackPage.page_has_loaded() self.trackPage.is_track_page_title_present(self.track_id2["name"]) self.chartDigestPage.open_charts_digest_page() self.chartDigestPage.page_has_loaded() are_two_track_cards_present = self.chartDigestPage.get_number_for_the_track_cards() self.ts.markFinal( are_two_track_cards_present == 2, "Step 3: Two track cards appear in ‘Most Visited Tracks’ section of Dashboard.", ) track_B_name = self.chartDigestPage.get_present_tracks_names()[0] self.ts.markFinal( track_B_name == self.track_id2["name"], "track B name should be: " + str(self.track_id2["name"]) + ", is: " + str(track_B_name), ) # Most visited track are sorted by the amount of visits i = 0 while i < len(self.tracks_list) - 2: for track in self.tracks_list[i + 2 :]: self.trackPage.open_spotify_track_page(track["id"]) self.trackPage.page_has_loaded() self.trackPage.is_track_page_title_present(track["name"]) self.chartDigestPage.open_charts_digest_page() self.chartDigestPage.is_opened() i = i + 1 are_six_track_cards_present = self.chartDigestPage.get_number_for_the_track_cards() self.ts.markFinal( are_six_track_cards_present == 6, "STEP 4: There are only six tracks in ‘Most Visited Tracks’ section of Dashboard.", ) present_cards_names_list = self.chartDigestPage.get_present_tracks_names() expected_cards_names_list = self.chartDigestPage.get_expected_tracks_names(self.tracks_list) assert_that(present_cards_names_list).is_equal_to(expected_cards_names_list) # STEP 6 Track page is opened - implemented in STEP 1 self.chartDigestPage.click_on_artist_name(index=1) self.ts.markFinal( self.trackPage.is_track_page_title_present(self.track_id7["name"]), "STEP 7: Click on Artist name redirects to track page.", ) self.chartDigestPage.open_charts_digest_page() self.trackPage.select_market(AppConfig.get("market")["us"]["name"]) self.chartDigestPage.is_opened() self.ts.markFinal( are_six_track_cards_present == 6, "STEP 8: When any othe market is selected the content of the section is not affected. All cards are present", ) self.ts.markFinal( present_cards_names_list == expected_cards_names_list, "Tracks names list is: " + str(present_cards_names_list) + "should be:" + str(expected_cards_names_list), ) self.sql_client.insert_track_most_visited_test_data(userid=aut0_id, trackid1=self.track_id8["id"], trackid2=self.track_id9["id"]) self.chartDigestPage.refresh() present_cards_names_list = self.chartDigestPage.get_present_tracks_names() list = self.chartDigestPage.get_expected_tracks_names(self.tracks_list) expected_cards_names_list = list[:-1] expected_cards_names_list.insert(0, self.track_id9["name"]) self.ts.markFinal( present_cards_names_list == expected_cards_names_list, "STEP 9: Tracks are sorted by the amount of Track page visits for the last 30 days DESC. Tracks names list is: " + str(present_cards_names_list) + "should be:" + str(expected_cards_names_list), )