import json import logging 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 ui_automation_framework.utils import logger as cl from app.src.pages.account_page import AccountPage from app.src.pages.add_track_popup import AddTrackPopup from app.src.pages.album_page import AlbumPage from app.src.pages.amplitude_helper import AmplitudeHelper from app.src.pages.apple_playlist_page import ApplePlaylistPage from app.src.pages.artist_page import ArtistPage from app.src.pages.chart_digest import ChartDigestPage from app.src.pages.comparison_page import TrackComparisonPage from app.src.pages.global_search import GlobalSearch from app.src.pages.left_navigation_panel import LeftNavigationPanel from app.src.pages.login_page import LoginPage from app.src.pages.spotify_playlist_page import SpotifyPlaylistPage from app.src.pages.top_charts_page import TopChartsPage from app.src.pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up") class Amplitude(unittest.TestCase): log = cl.Logger(logging.DEBUG) track_name1 = [AppConfig.get("track14")["name"], AppConfig.get("track14")["artist"], 1] track_name2 = [AppConfig.get("track4")["name"], AppConfig.get("track4")["artist"], 2] track_name3 = [AppConfig.get("track5")["name"], AppConfig.get("track5")["artist"], 3] track_name4 = [AppConfig.get("track6")["name"], AppConfig.get("track6")["artist"], 4] track_name5 = [AppConfig.get("track9")["name"], AppConfig.get("track9")["artist"], 5] track4 = json.loads(json.dumps(AppConfig.get("track4")), object_hook=lambda d: Namespace(**d)) @pytest.fixture(autouse=True) def classSetup(self): self.log = cl.Logger(logging.DEBUG) self.loginPage = LoginPage(self.driver) self.ts = TestStatus(self.driver) self.chart_digest = ChartDigestPage(self.driver) self.amplitude_helper = AmplitudeHelper(self.driver) self.track_page = TrackPage(self.driver) self.global_search = GlobalSearch(self.driver) self.spotify_playlist_page = SpotifyPlaylistPage(self.driver) self.apple_playlist_page = ApplePlaylistPage(self.driver) self.album_page = AlbumPage(self.driver) self.artist_page = ArtistPage(self.driver) self.account_page = AccountPage(self.driver) self.top_charts_page = TopChartsPage(self.driver) self.comparison_page = TrackComparisonPage(self.driver) self.left_panel = LeftNavigationPanel(self.driver) self.add_track_popup = AddTrackPopup(self.driver) @allure.story("AP-2238") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-2127, AP-3406] Amplitude Events: main pages view (track, playlist, artist, album, account, charts digest, track comparison)") @allure.description("""TC Verifies main pages view (track, playlist, artist, album, account, charts digest, track comparison)""") def test_main_pages_view(self): # step 1 self.loginPage.login_with_worker() self.chart_digest.is_opened() self.track_page.select_market(AppConfig.get("market")["us"]["name"]) self.chart_digest.is_opened() events = self.amplitude_helper.wait_and_get_amplitude_events(5, False) self.amplitude_helper.is_initializer_event(events[0]) self.amplitude_helper.verify_event_user_properties(events[0]) self.amplitude_helper.verify_for_event_type(events[1], self.amplitude_helper.CHARTS_DIGEST_PAGE["event_type"]) # step 2 # spotify track self.track_page.open_spotify_track_page(AppConfig.get("track40")["id"]) self.track_page.is_track_page_title_present(AppConfig.get("track40")["name"]) events = self.amplitude_helper.wait_and_get_amplitude_events(2) self.amplitude_helper.verify_for_event_type(events[1], self.amplitude_helper.TRACK_PAGE["event_type"]) assert_that(events[1]["event_properties"]["dsp_type"]).is_equal_to(self.amplitude_helper.TRACK_PAGE["dsp_type_spotify"]) assert_that(events[1]["event_properties"]["track_id"]).is_equal_to(AppConfig.get("track40")["id"]) assert_that(events[1]["event_properties"]["is_sony"]).is_true() assert_that(events[1]["event_properties"]["track_name"]).is_equal_to(AppConfig.get("track40")["name"]) assert_that(events[1]["event_properties"]["track_artist"]).is_equal_to(AppConfig.get("track40")["artist"]) # apple track self.track_page.open_apple_track_page(str(AppConfig.get("track15")["apple_id"])) self.track_page.is_track_page_title_present(AppConfig.get("track15")["name"]) events = self.amplitude_helper.wait_and_get_amplitude_events(2) self.amplitude_helper.verify_for_event_type(events[1], self.amplitude_helper.TRACK_PAGE["event_type"]) assert_that(events[1]["event_properties"]["dsp_type"]).is_equal_to(self.amplitude_helper.TRACK_PAGE["dsp_type_apple"]) assert_that(events[1]["event_properties"]["track_id"]).is_equal_to(str(AppConfig.get("track15")["apple_id"])) assert_that(events[1]["event_properties"]["is_sony"]).is_false() assert_that(events[1]["event_properties"]["track_name"]).is_equal_to(AppConfig.get("track15")["name"]) assert_that(events[1]["event_properties"]["track_artist"]).is_equal_to(AppConfig.get("track15")["artist"]) # step 3 # spotify playlist self.spotify_playlist_page.open_spotify_playlist_page(AppConfig.get("playlist1")["id"]) # self.spotify_playlist_page.playlist_title_is_present() events = self.amplitude_helper.wait_and_get_amplitude_events(2) self.amplitude_helper.verify_for_event_type(events[1], self.amplitude_helper.PLAYLIST_PAGE["event_type"]) assert_that(events[1]["event_properties"]["dsp_type"]).is_equal_to(self.amplitude_helper.PLAYLIST_PAGE["dsp_type_spotify"]) assert_that(events[1]["event_properties"]["playlist_id"]).is_equal_to(AppConfig.get("playlist1")["id"]) assert_that(events[1]["event_properties"]["playlist_name"].upper()[:3] + " " + events[1]["event_properties"]["playlist_name"].upper()[3:]).is_equal_to(AppConfig.get("playlist1")["name"]) # apple playlist self.apple_playlist_page.open_apple_playlist_page(AppConfig.get("playlist5")["apple_id"]) # self.apple_playlist_page.title_is_present() events = self.amplitude_helper.wait_and_get_amplitude_events(2) self.amplitude_helper.verify_for_event_type(events[1], self.amplitude_helper.PLAYLIST_PAGE["event_type"]) assert_that(events[1]["event_properties"]["dsp_type"]).is_equal_to(self.amplitude_helper.PLAYLIST_PAGE["dsp_type_apple"]) assert_that(events[1]["event_properties"]["playlist_id"]).is_equal_to(AppConfig.get("playlist5")["apple_id"]) assert_that(events[1]["event_properties"]["playlist_name"]).is_equal_to(AppConfig.get("playlist5")["name"]) # step 4 self.album_page.open_album_page(AppConfig.get("album1")["id"]) self.album_page.album_title_is_present() events = self.amplitude_helper.wait_and_get_amplitude_events(2) assert_that(events[1]["event_properties"]["album_id"]).is_equal_to(AppConfig.get("album1")["id"]) assert_that(events[1]["event_properties"]["is_sony"]).is_false() assert_that(events[1]["event_properties"]["album_name"].upper()).is_equal_to(AppConfig.get("album1")["name"]) assert_that(events[1]["event_properties"]["album_artist"]).is_equal_to(AppConfig.get("album1")["artist"]) # step 5 self.artist_page.open_artist_page(AppConfig.get("artist1")["id"]) self.artist_page.title_is_present() events = self.amplitude_helper.wait_and_get_amplitude_events(2) self.amplitude_helper.verify_for_event_type(events[1], self.amplitude_helper.ARTIST_PAGE["event_type"]) assert_that(events[1]["event_properties"]["Artist_id"]).is_equal_to(AppConfig.get("artist1")["id"]) assert_that(events[1]["event_properties"]["Artist_name"]).is_equal_to(AppConfig.get("artist1")["name"]) # step 6 self.account_page.open_account_page(AppConfig.get("account1")["id"]) self.account_page.title_is_present() events = self.amplitude_helper.wait_and_get_amplitude_events(2) self.amplitude_helper.verify_for_event_type(events[1], self.amplitude_helper.ACCOUNT_PAGE["event_type"]) assert_that(events[1]["event_properties"]["account_id"]).is_equal_to(AppConfig.get("account1")["id"]) # step 7 for t in [self.chart_digest.TOP_VIEW, self.chart_digest.MAJOR_MOVES, self.chart_digest.BUBBLING_UNDER]: self.chart_digest.open_charts_digest_page() self.chart_digest.open_top_charts_from_table(t) self.top_charts_page.top_chart_page_is_opened() events = self.amplitude_helper.wait_and_get_amplitude_events(4) self.amplitude_helper.verify_for_event_type(events[-2], self.amplitude_helper.TOP_CHARTS_PAGE["event_type"]) # step 8 self.chart_digest.open_charts_digest_page() most_visited_number = self.chart_digest.get_number_for_the_track_cards() if most_visited_number < 1: self.track_page.open_spotify_track_page(AppConfig.get("track1")["id"]) self.track_page.is_track_page_title_present(AppConfig.get("track1")["name"]) self.chart_digest.open_charts_digest_page() events = self.amplitude_helper.get_amplitude_events() self.chart_digest.navigate_to_most_visited_first_card() self.track_page.is_track_title_present() events = self.amplitude_helper.wait_and_get_amplitude_events(2) self.amplitude_helper.verify_for_event_type(events[0], self.amplitude_helper.MOST_VISITED["event_type"]) self.amplitude_helper.verify_for_event_type(events[1], self.amplitude_helper.TRACK_PAGE["event_type"]) # step 9 self.comparison_page.remove_tracks_if_present_with_worker(AppConfig.get("market")["us"]["db"]) self.left_panel.open_comparison_page() self.comparison_page.comparison_page_is_opened() events = self.amplitude_helper.get_amplitude_events() self.amplitude_helper.verify_for_event_type(events[-1], self.amplitude_helper.COMPARISON_PAGE["event_type"]) assert_that(events[-1]["event_properties"]["tracks_in_comparison"]).is_equal_to(0) # step 10 self.comparison_page.click_add_first_track_button() self.add_track_popup.add_track_to_comparison(self.track_name1) self.comparison_page.verify_added_tracks_count(1) events = self.amplitude_helper.wait_and_get_amplitude_events(1) self.amplitude_helper.verify_for_event_type(events[0], self.amplitude_helper.COMPARISON_PAGE["event_type_track_added"]) assert_that(events[-1]["event_properties"]["tracks_in_comparison"]).is_equal_to(1) # step 11 for t in [self.track_name2, self.track_name3, self.track_name4, self.track_name5]: self.comparison_page.add_card_to_comparison(t) self.comparison_page.verify_added_tracks_count(5) events = self.amplitude_helper.wait_and_get_amplitude_events(4) for t in range(len(events)): self.amplitude_helper.verify_for_event_type(events[t], self.amplitude_helper.COMPARISON_PAGE["event_type_track_added"]) assert_that(events[-1]["event_properties"]["tracks_in_comparison"]).is_equal_to(5) # step 12 self.comparison_page.remove_track(1) self.comparison_page.verify_added_tracks_count(4) events = self.amplitude_helper.wait_and_get_amplitude_events(1) self.amplitude_helper.verify_for_event_type(events[0], self.amplitude_helper.COMPARISON_PAGE["event_type_track_removed"]) assert_that(events[0]["event_properties"]["tracks_in_comparison"]).is_equal_to(4) # step 13 self.comparison_page.open_track_page_from_track_card(self.track4) self.track_page.is_track_page_title_present(AppConfig.get("track4")["name"]) events = self.amplitude_helper.wait_and_get_amplitude_events(2) self.amplitude_helper.verify_for_event_type(events[0], self.amplitude_helper.COMPARISON_PAGE["event_type_page_exited"]) assert_that(events[0]["event_properties"]["tracks_in_comparison"]).is_equal_to(4)