import datetime import json import unittest from argparse import Namespace import allure import pytest 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): track35 = json.loads(json.dumps(AppConfig.get("track35")), object_hook=lambda d: Namespace(**d)) track36 = json.loads(json.dumps(AppConfig.get("track36")), object_hook=lambda d: Namespace(**d)) us = json.loads(json.dumps(AppConfig.get("market")["us"]), object_hook=lambda d: Namespace(**d)) australia = json.loads(json.dumps(AppConfig.get("market")["australia"]), 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-1765") @allure.severity(allure.severity_level.NORMAL) @allure.title("""Track release date of synonyms""") @allure.description( """Track with the same ISRC number can have a lot of synonyms with different release dates. TC verifies that the release date on the track card totally matches the release date on the corresponding track page. """ ) def test_track_release_date_synonyms(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.track35]: 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.trackPage.select_market(self.us.name) first_date_api = self.comparison_page.get_api_first_date_all_dsp(isrc=self.track35.isrc) release_date_ct = self.comparison_page.get_release_date_with_track_index(1) self.comparison_page.open_track_page_from_track_card(self.track35) release_date_tp = self.trackPage.get_release_date() self.ts.markFinal( first_date_api == datetime.datetime.strptime(self.track35.dates.f_date, "%Y-%m-%d").date(), "STEP 1: first date from api is correct: {}, expected: {}".format(first_date_api, datetime.datetime.strptime(self.track35.dates.f_date, "%Y-%m-%d").date()), ) self.ts.markFinal( release_date_ct == datetime.datetime.strptime(self.track35.dates.release, "%Y-%m-%d").date(), "STEP 2-3: release date on comparison tool is: {}".format(release_date_ct), ) self.ts.markFinal(release_date_ct == release_date_tp, "STEP 4-5: release date on track page is: {}".format(release_date_tp)) self.comparison_page.remove_tracks_if_present_with_worker(self.us.market) for track in [self.track36]: self.api_client.add_track_to_comparison(token=token, market=self.us.market, isrc=track.isrc, id=track.id) self.left_panel.open_comparison_page() self.trackPage.select_market(self.australia.name) release_date_ct = self.comparison_page.get_release_date_with_track_index(1) self.comparison_page.open_track_page_from_track_card(self.track36) release_date_tp = self.trackPage.get_release_date() self.ts.markFinal( release_date_ct == datetime.datetime.strptime(self.track36.dates.release, "%Y-%m-%d").date(), "STEP 6-9: release date on comparison tool is: {}".format(release_date_ct), ) self.ts.markFinal(release_date_ct == release_date_tp, "STEP 10-11: release date on track page is: {}".format(release_date_tp))