import unittest import allure import pytest from assertpy import assert_that from parameterized import parameterized from ui_automation_framework.core import TestStatus from ui_automation_framework.utils import AppConfig, CoreConfig from app.api_client import ApiClient from app.src.pages.album_page import AlbumPage from app.src.pages.apple_playlist_page import ApplePlaylistPage from app.src.pages.comparison_page import TrackComparisonPage from app.src.pages.left_navigation_panel import LeftNavigationPanel from app.src.pages.login_page import LoginPage from app.src.pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up") class DeepLinkingTrackPageTest(unittest.TestCase): values_exp = ["8,275,438", "266,950", "544,228\n(6.6%)", "17,556", "2,805,646\n(33.9%)", "90,505", "4,925,564\n(59.5%)", "158,889"] @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.tp = TrackPage(self.driver) self.ap = AlbumPage(self.driver) self.app = ApplePlaylistPage(self.driver) self.cp = TrackComparisonPage(self.driver) self.leftPanel = LeftNavigationPanel(self.driver) self.api_client = ApiClient() self.ts = TestStatus(self.driver) @allure.story("AP-4640") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-4598] Amazon. 'By Tier' graph verification STEPS 1-11") @allure.description( """TC verifies that user can see ‘By Tier’ graph for Amazon DSP that represents streams data broken down by the user’s license type. STEPS 1-11""" ) def test_by_tier_amazon_steps_1_11(self): self.loginPage.login_with_worker() self.tp.open_spotify_track_page_with_market_id(track_id=AppConfig.get("track40")["id"], market_id=AppConfig.get("market")["us"]["url"]) # step 1 self.tp.select_dsp(AppConfig.get("dsp")["amazon"]) self.tp.change_source_type(self.tp.dd_by_tier) self.tp.verify_graph_view(view=self.tp.graph_by_tier) self.tp.verify_tier_dd_current() self.tp.verify_graph_view(view=self.tp.graph_line_graph) # step 2 self.tp.graph_verify_legend(view=self.tp.graph_by_tier) # step 3 legend_before = self.tp.graph_amazon_get_totals() self.tp.open_current_url_with_param("&str_gr_start_date=2020-10-01&str_gr_end_date=2020-10-31") legend_after = self.tp.graph_amazon_get_totals() assert_that(legend_before).is_not_equal_to(legend_after) # step 4, 6-8 assert_that(legend_after).is_equal_to(self.values_exp) # step 9 self.tp.verify_source_type_droplist_and_footnote(all=False) # step 10 tooltip = self.tp.graph_get_tooltips()[0] assert_that(tooltip).contains("Prime\nAd-Supported\nUnlimited") # step 11 totals = self.tp.graph_get_tooltip_totals()[0]["values"] assert_that(totals[-1]).is_equal_to(sum(totals[:-1])) # step 5 self.tp.change_source_type(AppConfig.get("source")["all_streams"]) total_all = self.tp.graph_amazon_get_totals() assert_that(legend_after[0]).is_equal_to(total_all[2].split("\n")[0]) assert_that(legend_after[1]).is_equal_to(total_all[3]) @allure.story("AP-4640") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-4598] Amazon. 'By Tier' graph verification STEPS 14-25") @allure.description( """TC verifies that user can see ‘By Tier’ graph for Amazon DSP that represents streams data broken down by the user’s license type. STEPS 14-25""" ) def test_by_tier_amazon_steps_14_25(self): self.loginPage.login_with_worker() self.tp.open_spotify_track_page_with_market_id(track_id=AppConfig.get("track40")["id"], market_id=AppConfig.get("market")["us"]["url"]) self.tp.select_dsp(AppConfig.get("dsp")["amazon"]) self.tp.change_source_type(self.tp.dd_by_tier) # step 14-16 self.tp.export_to_file_amazon(market_def=AppConfig.get("market")["us"]["market"], source=self.tp.graph_by_tier) # step 17 self.tp.verify_tiers_dd_options() # step 23 for o in self.tp.tier_options[1:]: # step 18 self.tp.choose_tier_options([o]) # step 19 self.tp.verify_tier_dd_current(o) # step 20 self.tp.tier_dd_verify_option_sorting([o]) # step 21 self.tp.graph_verify_legend_by_tier([o]) # step 22 tooltip = self.tp.graph_get_tooltips()[0] not_in_tooltip = self.tp.tier_options.copy() not_in_tooltip.remove(o) assert_that(tooltip).contains(o) assert_that(not_in_tooltip).is_not_in(tooltip) # step 24 legend_before = self.tp.graph_amazon_get_totals() self.tp.choose_tier_options([self.tp.tier_options[1], self.tp.tier_options[2]], apply=False) self.tp.click_on_title() legend_after1 = self.tp.graph_amazon_get_totals() assert_that(legend_before).is_equal_to(legend_after1) # step 25 self.tp.expand_tier_dd() self.tp.tier_dd_uncheck_all() legend_after2 = self.tp.graph_amazon_get_totals() assert_that(legend_after1).is_equal_to(legend_after2) @parameterized.expand( [ [("Prime", "Unlimited")], [("Ad-Supported", "Unlimited")], [("Ad-Supported", "Prime")], ] ) @allure.story("AP-4640") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-4598] Amazon. 'By Tier' graph verification STEPS 26-32") @allure.description( """TC verifies that user can see ‘By Tier’ graph for Amazon DSP that represents streams data broken down by the user’s license type. STEPS 26-32""" ) def test_by_tier_amazon_steps_26_32(self, option): self.loginPage.login_with_worker() self.tp.open_spotify_track_page_with_market_id(track_id=AppConfig.get("track40")["id"], market_id=AppConfig.get("market")["us"]["url"]) self.tp.select_dsp(AppConfig.get("dsp")["amazon"]) self.tp.change_source_type(self.tp.dd_by_tier) # step 27-32 self.tp.choose_tier_options(option) self.tp.verify_tier_dd_current("2 Tiers") tooltip = self.tp.graph_get_tooltips()[0] # step 28 self.tp.verify_tier_hint(option) # step 29 self.tp.tier_dd_verify_option_sorting(list(option)) # step 30 self.tp.graph_verify_legend_by_tier(option) # step 31 not_in_tooltip = self.tp.tier_options.copy() for i in option: not_in_tooltip.remove(i) for i in option: assert_that(tooltip).contains(i) assert_that(not_in_tooltip).is_not_in(tooltip) @allure.story("AP-4640") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-4598] Amazon. 'By Tier' graph verification STEPS 33-34") @allure.description( """TC verifies that user can see ‘By Tier’ graph for Amazon DSP that represents streams data broken down by the user’s license type. STEPS 33-34""" ) def test_by_tier_amazon_steps_33_34(self): self.loginPage.login_with_worker() date = "2021-01-16" api_resp = self.api_client.get_amazon_tracks(isrc=AppConfig.get("track40")["isrc"], start_date=date, end_date=date) # step 33-34 for m in [AppConfig.get("market")["us"], AppConfig.get("market")["global"]]: self.tp.open_url(f"{CoreConfig.ENV_BASE_URL}/spotify/track/{AppConfig.get('track40')['id']}?market={m['url']}&str_gr_dsp=3&str_gr_view=1&str_gr_type=4&str_gr_start_date={date}&str_gr_end_date={date}") resp = self.get_resp_for_market(response=api_resp, market=m["api"])["tier_level"] values_api = [resp["adsupported"], resp["prime"], resp["musicunlimited"]] totals_ui = self.tp.graph_amazon_get_totals() totals_ui = [totals_ui[2], totals_ui[4], totals_ui[6]] values_ui = [int(t.split("\n")[0].replace(",", "")) for t in totals_ui] assert_that(values_api).is_equal_to(values_ui) @allure.step("GET market values from amazon tracks response") def get_resp_for_market(self, response, market): market_resp = "" for r in response["items"]: if r["country_code"] == market: market_resp = r return market_resp # NOT AUTOMATED - STEPS 12, 13, 18, 26