import json 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 app.api_client import ApiClient from ...pages.add_track_popup import AddTrackPopup from ...pages.comparison_page import TrackComparisonPage from ...pages.left_navigation_panel import LeftNavigationPanel from ...pages.login_page import LoginPage from ...pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up") class ComparisonPlaylistSupportTest(unittest.TestCase): track5 = json.loads(json.dumps(AppConfig.get("track5")), object_hook=lambda d: Namespace(**d)) us = json.loads(json.dumps(AppConfig.get("market")["us"]), object_hook=lambda d: Namespace(**d)) denmark = json.loads(json.dumps(AppConfig.get("market")["denmark"]), object_hook=lambda d: Namespace(**d)) bulgaria = json.loads(json.dumps(AppConfig.get("market")["bulgaria"]), object_hook=lambda d: Namespace(**d)) period_28_days = json.loads(json.dumps(AppConfig.get("periods")["28d"]), object_hook=lambda d: Namespace(**d)) dsp_values_support = [ AppConfig.get("dsp")["spotify"], AppConfig.get("dsp")["apple"], AppConfig.get("dsp")["all_playlists"], ] @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.trackPage = TrackPage(self.driver) self.add_track_popup = AddTrackPopup(self.driver) self.comparison_page = TrackComparisonPage(self.driver) self.left_panel = LeftNavigationPanel(self.driver) self.api_client = ApiClient() self.ts = TestStatus(self.driver) @pytest.mark.flaky(reruns=0) @allure.story("AP-591") @allure.severity(allure.severity_level.NORMAL) @allure.title( """Playlist Support: Empty Playlist Support section. BE doesn't return any playlists for added to comparison track in the selected date range.""" ) @allure.description( """Verification how the playlist support section is displayed when BE doesn't return any playlists for added to comparison track in the selected by user date range.""" ) def test_playlist_support_empty(self): self.comparison_page.remove_tracks_if_present_with_worker(self.us.market) user = self.loginPage.get_user_email_with_worker() token = self.api_client.authorize(user=user) self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=self.track5.isrc, id=self.track5.id) self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.left_panel.open_comparison_page() self.comparison_page.select_market_from_dd(self.us.name) self.comparison_page.select_period_from_dd(self.period_28_days.name) self.comparison_page.open_playlist_details() self.comparison_page.empty_playlist_support_displayed() self.comparison_page.playlist_details_is_header_displayed() for dsp in self.dsp_values_support: self.comparison_page.playlist_details_select_dsp_from_dd(dsp) header_displayed = self.comparison_page.playlist_details_is_header_displayed() self.comparison_page.is_icon_displayed("support") self.comparison_page.empty_playlist_support_displayed() current_timeline = self.comparison_page.get_playlist_details_timeline() self.ts.markFinal(header_displayed, "STEP 1-3: empty playlist support section is displayed") self.ts.markFinal(current_timeline == self.period_28_days.timeline, "timeline is displayed for 28 days") self.comparison_page.select_market_from_dd(self.denmark.name) self.comparison_page.open_playlist_details() current_dsp = self.comparison_page.get_current_dsp("support") self.ts.markFinal(current_dsp == self.dsp_values_support[0], "STEP 4-6: current dsp is: {}".format(current_dsp)) names_ui_spotify = self.comparison_page.get_playlist_details_names() ids_db_spotify = self.comparison_page.get_spotify_playlist_ids_spotify_from_db_for_track( isrc=self.track5.isrc, exit_date=self.track5.dates.exit, period=self.period_28_days.count, country=self.denmark.db, ) ids_api_spotify = self.comparison_page.get_playlists_from_local_market_for_track_api_get( apple_spotify="spotify", period=self.period_28_days.count, track=self.track5.id, param="id", market=self.denmark.market, ) names_api_spotify = self.comparison_page.get_playlists_from_local_market_for_track_api_get( apple_spotify="spotify", period=self.period_28_days.count, track=self.track5.id, param="name", market=self.denmark.market, ) self.ts.markFinal(names_ui_spotify == names_api_spotify, "STEP 7: ui and api playlists names are the same for spotify") assert_that(set(ids_api_spotify)).is_subset_of(set(ids_db_spotify)) self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[1]) names_ui_apple = self.comparison_page.get_playlist_details_names() ids_db_apple = self.comparison_page.get_playlist_ids_apple_from_db_for_track( isrc=self.track5.isrc, track_date=self.track5.dates.exit, period=self.period_28_days.count, market=self.denmark.db, ) ids_api_apple = self.comparison_page.get_playlists_from_local_market_for_track_api_get( apple_spotify="apple", period=self.period_28_days.count, track=self.track5.apple_id, param="id", market=self.denmark.market, ) names_api_apple = self.comparison_page.get_playlists_from_local_market_for_track_api_get( apple_spotify="apple", period=self.period_28_days.count, track=self.track5.apple_id, param="name", market=self.denmark.market, ) self.ts.markFinal(names_ui_apple == names_api_apple, "ui and api playlists names are the same for apple") self.ts.markFinal(set(ids_api_apple) == set(ids_db_apple), "db and api playlists ids are the same") self.ts.markFinal(len(ids_api_apple) == len(ids_db_apple), "db and api playlists count are the same") self.comparison_page.playlist_details_select_dsp_from_dd(self.dsp_values_support[2]) names_ui_combined = self.comparison_page.get_playlist_details_names() self.ts.markFinal( set(names_ui_apple + names_ui_spotify) == set(names_ui_combined), "combined contains playlists from apple and spotify", ) self.comparison_page.select_market_from_dd(self.bulgaria.name) self.comparison_page.open_playlist_details() self.comparison_page.empty_playlist_support_displayed() self.comparison_page.playlist_details_is_header_displayed() for dsp in self.dsp_values_support: self.comparison_page.playlist_details_select_dsp_from_dd(dsp) header_displayed = self.comparison_page.playlist_details_is_header_displayed() self.comparison_page.is_icon_displayed("support") self.comparison_page.empty_playlist_support_displayed() current_timeline = self.comparison_page.get_playlist_details_timeline() self.ts.markFinal(header_displayed, "STEP 8-9: empty playlist support section is displayed") self.ts.markFinal(current_timeline == self.period_28_days.timeline, "timeline is displayed for 28 days")