import datetime 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 app.mysql_db_client_custom import MySqlClient from ...pages.add_track_popup import AddTrackPopup from ...pages.audience_graph import AudienceGraphChart 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): track3 = json.loads(json.dumps(AppConfig.get("track3")), object_hook=lambda d: Namespace(**d)) us = json.loads(json.dumps(AppConfig.get("market")["us"]), object_hook=lambda d: Namespace(**d)) @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.audience_graph = AudienceGraphChart(self.driver) self.api_client = ApiClient() self.sql_client = MySqlClient() self.ts = TestStatus(self.driver) @allure.story("AP-1764") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Track release date on the track card is match release date on the corresponding track page""") @allure.description( """TC verifies that release date on the track card is totally match release date on the corresponding track page. Release on the track page is got from the Spotify api. Sometimes release date and first streaming data are the same, but track can have first got streaming data before release data. It’s important to displayed precisely release date on both track page and track card. """ ) def test_track_release_date_match(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) for track in [self.track3]: self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=track.isrc, id=track.id) self.loginPage.login_with_worker() self.loginPage.is_logged_in() self.left_panel.open_comparison_page() self.comparison_page.wait_for_stream_performance_graph_visible() self.trackPage.select_market(self.us.name) self.comparison_page.select_market_from_dd(self.us.name) self.comparison_page.select_period_from_dd(AppConfig.get("periods")["28d"]["name"]) first_date_api = self.comparison_page.get_api_first_date_all_dsp(isrc=self.track3.isrc) release_date_ct = self.comparison_page.get_release_date_with_track_index(1) # step 2-3 assert_that(release_date_ct).is_equal_to(datetime.datetime.strptime(self.track3.dates.release, "%Y-%m-%d").date()) self.comparison_page.open_track_page_from_track_card(self.track3) release_date_tp = self.trackPage.get_release_date() self.ts.markFinal( first_date_api == datetime.datetime.strptime(self.track3.dates.f_date, "%Y-%m-%d").date(), "STEP 1: first date from api is correct: {}, expected: {}".format(first_date_api, datetime.datetime.strptime(self.track3.dates.f_date, "%Y-%m-%d").date()), ) self.ts.markFinal(release_date_ct == release_date_tp, "STEP 4-5 release date on track page is: {}".format(release_date_tp))