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 Saved Discovery actions") @pytest.mark.usefixtures("app") class TestAmplitudeSavedDiscovery: event_properties = { 'artist': {'discoveryParams': { 'tiktok': {'chart_type': 'LIKES', 'max_creation_duration': 60, 'max_followers': 100000000000, 'max_likes': 10000000, 'max_mentions': 100000000000, 'min_creation_duration': 0, 'min_followers': 1000, 'min_latest_release_days': 7, 'min_likes': 0, 'min_mentions': 5, 'min_creations': 5}, 'youtube': {'chart_type': 'VIEWS', 'min_subscribers': 0, 'max_subscribers': 1000000, 'min_views': 5000, 'max_views': 10000000, 'min_latest_release_days': None, 'min_videos': 5}, 'spotify': {'min_popularity': 10, 'max_popularity': 100, 'min_tracks': 10, 'min_followers': 1000, 'max_followers': 100000000000, 'min_listeners': 100, 'max_listeners': 100000000000, 'min_latest_release_days': 84, 'chart_type': 'POPULARITY'}, 'soundcloud': {'min_followers': 0, 'max_followers': 5000000, 'min_tracks': 5, 'min_plays': 5000, 'max_plays': 100000000000, 'min_likes': 0, 'max_likes': 50000, 'min_comments': 10, 'max_comments': 100000000000, 'min_latest_release_days': None, 'chart_type': 'PLAYS'}, 'genres': ['pop'], 'countries': ['au']}, 'discoveryType': 'artist', 'discoveryParams.tiktok': 'ON', 'discoveryParams.youtube': 'ON', 'discoveryParams.spotify': 'ON', 'discoveryParams.soundcloud': 'ON'}, 'track': {'discoveryParams': { 'tiktok': {'chart_type': 'VIEWS', 'max_likes': 100000000000, 'max_views': 100000000000, 'min_likes': 1000, 'min_creations': 10, 'min_views': 1000}, 'youtube': {'min_views': 0, 'max_views': 1000000, 'min_comments': 10, 'max_comments': 100000000000, 'min_videos': 2, 'chart_type': 'VIEWS', 'min_latest_release_days': 84}, 'spotify': {'min_playlists': 10, 'max_playlists': 100000000000, 'min_monthly_listeners': 0, 'max_monthly_listeners': 5000000, 'chart_type': 'MONTHLY_LISTENERS'}, 'soundcloud': {'min_followers': 1000, 'max_followers': 100000000000, 'min_plays': 0, 'max_plays': 50000000, 'min_comments': 10, 'max_comments': 100000000000, 'chart_type': 'LIKES'}, 'genres': ['rock'], 'countries': ['gb']}, 'discoveryType': 'track', 'discoveryParams.tiktok': 'ON', 'discoveryParams.youtube': 'ON', 'discoveryParams.spotify': 'ON', 'discoveryParams.soundcloud': 'ON'} } @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-1891") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-1911") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-1912") @allure.title("[Amplitude] - Saved Discovery Page - Visit - Discovery Launch - Discovery Parameters") @pytest.mark.regression @pytest.mark.parametrize('entity_type', entity_types) def test_amplitude_saved_discovery_run(self, entity_type): self.app.api.insert_discovery(entity_type) 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.saved_discoveries_page.url) self.saved_discoveries_page.is_page_loaded() event = self.common_page.get_amplitude_event(amplitude_response) assert_that(event['event_type']).is_equal_to('Saved Discovery Page Viewed') assert_that(event['event_properties']).is_equal_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.saved_discoveries_page.run_discovery(1) self.discovery_results_page.saved_discovery_name_exists(entity_type) 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('Saved Discovery Page - Discovery Launch Count') assert_that(events[0]['event_properties']['discoveryType']).is_equal_to(entity_type) assert_that(type(events[0]['event_properties']['count'])).is_equal_to(int) assert_that(events[1]['event_type']).is_equal_to('Saved Discovery Page - Discovery Parameters') assert_that(events[1]['event_properties']).is_equal_to(self.event_properties[entity_type]) @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-221") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-238") @allure.title("[Amplitude] - Saved Discovery - Edit Discovery Parameters, count") @pytest.mark.regression @pytest.mark.parametrize('entity_type', entity_types) def test_amplitude_saved_discovery_edit(self, entity_type): self.app.api.insert_discovery(entity_type) 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.saved_discoveries_page.url) self.saved_discoveries_page.is_page_loaded() self.saved_discoveries_page.discovery_item_menu.get_by(1).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.saved_discoveries_page.discovery_item_menu_preview_params.click() 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('Saved Discovery Page - Edit Discovery Count') assert_that(events[0]['event_properties']['discoveryType']).is_equal_to(entity_type) assert_that(type(events[0]['event_properties']['count'])).is_equal_to(int) assert_that(events[1]['event_type']).is_equal_to('Saved Discovery Page - Edit Discovery Parameters') assert_that(events[1]['event_properties']).is_equal_to(self.event_properties[entity_type]) assert_that(events[2]['event_type']).is_equal_to('Discovery Page - Period Switcher Clicked') assert_that(events[3]['event_type']).is_equal_to('Discovery Page Visit Started')