class Close(BasePage): def __init__(self, driver: WebDriver): """ Close NCR E2E Actions """ super().__init__(driver) self.login_page = LoginPage(self._driver) self.home_page = HomePage(self._driver) self.close_requests = CloseRequests(self._driver) self.create_requests = CreateRequests(self.close_requests._driver) def closeRequest(self): # Login to the Page self.login_page.enter_username_textbox() self.login_page.enter_password_textbox() self.login_page.click_login_button() # Parse all the change number from home page all_changes_list = self.home_page.get_all_change_numbers() # Parse all the closing change request shared by user user_list_for_close = make_data.list_of_change( StaticData.CLOSE_CHANGE_TXT_FILE_PATH) tasks = len(user_list_for_close) ClosePrettify.make_layout() ClosePrettify.make_table() my_progress = ClosePrettify.progress_bar(tasks) ClosePrettify.merge_layout(my_progress, ClosePrettify.get_table()) print(user_list_for_close) # Iterate through each user shared Change Number with Live(ClosePrettify.get_layout(), refresh_per_second=5, vertical_overflow="visible") as live: for job in my_progress.tasks: for _index, a_change in enumerate(user_list_for_close): if a_change in all_changes_list: # get the Index number for the change calculated by algorithm get_index_for_change() index = self.close_requests.get_index_for_change_number( a_change, all_changes_list) if index is not None: # Select the change request shared by user self.close_requests.find_the_change_request( a_change, index) if not self.close_requests.is_change_status_closed( ): # check if Change is opened if not self.close_requests.is_status_scheduled_for_approval( ): # check if Change is Scheduled for approval actual_open_time = self.close_requests.get_actual_start_date( ) if actual_open_time is not None: # make closing time depending on Actual Open Time # actual_closing_time = make_data.make_downtime_from_open_time( # actual_open_time) # Grab the current sys time current_sys_time = make_data.get_current_system_time( ) self.close_requests.goto_task_page() # Close the 2nd task self.close_requests.close_service_downtime_duration_task( actual_open_time) # Close the 3rd task self.close_requests.close_service_downtime_window_task( actual_open_time, current_sys_time) # Close the 4th task self.close_requests.close_system_downtime_duration_task( actual_open_time) self.create_requests.go_back_to_homepage( ) ClosePrettify.add_row_table( str(_index + 1), self.close_requests. get_change_number(), "[green]SUCCESS") live.update(ClosePrettify.get_layout()) else: self.close_requests.add_change_to_invalid_list( a_change) self.create_requests.go_back_to_homepage( ) ClosePrettify.add_row_table( str(_index + 1), self.close_requests. get_change_number(), "[red]NCR NOT OPENED") live.update(ClosePrettify.get_layout()) else: self.close_requests.add_change_to_invalid_list( a_change) self.create_requests.go_back_to_homepage() ClosePrettify.add_row_table( str(_index + 1), self.close_requests.get_change_number( ), "[red]SFA") live.update(ClosePrettify.get_layout()) else: self.create_requests.go_back_to_homepage() ClosePrettify.add_row_table( str(_index + 1), self.close_requests.get_change_number(), "[red]AC") live.update(ClosePrettify.get_layout()) else: self.close_requests.add_change_to_invalid_list( a_change) ClosePrettify.add_row_table( str(_index + 1), self.close_requests.get_change_number(), "[red]INVALID") live.update(ClosePrettify.get_layout()) else: self.close_requests.add_change_to_invalid_list( a_change) ClosePrettify.add_row_table( str(_index + 1), self.close_requests.get_change_number(), "[red]INVALID") live.update(ClosePrettify.get_layout()) if not job.finished: my_progress.advance(job.id) self.home_page.click_logout_button()
class Cancel(BasePage): def __init__(self, driver: WebDriver): """ Cancel NCR E2E Actions """ super().__init__(driver) self.login_page = LoginPage(self._driver) self.home_page = HomePage(self.login_page._driver) self.closeRequest = CloseRequests(self.home_page._driver) self.cancel_requests = CancelRequests(self.closeRequest._driver) self.create_requests = CreateRequests(self.closeRequest._driver) def cancelRequest(self): """ All the functionalities in one function to mimic a user interactions to cancel a Change Request""" # Log in to the server self.login_page.enter_username_textbox() self.login_page.enter_password_textbox() self.login_page.click_login_button() # Parse all the change numbers from the home page all_changes_web = self.home_page.get_all_change_numbers() # Parse all the user requested change number from the source all_changes_file = make_data.list_of_change( StaticData.CANCEL_CHANGE_TXT_FILE_PATH) # Prettify tables CancelPrettify.make_layout() CancelPrettify.make_table() progress = CancelPrettify.progress_bar(len(all_changes_file)) CancelPrettify.merge_layout(progress, CancelPrettify.get_table()) with Live(CancelPrettify.show_layout(), refresh_per_second=5, vertical_overflow="visible") as live: while not progress.finished: for task in progress.tasks: for _task_no, a_change in enumerate(all_changes_file): # find the index of the change number from the list (custom algorithm is used). # Searching an element time complexity is O(1) index = self.closeRequest.get_index_for_change_number( a_change, all_changes_web) if index is not None: # select the change number after found self.closeRequest.find_the_change_request( a_change, index) if not self.closeRequest.is_change_status_closed(): if not self.closeRequest.is_status_scheduled_for_approval( ): if not self.cancel_requests.is_change_request_opened( ): if not self.cancel_requests.is_cancelled( ): # Perform the user interactions to cancel self.cancel_requests.wait_for_loading_icon_disappear( ) self.cancel_requests.select_cancel( ) self.cancel_requests.save_status() # // Cancelled // CancelPrettify.add_row_table( str(_task_no + 1), self.cancel_requests. get_cancelled_cr_number(), "CANCELLED") live.update( CancelPrettify.show_layout()) self.create_requests.go_back_to_homepage( ) else: # // Already Closed // CancelPrettify.add_row_table( str(_task_no + 1), self.cancel_requests. get_cancelled_cr_number(), "A/C", style="yellow") live.update( CancelPrettify.show_layout()) self.create_requests.go_back_to_homepage( ) else: # // Already Opened // CancelPrettify.add_row_table( str(_task_no + 1), self.cancel_requests. get_cancelled_cr_number(), "A/O", style="red") live.update( CancelPrettify.show_layout()) self.create_requests.go_back_to_homepage( ) else: # // Scheduled for Approval CancelPrettify.add_row_table( str(_task_no + 1), self.cancel_requests. get_cancelled_cr_number(), "S/F/A") live.update(CancelPrettify.show_layout()) self.create_requests.go_back_to_homepage() else: # // Already Closed or Completed CancelPrettify.add_row_table( str(_task_no + 1), self.cancel_requests. get_cancelled_cr_number(), "Closed/Completed") live.update(CancelPrettify.show_layout()) self.create_requests.go_back_to_homepage() if not task.finished: progress.advance(task.id) self.home_page.click_logout_button()