import datetime import unittest import allure import pytest from parameterized import parameterized from ui_automation_framework.core import TestStatus from ui_automation_framework.utils import AppConfig from app.api_client import ApiClient from app.src.pages.global_track_priorities_page import GlobalTrackPrioritiesPage from app.src.pages.login_page import LoginPage from app.src.pages.top_charts_page import TopChartsPage from app.src.pages.track_page import TrackPage from app.src.pages.tt_dashboard_page import TTDashboardPage @pytest.mark.usefixtures("set_up", "one_time_set_up") class TTDashboardPageTest(unittest.TestCase): expected_min_date = "2021-03-18" @pytest.fixture(autouse=True) def classSetup(self): self.loginPage = LoginPage(self.driver) self.tt_dashboard = TTDashboardPage(self.driver) self.trackPage = TrackPage(self.driver) self.topChartsPage = TopChartsPage(self.driver) self.gtp = GlobalTrackPrioritiesPage(self.driver) self.api_client = ApiClient() self.ts = TestStatus(self.driver) @parameterized.expand([("by-creations", "7days"), ("by-creations", "daily"), ("by-creations-change", "7days"), ("by-creations-change", "daily")]) @allure.story("AP-7493") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-6908][TT Dashboard> By Creations Change Daily] Date picker view verification.") @allure.description("""TC verifies datepicker behaviour for the TikTok Dashboard Page. STEPS 1-23""") def test_tt_dashboard_datepicker_1_23(self, tab, view): self.loginPage.login_with_worker() self.trackPage.select_market(AppConfig.get("market")["us"]["name"]) self.tt_dashboard.open() self.tt_dashboard.select_tab(tab) self.tt_dashboard.select_view(view) # step 1-3, 6 api_tt_date = self.api_client.get_tiktok_top_tracks()["items"][0]["metrics"]["date"] self.gtp.verify_collapsed_datepicker(expected_selected_date=api_tt_date, location="tt_dashboard") # step 4, 20 self.gtp.expand_datepicker() self.trackPage.verify_trending_datepicker_last_available_date(date=api_tt_date) self.gtp.datepicker_swipe_to_date(date=self.expected_min_date) self.trackPage.verify_trending_datepicker_first_available_date(date=self.expected_min_date) # step 5 self.tt_dashboard.verify_datepicker_clock_icon(tooltip_date=api_tt_date) # step 7-11 self.gtp.reset_datepicker(expected_default_date=api_tt_date) self.gtp.expand_datepicker() self.trackPage.trending_datepicker_grid_verification(grid_date=api_tt_date) # step 12-13, 23 self.gtp.reset_datepicker(expected_default_date=api_tt_date) # step 14-16 default_date = datetime.datetime.strptime(api_tt_date, "%Y-%m-%d").date() date_to_select = default_date - datetime.timedelta(days=1) self.gtp.select_date_from_datepicker_grid(date=str(date_to_select), location="tt_dashboard") self.gtp.verify_datepicker_grid_selected_date(expected_selected_date=str(date_to_select)) self.topChartsPage.verify_trending_datepicker_last_available_date_color(date=api_tt_date) # step 17-19 self.trackPage.verify_trending_datepicker_arrows_background() self.gtp.verify_datepicker_swiping_to_unavailable_date(date=self.expected_min_date, swipe="backward", year_month="year") self.gtp.verify_datepicker_swiping_to_unavailable_date(date=self.expected_min_date, swipe="forward", year_month="year") self.gtp.verify_datepicker_swiping_to_unavailable_date(date=self.expected_min_date, swipe="backward", year_month="month") self.gtp.verify_datepicker_swiping_to_unavailable_date(date=self.expected_min_date, swipe="forward", year_month="month") # step 21 self.gtp.reset_datepicker(expected_default_date=api_tt_date) date_to_select = default_date - datetime.timedelta(days=2) self.gtp.enter_datepicker_date_manually(date=str(date_to_select), location="tt_dashboard", apply_by="outside") # step 22 date_to_select = default_date - datetime.timedelta(days=3) self.gtp.enter_datepicker_date_manually(date=str(date_to_select), location="tt_dashboard") @allure.story("AP-7493") @allure.severity(allure.severity_level.NORMAL) @allure.title("[AP-6908][TT Dashboard> By Creations Change Daily] Date picker view verification.") @allure.description("""TC verifies datepicker behaviour for the TikTok Dashboard Page. STEPS 24-26""") def test_tt_dashboard_datepicker_24_26(self): self.loginPage.login_with_worker() self.trackPage.select_market(AppConfig.get("market")["us"]["name"]) self.tt_dashboard.open() api_tt_date = self.api_client.get_tiktok_top_tracks()["items"][0]["metrics"]["date"] default_date = datetime.datetime.strptime(api_tt_date, "%Y-%m-%d").date() date_to_select = default_date - datetime.timedelta(days=1) self.gtp.enter_datepicker_date_manually(date=str(date_to_select), location="tt_dashboard") # step 24 for view in [self.tt_dashboard.days7, self.tt_dashboard.daily]: self.tt_dashboard.select_view(view) self.tt_dashboard.verify_selected_view(view) self.gtp.verify_collapsed_datepicker(expected_selected_date=str(date_to_select), location="tt_dashboard") self.gtp.expand_datepicker() self.gtp.reset_datepicker(expected_default_date=api_tt_date) # step 25 for tab in [self.tt_dashboard.by_creations, self.tt_dashboard.by_creations_change]: date_to_select = default_date - datetime.timedelta(days=4) self.gtp.enter_datepicker_date_manually(date=str(date_to_select), location="tt_dashboard") self.tt_dashboard.select_tab(tab) self.tt_dashboard.verify_selected_tab(tab) self.gtp.verify_collapsed_datepicker(expected_selected_date=api_tt_date, location="tt_dashboard") # step 26 self.gtp.enter_datepicker_date_manually(date=str(date_to_select), location="tt_dashboard") self.trackPage.select_market(AppConfig.get("market")["australia"]["name"]) self.tt_dashboard.verify_selected_tab(self.tt_dashboard.by_creations_change) self.tt_dashboard.verify_selected_view(self.tt_dashboard.daily) self.gtp.verify_collapsed_datepicker(expected_selected_date=api_tt_date, location="tt_dashboard")