import pytest import allure from random import choice from assertpy import assert_that from src.data.entities_data import entity_types from src.data.entities_data import entity_ids from src.helpers.api_helper import api_amplitude @allure.description("Send statistics to amplitude on Discovery actions") @pytest.mark.usefixtures("app") class TestAmplitudeDiscovery: @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-130") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-952") @allure.title("[Amplitude] - Home Page Visit -> Discovery click") @pytest.mark.regression def test_amplitude_home_page_click_discovery(self): with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.app.go_to("") self.home_page.is_page_loaded() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to('Homepage Viewed') assert_that(event['event_properties']).is_equal_to({}) # Click Discovery button with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.home_page.bn_discover.click() self.discovery_page.is_page_loaded() amplitude_payload = amplitude_response.value.request.post_data_json events = amplitude_payload['events'] assert_that(events[0]['event_type']).is_equal_to('Discovery Button Clicked') assert_that(events[0]['event_properties']).is_equal_to({}) assert_that(events[1]['event_type']).is_equal_to('Discovery Page - Period Switcher Clicked') assert_that(events[2]['event_type']).is_equal_to('Discovery Page Visit Started') assert_that(events[2]['event_properties']).is_equal_to({}) @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-750") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-951") @allure.title("[Amplitude] - Discovery Parameters - DSP and Scope") @pytest.mark.regression def test_amplitude_discovery_dsp_and_scope(self): with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.app.go_to("") with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.menu_page.goto_menu_discoveries() with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.saved_discoveries_page.bn_start_new_discovery.click() self.discovery_page.is_page_loaded() # DSP TikTok ON with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.dsp_tiktok.click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to('Discovery Page - Tiktok Button Clicked') assert_that(event['event_properties']).is_equal_to({"tt_button": "ON"}) # DSP YouTube ON with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.dsp_youtube.click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to('Discovery Page - Youtube Button Clicked') assert_that(event['event_properties']).is_equal_to({"yt_button": "ON"}) # DSP Spotify ON with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.dsp_spotify.click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to('Discovery Page - Spotify Button Clicked') assert_that(event['event_properties']).is_equal_to({"spotify_button": "ON"}) # DSP SoundCloud ON with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.dsp_soundcloud.click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to('Discovery Page - Soundcloud Button Clicked') assert_that(event['event_properties']).is_equal_to({"sc_button": "ON"}) # SCOPE change to Track with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.bn_scope_tracks.click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to('Discovery Params Changed') assert_that(event['event_properties']).is_equal_to({"discovery_type": "track"}) # DSP TikTok OFF with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.dsp_tiktok.click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to('Discovery Page - Tiktok Button Clicked') assert_that(event['event_properties']).is_equal_to({"tt_button": "OFF"}) # DSP YouTube OFF with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.dsp_youtube.click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to('Discovery Page - Youtube Button Clicked') assert_that(event['event_properties']).is_equal_to({"yt_button": "OFF"}) # DSP Spotify OFF with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.dsp_spotify.click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to('Discovery Page - Spotify Button Clicked') assert_that(event['event_properties']).is_equal_to({"spotify_button": "OFF"}) # DSP SoundCloud OFF with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.dsp_soundcloud.click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to('Discovery Page - Soundcloud Button Clicked') assert_that(event['event_properties']).is_equal_to({"sc_button": "OFF"}) # SCOPE change to Artist with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.bn_scope_artists.click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to('Discovery Params Changed') assert_that(event['event_properties']).is_equal_to({"discovery_type": "artist"}) @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-750") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-759") @allure.title("[Amplitude] - Artist - Discovery Parameters - and Save Discovery") @pytest.mark.regression def test_amplitude_discovery_params_artist(self): with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.app.go_to(self.discovery_page.url) self.discovery_page.is_page_loaded() amplitude_payload = amplitude_response.value.request.post_data_json events = amplitude_payload['events'] for event in events: print(event) assert_that(events[0]['event_type']).is_equal_to('Discovery Page - Period Switcher Clicked') assert_that(events[0]['event_properties']).is_equal_to({"period": "28 days"}) assert_that(events[1]['event_type']).is_equal_to('Discovery Page Visit Started') event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to('') # DSPs ON with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.dsp_tiktok.click() self.discovery_page.dsp_youtube.click() self.discovery_page.dsp_spotify.click() self.discovery_page.dsp_soundcloud.click() # Set all parameters to NON-default state self.discovery_page.audience_tiktok_followers_min.slide(direction='Right', times=1) self.discovery_page.audience_tiktok_followers_max.slide(direction='Left', times=1) self.discovery_page.audience_youtube_subscribers_min.slide(direction='Right', times=1) self.discovery_page.audience_youtube_subscribers_max.slide(direction='Left', times=1) self.discovery_page.audience_spotify_followers_min.slide(direction='Right', times=1) self.discovery_page.audience_spotify_followers_max.slide(direction='Left', times=1) self.discovery_page.audience_soundcloud_followers_min.slide(direction='Right', times=1) self.discovery_page.audience_soundcloud_followers_max.slide(direction='Left', times=1) self.discovery_page.releases_tiktok_min_creations.slide(direction='Right', times=1) self.discovery_page.releases_tiktok_creation_duration_min.slide(direction='Right', times=1) self.discovery_page.releases_tiktok_creation_duration_max.slide(direction='Left', times=1) self.discovery_page.releases_youtube_min_videos.slide(direction='Right', times=1) self.discovery_page.releases_spotify_min_tracks.slide(direction='Right', times=1) self.discovery_page.releases_soundcloud_min_tracks.slide(direction='Right', times=1) self.discovery_page.performance_tiktok_mentions_min.slide(direction='Right', times=1) self.discovery_page.performance_tiktok_mentions_max.slide(direction='Left', times=1) self.discovery_page.performance_youtube_views_min.slide(direction='Right', times=1) self.discovery_page.performance_youtube_views_max.slide(direction='Left', times=1) self.discovery_page.performance_soundcloud_plays_min.slide(direction='Right', times=1) self.discovery_page.performance_soundcloud_plays_max.slide(direction='Left', times=1) self.discovery_page.engagement_tiktok_likes_min.slide(direction='Right', times=1) self.discovery_page.engagement_tiktok_likes_max.slide(direction='Left', times=1) self.discovery_page.engagement_spotify_listeners_min.slide(direction='Right', times=1) self.discovery_page.engagement_spotify_listeners_max.slide(direction='Left', times=1) self.discovery_page.engagement_spotify_popularity_min.slide(direction='Right', times=1) self.discovery_page.engagement_spotify_popularity_max.slide(direction='Left', times=1) self.discovery_page.engagement_soundcloud_likes_min.slide(direction='Right', times=1) self.discovery_page.engagement_soundcloud_likes_max.slide(direction='Left', times=1) self.discovery_page.engagement_soundcloud_comments_min.slide(direction='Right', times=1) self.discovery_page.engagement_soundcloud_comments_max.slide(direction='Left', times=1) self.discovery_page.expand_freshest_release_block() self.discovery_page.freshest_release_tiktok.select_option('12 Weeks') self.discovery_page.freshest_release_youtube.select_option('12 Weeks') self.discovery_page.freshest_release_spotify.select_option('12 Weeks') self.discovery_page.freshest_release_soundcloud.select_option('12 Weeks') self.discovery_page.expand_sparkline_block() self.discovery_page.sparkline_tiktok.select_option('Likes') self.discovery_page.sparkline_youtube.select_option('Views') self.discovery_page.sparkline_spotify.select_option('Popularity') self.discovery_page.sparkline_soundcloud.select_option('Plays') self.discovery_page.filter_country.click() self.discovery_page.filter_country_item.get_by('United States').click() self.discovery_page.filter_country.click() self.discovery_page.filter_genre.click() self.discovery_page.filter_genre_item.get_by('Pop').click() self.discovery_page.filter_genre.click() with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.bn_discovery.click() amplitude_payload = amplitude_response.value.request.post_data_json events = amplitude_payload['events'] for event in events: print(event) assert_that(events[0]['event_type']).is_equal_to('Discovery Page - TikTok Artist Parameters') assert_that(events[0]['event_properties']).is_equal_to( {'discoveryParams.a.tiktok.min_creations': 'ON', 'discoveryParams.a.tiktok.chart_type': 'LIKES', 'discoveryParams.a.tiktok.likes': 'ON', 'discoveryParams.a.tiktok.mentions': 'ON', 'discoveryParams.a.tiktok.latest_release_days': 'ON', 'discoveryParams.a.tiktok.followers': 'ON', 'discoveryParams.a.tiktok.creation_duration': 'ON'}) assert_that(events[1]['event_type']).is_equal_to('Discovery Page - YouTube Artist Parameters') assert_that(events[1]['event_properties']).is_equal_to( {'discoveryParams.a.youtube.subscribers': 'ON', 'discoveryParams.a.youtube.chart_type': 'VIEWS', 'discoveryParams.a.youtube.views': 'ON', 'discoveryParams.a.youtube.latest_release_days': 'ON', 'discoveryParams.a.youtube.videos': 'ON'}) assert_that(events[2]['event_type']).is_equal_to('Discovery Page - Spotify Artist Parameters') assert_that(events[2]['event_properties']).is_equal_to( {'discoveryParams.a.spotify.popularity': 'ON', 'discoveryParams.a.spotify.chart_type': 'POPULARITY', 'discoveryParams.a.spotify.tracks': 'ON', 'discoveryParams.a.spotify.followers': 'ON', 'discoveryParams.a.spotify.listeners': 'ON', 'discoveryParams.a.spotify.latest_release_days': 'ON'}) assert_that(events[3]['event_type']).is_equal_to('Discovery Page - SoundCloud Artist Parameters') assert_that(events[3]['event_properties']).is_equal_to( {'discoveryParams.a.soundcloud.followers': 'ON', 'discoveryParams.a.soundcloud.chart_type': 'PLAYS', 'discoveryParams.a.soundcloud.tracks': 'ON', 'discoveryParams.a.soundcloud.plays': 'ON', 'discoveryParams.a.soundcloud.likes': 'ON', 'discoveryParams.a.soundcloud.comments': 'ON', 'discoveryParams.a.soundcloud.latest_release_days': 'ON'}) assert_that(events[4]['event_type']).is_equal_to('Discovery Page - Active DSP') assert_that(events[4]['event_properties']).is_equal_to( {'discoveryParams.tiktok': 'ON', 'discoveryParams.youtube': 'ON', 'discoveryParams.spotify': 'ON', 'discoveryParams.soundcloud': 'ON'}) assert_that(events[5]['event_type']).is_equal_to('Discovery Page - Discovery Launch Time') assert_that(events[5]['event_properties']['duration']).is_greater_than(0) assert_that(events[6]['event_type']).is_equal_to('Discovery Page - Discovery Launch Count') assert_that(type(events[6]['event_properties']['count']['totalCount'])).is_equal_to(int) assert_that(events[7]['event_type']).is_equal_to('Discovery Page - Discovery Parameters') assert_that(events[7]['event_properties']).is_equal_to( {'discoveryParams': {'tiktok': {'chart_type': 'LIKES', 'max_creation_duration': 60, 'max_followers': 1000000, 'max_likes': 10000000, 'max_mentions': 75, 'min_creation_duration': 5, 'min_followers': 1000, 'min_latest_release_days': 84, 'min_likes': 5000, 'min_mentions': 5, 'min_creations': 5}, 'youtube': {'chart_type': 'VIEWS', 'min_subscribers': 1000, 'max_subscribers': 1000000, 'min_views': 5000, 'max_views': 10000000, 'min_latest_release_days': 84, 'min_videos': 5}, 'spotify': {'min_popularity': 10, 'max_popularity': 90, 'min_tracks': 5, 'min_followers': 1000, 'max_followers': 5000000, 'min_listeners': 100, 'max_listeners': 5000000, 'min_latest_release_days': 84, 'chart_type': 'POPULARITY'}, 'soundcloud': {'min_followers': 1000, 'max_followers': 5000000, 'min_tracks': 5, 'min_plays': 5000, 'max_plays': 10000000, 'min_likes': 10, 'max_likes': 50000, 'min_comments': 10, 'max_comments': 50000, 'min_latest_release_days': 84, 'chart_type': 'PLAYS'}, 'countries': ["us"], 'genres': ["pop"]}, 'discoveryType': 'artist', 'discoveryParams.tiktok': 'ON', 'discoveryParams.youtube': 'ON', 'discoveryParams.spotify': 'ON', 'discoveryParams.soundcloud': 'ON'}) assert_that(events[8]['event_type']).is_equal_to('Discovery Page - Discovery Button Clicked') assert_that(events[8]['event_properties']).is_equal_to({}) # SAVE DISCOVERY self.discovery_results_page.bn_save_discovery.click() discovery_name = 'Artist Discovery' self.discovery_results_page.placeholder_discovery_name.input_text(discovery_name) with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_results_page.bn_save_discovery_entity.click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to('Discovery Result Page - Saving New Discovery') assert_that(event['event_properties']).is_equal_to( {'discoveryParams': {'tiktok': {'chart_type': 'LIKES', 'max_creation_duration': 60, 'max_followers': 1000000, 'max_likes': 10000000, 'max_mentions': 75, 'min_creation_duration': 5, 'min_followers': 1000, 'min_latest_release_days': 84, 'min_likes': 5000, 'min_mentions': 5, 'min_creations': 5}, 'youtube': {'chart_type': 'VIEWS', 'min_subscribers': 1000, 'max_subscribers': 1000000, 'min_views': 5000, 'max_views': 10000000, 'min_latest_release_days': 84, 'min_videos': 5}, 'spotify': {'min_popularity': 10, 'max_popularity': 90, 'min_tracks': 5, 'min_followers': 1000, 'max_followers': 5000000, 'min_listeners': 100, 'max_listeners': 5000000, 'min_latest_release_days': 84, 'chart_type': 'POPULARITY'}, 'soundcloud': {'min_followers': 1000, 'max_followers': 5000000, 'min_tracks': 5, 'min_plays': 5000, 'max_plays': 10000000, 'min_likes': 10, 'max_likes': 50000, 'min_comments': 10, 'max_comments': 50000, 'min_latest_release_days': 84, 'chart_type': 'PLAYS'}, 'countries': ["us"], 'genres': ["pop"]}, 'discoveryType': 'artist', 'discoveryParams.tiktok': 'ON', 'discoveryParams.youtube': 'ON', 'discoveryParams.spotify': 'ON', 'discoveryParams.soundcloud': 'ON'}) @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-1887") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-759") @allure.title("[Amplitude] - Track - Discovery Parameters - and Save Discovery") @pytest.mark.regression def test_amplitude_discovery_params_track(self): self.app.go_to(self.discovery_page.url) self.discovery_page.is_page_loaded() self.discovery_page.bn_scope_tracks.click() # DSPs ON with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.dsp_tiktok.click() self.discovery_page.dsp_youtube.click() self.discovery_page.dsp_spotify.click() self.discovery_page.dsp_soundcloud.click() # Set all parameters to NON-default state self.discovery_page.audience_tiktok_views_min.slide(direction='Right', times=1) self.discovery_page.audience_tiktok_views_max.slide(direction='Left', times=1) self.discovery_page.audience_spotify_listeners_min.slide(direction='Right', times=1) self.discovery_page.audience_spotify_listeners_max.slide(direction='Left', times=1) self.discovery_page.audience_spotify_listeners_min.slide(direction='Right', times=1) self.discovery_page.audience_spotify_listeners_max.slide(direction='Left', times=1) self.discovery_page.audience_soundcloud_followers_min.slide(direction='Right', times=1) self.discovery_page.audience_soundcloud_followers_max.slide(direction='Left', times=1) self.discovery_page.releases_tiktok_min_creations.slide(direction='Right', times=1) self.discovery_page.releases_youtube_min_videos.slide(direction='Right', times=1) self.discovery_page.performance_tiktok_likes_min.slide(direction='Right', times=1) self.discovery_page.performance_tiktok_likes_max.slide(direction='Left', times=1) self.discovery_page.performance_youtube_views_min.slide(direction='Right', times=1) self.discovery_page.performance_youtube_views_max.slide(direction='Left', times=1) self.discovery_page.performance_spotify_streams_min.slide(direction='Right', times=1) self.discovery_page.performance_spotify_streams_max.slide(direction='Left', times=1) self.discovery_page.performance_spotify_playlists_min.slide(direction='Right', times=1) self.discovery_page.performance_spotify_playlists_max.slide(direction='Left', times=1) self.discovery_page.performance_soundcloud_plays_min.slide(direction='Right', times=1) self.discovery_page.performance_soundcloud_plays_max.slide(direction='Left', times=1) self.discovery_page.engagement_tiktok_comments_min.slide(direction='Right', times=1) self.discovery_page.engagement_tiktok_comments_max.slide(direction='Left', times=1) self.discovery_page.engagement_tiktok_mentions_min.slide(direction='Right', times=1) self.discovery_page.engagement_tiktok_mentions_max.slide(direction='Left', times=1) self.discovery_page.engagement_youtube_likes_min.slide(direction='Right', times=1) self.discovery_page.engagement_youtube_likes_max.slide(direction='Left', times=1) self.discovery_page.engagement_youtube_comments_min.slide(direction='Right', times=1) self.discovery_page.engagement_youtube_comments_max.slide(direction='Left', times=1) self.discovery_page.engagement_spotify_popularity_min.slide(direction='Right', times=1) self.discovery_page.engagement_spotify_popularity_max.slide(direction='Left', times=1) self.discovery_page.engagement_soundcloud_likes_min.slide(direction='Right', times=1) self.discovery_page.engagement_soundcloud_likes_max.slide(direction='Left', times=1) # self.discovery_page.engagement_soundcloud_comments_min.slide(direction='Right', times=1) self.discovery_page.engagement_soundcloud_comments_max.slide(direction='Left', times=1) self.discovery_page.expand_freshest_release_block() # self.discovery_page.freshest_release_youtube.select_option('12 Weeks') # self.discovery_page.freshest_release_soundcloud.select_option('12 Weeks') self.discovery_page.expand_sparkline_block() self.discovery_page.sparkline_tiktok.select_option('Views') self.discovery_page.sparkline_youtube.select_option('Views') self.discovery_page.sparkline_spotify.select_option('Artist Listeners/Mth') self.discovery_page.sparkline_soundcloud.select_option('Likes') self.discovery_page.filter_country.click() self.discovery_page.filter_country_item.get_by('United States').click() self.discovery_page.filter_country.click() self.discovery_page.filter_genre.click() self.discovery_page.filter_genre_item.get_by('Country').click() self.discovery_page.filter_genre.click() with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.bn_discovery.click() amplitude_payload = amplitude_response.value.request.post_data_json events = amplitude_payload['events'] for event in events: print(event) assert_that(events[0]['event_type']).is_equal_to('Discovery Page - TikTok Track Parameters') assert_that(events[0]['event_properties']).is_equal_to( {'discoveryParams.t.tiktok.views': 'ON', 'discoveryParams.t.tiktok.chart_type': 'VIEWS', 'discoveryParams.t.tiktok.comments': 'ON', 'discoveryParams.t.tiktok.mentions': 'ON', 'discoveryParams.t.tiktok.likes': 'ON', 'discoveryParams.t.tiktok.min_creations': 'ON'}) assert_that(events[1]['event_type']).is_equal_to('Discovery Page - YouTube Track Parameters') assert_that(events[1]['event_properties']).is_equal_to( {'discoveryParams.t.youtube.views': 'ON', 'discoveryParams.t.youtube.chart_type': 'VIEWS', 'discoveryParams.t.youtube.comments': 'ON', 'discoveryParams.t.youtube.likes': 'ON', 'discoveryParams.t.youtube.min_videos': 'ON'}) assert_that(events[2]['event_type']).is_equal_to('Discovery Page - Spotify Track Parameters') assert_that(events[2]['event_properties']).is_equal_to( {'discoveryParams.t.spotify.playlists': 'ON', 'discoveryParams.t.spotify.chart_type': 'MONTHLY_LISTENERS', 'discoveryParams.t.spotify.popularity': 'ON', 'discoveryParams.t.spotify.monthly_listeners': 'ON', 'discoveryParams.t.spotify.streams': 'ON'}) assert_that(events[3]['event_type']).is_equal_to('Discovery Page - SoundCloud Track Parameters') assert_that(events[3]['event_properties']).is_equal_to( {'discoveryParams.t.soundcloud.followers': 'ON', 'discoveryParams.t.soundcloud.chart_type': 'LIKES', 'discoveryParams.t.soundcloud.plays': 'ON', 'discoveryParams.t.soundcloud.likes': 'ON', 'discoveryParams.t.soundcloud.comments': 'ON'}) assert_that(events[4]['event_type']).is_equal_to('Discovery Page - Active DSP') assert_that(events[4]['event_properties']).is_equal_to( {'discoveryParams.tiktok': 'ON', 'discoveryParams.youtube': 'ON', 'discoveryParams.spotify': 'ON', 'discoveryParams.soundcloud': 'ON'}) assert_that(events[5]['event_type']).is_equal_to('Discovery Page - Discovery Launch Time') assert_that(events[5]['event_properties']['duration']).is_greater_than(0) assert_that(events[6]['event_type']).is_equal_to('Discovery Page - Discovery Launch Count') assert_that(type(events[6]['event_properties']['count']['totalCount'])).is_equal_to(int) assert_that(events[7]['event_type']).is_equal_to('Discovery Page - Discovery Parameters') assert_that(events[7]['event_properties']).is_equal_to( {'discoveryParams': {'tiktok': {'chart_type': 'VIEWS', 'max_comments': 1000, 'max_likes': 5000000, 'max_mentions': 75, 'max_views': 10000000, 'min_comments': 10, 'min_likes': 1000, 'min_mentions': 5, 'min_creations': 10, 'min_views': 1000}, 'youtube': {'min_views': 1000, 'max_views': 1000000, 'min_comments': 10, 'max_comments': 5000, 'min_likes': 1000, 'max_likes': 1000000, 'min_videos': 1, 'chart_type': 'VIEWS'}, 'spotify': {'min_playlists': 10, 'max_playlists': 500, 'min_popularity': 10, 'max_popularity': 90, 'min_monthly_listeners': 5000, 'max_monthly_listeners': 1000000, 'min_streams': 1000, 'max_streams': 50000000, 'chart_type': 'MONTHLY_LISTENERS'}, 'soundcloud': {'min_followers': 1000, 'max_followers': 5000000, 'min_plays': 1000, 'max_plays': 50000000, 'min_likes': 10, 'max_likes': 50000, 'min_comments': 0, 'max_comments': 50000, 'chart_type': 'LIKES'}, 'genres': ['country'], 'countries': ['us']}, 'discoveryType': 'track', 'discoveryParams.tiktok': 'ON', 'discoveryParams.youtube': 'ON', 'discoveryParams.spotify': 'ON', 'discoveryParams.soundcloud': 'ON'}) assert_that(events[8]['event_type']).is_equal_to('Discovery Page - Discovery Button Clicked') assert_that(events[8]['event_properties']).is_equal_to({}) # SAVE DISCOVERY self.discovery_results_page.bn_save_discovery.click() discovery_name = 'Artist Discovery' self.discovery_results_page.placeholder_discovery_name.input_text(discovery_name) with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_results_page.bn_save_discovery_entity.click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to('Discovery Result Page - Saving New Discovery') assert_that(event['event_properties']).is_equal_to( {'discoveryParams': {'tiktok': {'chart_type': 'VIEWS', 'max_comments': 1000, 'max_likes': 5000000, 'max_mentions': 75, 'max_views': 10000000, 'min_comments': 10, 'min_likes': 1000, 'min_mentions': 5, 'min_creations': 10, 'min_views': 1000}, 'youtube': {'min_views': 1000, 'max_views': 1000000, 'min_comments': 10, 'max_comments': 5000, 'min_likes': 1000, 'max_likes': 1000000, 'min_videos': 1, 'chart_type': 'VIEWS'}, 'spotify': {'min_playlists': 10, 'max_playlists': 500, 'min_popularity': 10, 'max_popularity': 90, 'min_monthly_listeners': 5000, 'max_monthly_listeners': 1000000, 'min_streams': 1000, 'max_streams': 50000000, 'chart_type': 'MONTHLY_LISTENERS'}, 'soundcloud': {'min_followers': 1000, 'max_followers': 5000000, 'min_plays': 1000, 'max_plays': 50000000, 'min_likes': 10, 'max_likes': 50000, 'min_comments': 0, 'max_comments': 50000, 'chart_type': 'LIKES'}, 'genres': ['country'], 'countries': ['us']}, 'discoveryType': 'track', 'discoveryParams.tiktok': 'ON', 'discoveryParams.youtube': 'ON', 'discoveryParams.spotify': 'ON', 'discoveryParams.soundcloud': 'ON'}) @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-769") @allure.title("[Amplitude] - Discovery Result Page - Edit") @pytest.mark.regression def test_amplitude_discovery_results_edit(self): self.app.go_to(self.discovery_page.url) self.discovery_page.is_page_loaded() # DSPs ON self.discovery_page.dsp_tiktok.click() self.discovery_page.dsp_youtube.click() self.discovery_page.dsp_spotify.click() self.discovery_page.dsp_soundcloud.click() with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.bn_discovery.click() with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_results_page.bn_edit_discovery.click() amplitude_payload = amplitude_response.value.request.post_data_json events = amplitude_payload['events'] for event in events: print(event) assert_that(events[0]['event_type']).is_equal_to('Discovery Result Page - Edit Discovery') assert_that(events[0]['event_properties']).is_equal_to( {"discoveryParams": {"tiktok": {}, "youtube": {}, "spotify": {}, "soundcloud": {}}, "discoveryType": "artist", "discoveryParams.tiktok": "ON", "discoveryParams.tiktok.chart_type": "Followers", "discoveryParams.youtube": "ON", "discoveryParams.youtube.chart_type": "Subscribers", "discoveryParams.spotify": "ON", "discoveryParams.spotify.chart_type": "Followers", "discoveryParams.soundcloud": "ON", "discoveryParams.soundcloud.chart_type": "Followers"}) assert_that(events[1]['event_type']).is_equal_to('Discovery Page Visit Started') assert_that(events[1]['event_properties']).is_equal_to({}) @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-391") @allure.title("[Amplitude] - Discovery Result Page - User Visited Page") @pytest.mark.regression @pytest.mark.parametrize('entity_type', entity_types) def test_amplitude_discovery_results_visit(self, entity_type): self.app.go_to(self.discovery_page.url) self.discovery_page.is_page_loaded() with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.dsp_tiktok.click() if entity_type == 'track': with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.bn_scope_tracks.click() # DISCOVERY click with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.bn_discovery.click() self.discovery_results_page.is_page_loaded() # Second page with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_results_page.bn_next_page.click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to('Discovery Result Page - User Visited Page') assert_that(event['event_properties']['discoveryType']).is_equal_to(entity_type) assert_that(event['event_properties']['pageNumber']).is_equal_to(2) @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-90") @allure.title("[Amplitude] - Discovery Result Page - Entity Card Clicked") @pytest.mark.regression @pytest.mark.parametrize('entity_type', entity_types) def test_amplitude_discovery_results_entity_card_click(self, entity_type): self.app.go_to(self.discovery_page.url) self.discovery_page.is_page_loaded() self.discovery_page.dsp_tiktok.click() self.discovery_page.dsp_youtube.click() self.discovery_page.dsp_spotify.click() self.discovery_page.dsp_soundcloud.click() if entity_type == 'track': with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.bn_scope_tracks.click() # DISCOVERY click with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_page.bn_discovery.click() self.discovery_results_page.is_page_loaded() entities_id = self.discovery_results_page.page_cards_id_list() entity_id = entities_id[0] entity_name = self.discovery_results_page.card_name.get_by(entity_id).get_text() # DSP SoundCloud click dsp_ui = ["sndcld", "soundCloud"] with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_results_page.card_dsp.get_by(entity_id, dsp_ui[0]).click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to(f'{entity_type.capitalize()} Card Clicked') assert_that(event['event_properties']['dsp_tab']).is_equal_to(dsp_ui[1]) assert_that(event['event_properties'][f'{entity_type}_id']).is_equal_to(entity_id) if entity_type == 'artist': assert_that(event['event_properties']['artist_name']).is_equal_to(entity_name) elif entity_type == 'track': assert_that(event['event_properties']['track_title']).is_equal_to(entity_name) # DSP Spotify click dsp_ui = ["spotify", "Spotify"] with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_results_page.card_dsp.get_by(entity_id, dsp_ui[0]).click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to(f'{entity_type.capitalize()} Card Clicked') assert_that(event['event_properties']['dsp_tab']).is_equal_to(dsp_ui[1]) assert_that(event['event_properties'][f'{entity_type}_id']).is_equal_to(entity_id) if entity_type == 'artist': assert_that(event['event_properties']['artist_name']).is_equal_to(entity_name) elif entity_type == 'track': assert_that(event['event_properties']['track_title']).is_equal_to(entity_name) # DSP YouTube click dsp_ui = ["youtube", "YouTube"] with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_results_page.card_dsp.get_by(entity_id, dsp_ui[0]).click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to(f'{entity_type.capitalize()} Card Clicked') assert_that(event['event_properties']['dsp_tab']).is_equal_to(dsp_ui[1]) assert_that(event['event_properties'][f'{entity_type}_id']).is_equal_to(entity_id) if entity_type == 'artist': assert_that(event['event_properties']['artist_name']).is_equal_to(entity_name) elif entity_type == 'track': assert_that(event['event_properties']['track_title']).is_equal_to(entity_name) # DSP TikTok click dsp_ui = ["tiktok", "TikTok"] with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.discovery_results_page.card_dsp.get_by(entity_id, dsp_ui[0]).click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to(f'{entity_type.capitalize()} Card Clicked') assert_that(event['event_properties']['dsp_tab']).is_equal_to(dsp_ui[1]) assert_that(event['event_properties'][f'{entity_type}_id']).is_equal_to(entity_id) if entity_type == 'artist': assert_that(event['event_properties']['artist_name']).is_equal_to(entity_name) elif entity_type == 'track': assert_that(event['event_properties']['track_title']).is_equal_to(entity_name) @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-720") @allure.title("[Amplitude] - Discovery Result Page - Add Entity To Category") @pytest.mark.regression @pytest.mark.parametrize('entity_type', entity_types) def test_amplitude_save_entity_to_category(self, entity_type): self.app.go_to(self.discovery_page.url) self.discovery_page.is_page_loaded() if entity_type == 'track': self.discovery_page.switch_scope_to_tracks() # Set random DSP self.discovery_page.dsp_tiktok_on(True) self.discovery_page.bn_discovery.click() self.discovery_results_page.is_page_loaded() entities = self.discovery_results_page.page_cards_id_list() entity_id = choice(entities) entity_name = self.discovery_results_page.card_name.get_by(entity_id).get_text() self.discovery_results_page.card_menu.get_by(entity_id).click() self.common_page.modal_btn_add_to_category.click() category_name = f"AutoCategory for {entity_type}" self.common_page.placeholder_category_title.input_text(category_name) with self.app.page.expect_response( lambda response: response.url == api_amplitude and response.request.method == 'POST' and response.status == 200) as amplitude_response: self.common_page.modal_btn_create_and_save.click() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to(f'Save {entity_type.capitalize()}') assert_that(event['event_properties'][f'{entity_type}_id']).is_equal_to(entity_id) assert_that(event['event_properties'][f'{entity_type}_name']).is_equal_to(entity_name) assert_that(int(event['event_properties']['category_id'])).is_greater_than(0)