import time import pytest import allure from assertpy import assert_that @pytest.mark.usefixtures("app") class TestSavedDiscovery: @allure.title("[Saved Discoveries] – Save Artist discovery") @allure.description("As user I want to save discovery") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-194") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-136") @pytest.mark.smoke def test_save_artist_discovery(self): self.app.go_to(self.saved_discoveries_page.url) self.saved_discoveries_page.is_page_loaded() self.saved_discoveries_page.check_no_saved_discoveries() self.app.go_to(self.discovery_page.url) self.discovery_page.is_page_loaded() # Set random parameters self.discovery_page.dsp_tiktok_on(True) self.discovery_page.random_artist_tiktok_changes() with self.app.page.expect_request(self.discovery_page.api_artist_discovery) as discovery_request: self.discovery_page.bn_discovery.click() self.discovery_results_page.bn_save_discovery.click() self.discovery_results_page.bn_save_discovery_entity.is_enabled(False) discovery_name = 'Artist Discovery' self.discovery_results_page.placeholder_discovery_name.input_text(discovery_name) with self.app.page.expect_request(self.discovery_results_page.api_saved_discoveries) as save_discovery_request: self.discovery_results_page.bn_save_discovery_entity.click() alert_msg = self.common_page.alert_msg.get_text() assert_that(alert_msg).is_equal_to( f'This discovery is saved as {discovery_name}. You can access it again from Discoveries section.') d_requested = discovery_request.value.post_data_json del d_requested['limit'] del d_requested['offset'] del d_requested['error_rate'] d_posted = save_discovery_request.value.post_data_json['params'] d_saved = [d for d in self.app.api.get_saved_discoveries() if d['name'] == discovery_name] print(f"Requested payload: {d_requested}") print(f"Posted payload: {d_posted}") print(f"Saved payload: {d_saved}") assert_that(d_requested).is_equal_to(d_posted).is_equal_to(d_saved[0]['params']) assert_that(d_saved[0]['type']).is_equal_to('artist') @allure.title("[Saved Discoveries] – Save Track discovery") @allure.description("As user I want to save discovery") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-136") @pytest.mark.smoke def test_save_track_discovery(self): self.app.go_to(self.discovery_page.url) self.discovery_page.switch_scope_to_tracks() self.discovery_page.is_page_loaded() # Set random parameters self.discovery_page.dsp_spotify_on(True) self.discovery_page.random_track_spotify_changes() with self.app.page.expect_request(self.discovery_page.api_track_discovery) as discovery_request: self.discovery_page.bn_discovery.click() self.discovery_results_page.bn_save_discovery.click() self.discovery_results_page.bn_save_discovery_entity.is_enabled(False) discovery_name = 'Track Discovery' self.discovery_results_page.placeholder_discovery_name.input_text(discovery_name) with self.app.page.expect_request(self.discovery_results_page.api_saved_discoveries) as saving_discovery_request: self.discovery_results_page.bn_save_discovery_entity.click() alert_msg = self.common_page.alert_msg.get_text() assert_that(alert_msg).is_equal_to( f'This discovery is saved as {discovery_name}. You can access it again from Discoveries section.') d_requested = discovery_request.value.post_data_json del d_requested['limit'] del d_requested['offset'] del d_requested['error_rate'] d_posted = saving_discovery_request.value.post_data_json['params'] d_saved = [d for d in self.app.api.get_saved_discoveries() if d['name'] == discovery_name] print(f"Requested payload: {d_requested}") print(f"Posted payload: {d_posted}") print(f"Saved payload: {d_saved}") assert_that(d_requested).is_equal_to(d_posted).is_equal_to(d_saved[0]['params']) assert_that(d_saved[0]['type']).is_equal_to('track') @allure.title("[Saved Discoveries] – View Saved Discovery cards") @allure.description("As user I want to find my saved discovery") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-136") @pytest.mark.smoke def test_view_saved_discoveries(self): self.app.api.insert_discovery('artist') self.app.api.insert_discovery('track') self.app.go_to(self.saved_discoveries_page.url) self.saved_discoveries_page.is_page_loaded() assert_that(self.saved_discoveries_page.discoveries_count()).is_equal_to(2) self.saved_discoveries_page.check_discovery_card(1, 'track') self.saved_discoveries_page.check_discovery_card(2, 'artist') @allure.title("[Saved Discoveries] – Failed to load placeholder") @allure.description("As user I want to see appropriate message in case failed to load discoveries") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-655") @pytest.mark.smoke def test_failed_to_load_discoveries(self): self.app.api.insert_discovery('artist') self.app.abort_request("**user_searches") self.app.go_to(self.saved_discoveries_page.url) self.saved_discoveries_page.is_page_loaded() self.common_page.error_titles_container.contain_text('Failed to load.Please try refreshing the page.') @allure.title("[Saved Discoveries] – Run Saved Discovery") @allure.description("As user I want to run my saved discovery") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-128") @pytest.mark.smoke def test_run_saved_discovery(self): entity_type = 'artist' self.app.api.insert_discovery(entity_type) self.app.go_to(self.saved_discoveries_page.url) self.saved_discoveries_page.is_page_loaded() assert_that(self.saved_discoveries_page.discoveries_count()).is_equal_to(1) self.saved_discoveries_page.run_discovery(1) self.discovery_results_page.saved_discovery_name_exists(entity_type) # Current verification is for discovery with params from src/data/artist_discovery.json self.discovery_results_page.bn_see_discovery_summary.click() self.discovery_results_page.discovery_summary_filter_item.get_by('Countries').contain_text('Australia') self.discovery_results_page.discovery_summary_filter_item.get_by('Genres').contain_text('Pop') test_data = [ {'panel': 'Audience', 'dsp': 'tiktok', 'position': 1, 'expected': 'Followers1k–10M+'}, {'panel': 'Audience', 'dsp': 'youtube', 'position': 1, 'expected': 'Subscribers0–1M'}, {'panel': 'Audience', 'dsp': 'spotify', 'position': 1, 'expected': 'Followers1k–10M+'}, {'panel': 'Audience', 'dsp': 'soundcloud', 'position': 1, 'expected': 'Followers0–5M'}, {'panel': 'Releases', 'dsp': 'tiktok', 'position': 1, 'expected': 'Min. Creations5'}, {'panel': 'Releases', 'dsp': 'tiktok', 'position': 2, 'expected': 'Creation Duration0s–1m'}, {'panel': 'Releases', 'dsp': 'youtube', 'position': 1, 'expected': 'Min. Videos5'}, {'panel': 'Releases', 'dsp': 'spotify', 'position': 1, 'expected': 'Min. Tracks10'}, {'panel': 'Releases', 'dsp': 'soundcloud', 'position': 1, 'expected': 'Min. Tracks5'}, {'panel': 'Performance', 'dsp': 'tiktok', 'position': 1, 'expected': 'Mentions5–100+'}, {'panel': 'Performance', 'dsp': 'youtube', 'position': 1, 'expected': 'Views5k–10M'}, {'panel': 'Performance', 'dsp': 'soundcloud', 'position': 1, 'expected': 'Plays5k–100M+'}, {'panel': 'Engagement', 'dsp': 'tiktok', 'position': 1, 'expected': 'Likes0–10M'}, {'panel': 'Engagement', 'dsp': 'spotify', 'position': 1, 'expected': 'Listeners/Mth100–10M+'}, {'panel': 'Engagement', 'dsp': 'spotify', 'position': 2, 'expected': 'Popularity10–100'}, {'panel': 'Engagement', 'dsp': 'soundcloud', 'position': 1, 'expected': 'Likes0–50k'}, {'panel': 'Engagement', 'dsp': 'soundcloud', 'position': 2, 'expected': 'Comments10–100k+'}, {'panel': 'Freshest Release', 'dsp': 'tiktok', 'position': 1, 'expected': 'Latest Release1 Week'}, {'panel': 'Freshest Release', 'dsp': 'youtube', 'position': 1, 'expected': 'Latest Release12+ Weeks'}, {'panel': 'Freshest Release', 'dsp': 'spotify', 'position': 1, 'expected': 'Latest Release12 Weeks'}, {'panel': 'Freshest Release', 'dsp': 'soundcloud', 'position': 1, 'expected': 'Latest Release12+ Weeks'}, {'panel': 'Sparkline', 'dsp': 'tiktok', 'position': 1, 'expected': 'TikTokLikes'}, {'panel': 'Sparkline', 'dsp': 'youtube', 'position': 1, 'expected': 'YouTubeViews'}, {'panel': 'Sparkline', 'dsp': 'spotify', 'position': 1, 'expected': 'SpotifyPopularity'}, {'panel': 'Sparkline', 'dsp': 'soundcloud', 'position': 1, 'expected': 'SoundCloudPlays'}, ] for item in test_data: print("Testing: {}".format(item)) self.discovery_results_page.discovery_summary_item.get_by( item['panel'], item['dsp'], item['position']).contain_text(item['expected']) self.discovery_results_page.bn_hide_discovery_summary.click() self.discovery_results_page.bn_return_to_saved_discoveries.click() self.saved_discoveries_page.is_page_loaded() @allure.title("[Saved Discoveries] – Preview Parameters") @allure.description("As user I want to preview my saved discovery") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-199") @pytest.mark.smoke def test_preview_saved_discovery_parameters(self): entity_type = 'track' # Add some favorites to check it does not impact switcher in filters self.app.api.add_to_favorite('countries', 'au') self.app.api.add_to_favorite('genres', 'african-dance') self.app.api.insert_discovery(entity_type) self.app.go_to(self.saved_discoveries_page.url) self.saved_discoveries_page.is_page_loaded() assert_that(self.saved_discoveries_page.discoveries_count()).is_equal_to(1) self.saved_discoveries_page.discovery_item_menu.get_by(1).click() with self.app.page.expect_request(self.discovery_page.api_track_total_count) as total_count: self.saved_discoveries_page.discovery_item_menu_preview_params.click() self.discovery_page.is_page_loaded() self.saved_discoveries_page.check_discovery_preview_payload(entity_type, total_count) # Check Countries self.discovery_page.filter_country.click() self.discovery_page.filter_country_favorite_switch.is_checked(False) self.discovery_page.filter_country_item.get_by('United Kingdom').is_checked(True) self.discovery_page.filter_country.click() # Check Genres self.discovery_page.filter_genre.click() self.discovery_page.filter_genre_favorite_switch.is_checked(False) self.discovery_page.filter_genre_item.get_by('Rock').is_checked(True) self.discovery_page.filter_genre.click() # Check Audience self.discovery_page.audience_block_title.contain_text('Views1k–50M+') self.discovery_page.audience_block_title.contain_text('Listeners/Mth0–5M') self.discovery_page.audience_block_title.contain_text('Followers1k–10M+') # Check Releases self.discovery_page.releases_block_title.contain_text('Min. Creations10') self.discovery_page.releases_block_title.contain_text('Min. Videos2') # Check Performance self.discovery_page.performance_block_title.contain_text('Likes1k–10M+') self.discovery_page.performance_block_title.contain_text('Views0–1M') self.discovery_page.performance_block_title.contain_text('Playlists10–1k+') self.discovery_page.performance_block_title.contain_text('Plays0–50M') # Check Engagement self.discovery_page.engagement_block_title.contain_text('Comments10–10k+') self.discovery_page.engagement_block_title.contain_text('Comments10–100k+') # Freshest Releases self.discovery_page.freshest_release_block_title.contain_text('Latest Release12 Weeks') # Sparkline self.discovery_page.sparkline_block_title.contain_text('TikTokViews') self.discovery_page.sparkline_block_title.contain_text('YouTubeViews') self.discovery_page.sparkline_block_title.contain_text('SpotifyArtist Listeners/Mth') self.discovery_page.sparkline_block_title.contain_text('SoundCloudLikes') @allure.title("[Saved Discoveries] – Rename") @allure.description("As user I want to rename my saved discovery") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-135") @pytest.mark.smoke def test_rename_saved_discovery(self): entity_type = 'track' self.app.api.insert_discovery(entity_type) self.app.go_to(self.saved_discoveries_page.url) self.saved_discoveries_page.is_page_loaded() assert_that(self.saved_discoveries_page.discoveries_count()).is_equal_to(1) discovery_name_origin = self.saved_discoveries_page.discovery_item_name.get_by(1).get_text() # Rename - Cancel self.saved_discoveries_page.discovery_item_menu.get_by(1).click() self.saved_discoveries_page.discovery_item_menu_rename.click() self.common_page.modal_btn_cancel.click() discovery_name_not_changed = self.saved_discoveries_page.discovery_item_name.get_by(1).get_text() assert_that(discovery_name_origin).is_equal_to(discovery_name_not_changed) # Rename - Save self.saved_discoveries_page.discovery_item_menu.get_by(1).click() self.saved_discoveries_page.discovery_item_menu_rename.click() self.common_page.modal_btn_save.is_enabled(False) # Rename - Check name length limited to 25 symbols discovery_name_26 = '01234567890123456789012345' self.common_page.input_placeholder.input_text(discovery_name_26) self.common_page.modal_btn_save.is_enabled(False) # Rename - check new name discovery_name_new = 'updated discovery name' self.common_page.input_placeholder.input_text(discovery_name_new) self.common_page.modal_btn_save.is_enabled(True) self.common_page.modal_btn_save.click() time.sleep(1) discovery_name_changed = self.saved_discoveries_page.discovery_item_name.get_by(1).get_text() assert_that(discovery_name_changed).is_equal_to(discovery_name_new) @allure.title("[Saved Discoveries] – Delete") @allure.description("As user I want to delete my saved discovery") @allure.testcase("https://data-analytics.atlassian.net/browse/DNAD-137") @pytest.mark.smoke def test_delete_saved_discovery(self): self.app.api.insert_discovery('artist') self.app.api.insert_discovery('track') self.app.go_to(self.saved_discoveries_page.url) self.saved_discoveries_page.is_page_loaded() assert_that(self.saved_discoveries_page.discoveries_count()).is_equal_to(2) # Delete - Cancel self.saved_discoveries_page.discovery_item_menu.get_by(1).click() self.saved_discoveries_page.discovery_item_menu_delete.click() self.common_page.modal_btn_cancel.click() assert_that(self.saved_discoveries_page.discoveries_count()).is_equal_to(2) # Delete - Delete self.saved_discoveries_page.discovery_item_menu.get_by(1).click() self.saved_discoveries_page.discovery_item_menu_delete.click() self.common_page.modal_btn_delete.click() alert_msg = self.common_page.alert_msg.get_text() assert_that(alert_msg).is_equal_to('Discovery is deleted.') self.app.page.reload() self.saved_discoveries_page.is_page_loaded() assert_that(self.saved_discoveries_page.discoveries_count()).is_equal_to(1)