From 5f0b5c23b64a95589d9571cc6559e9cc811d25a7 Mon Sep 17 00:00:00 2001 From: amolpati30 Date: Wed, 15 May 2024 12:36:57 +0530 Subject: [PATCH] updated airgun entities and views for hostgroup and how_new --- airgun/entities/host_new.py | 97 ++++++++++++++++++------------------ airgun/entities/hostgroup.py | 4 +- airgun/views/hostgroup.py | 9 ++-- 3 files changed, 54 insertions(+), 56 deletions(-) diff --git a/airgun/entities/host_new.py b/airgun/entities/host_new.py index 3a6fdc269..6fa1e7c57 100644 --- a/airgun/entities/host_new.py +++ b/airgun/entities/host_new.py @@ -26,6 +26,7 @@ class NewHostEntity(HostEntity): + def create(self, values): """Create new host entity""" view = self.navigate_to(self, 'New') @@ -48,69 +49,69 @@ def get_details(self, entity_name, widget_names=None): view.read(widget_names=widget_names) return view.read(widget_names=widget_names) - def assign_role_to_hostgroup(self, entity_name): - view = self.navigate_to(self, 'NewDetails', entity_name=entity_name) - view.wait_displayed() - self.browser.plugin.ensure_page_safe() - view.overview.details.edit.click() - self.browser.switch_to_window(self.browser.window_handles[1]) + def _decorator(func): + def common_setup(self, entity_name=None, role_name=None): + view = self.navigate_to(self, 'NewDetails', entity_name=entity_name, role=role_name) + view.wait_displayed() + self.browser.plugin.ensure_page_safe() + view.overview.details.edit.click() + self.browser.switch_to_window(self.browser.window_handles[1]) + hostgrp_view = HostGroupEditView(self.browser) + func(self, entity_name, role_name) + hostgrp_view.ansible_roles.submit.click() + self.browser.switch_to_window(self.browser.window_handles[0]) + self.browser.close_window(self.browser.window_handles[1]) + + return common_setup + + @_decorator + def assign_role_to_hostgroup(self, entity_name, role_name): + """Assign a single Ansible role from the host group based on user input + + Args: + entity_name: Name of the host + role_name: Name of the ansible role + """ hostgrp_view = HostGroupEditView(self.browser) hostgrp_view.ansible_roles.more_item.click() hostgrp_view.ansible_roles.select_pages.click() - assign_role = hostgrp_view.ansible_roles.available_role.read().split(". ") - if assign_role[1] == 'RedHatInsights.insights-client': - hostgrp_view.ansible_roles.available_role.click() - hostgrp_view.ansible_roles.submit.click() - self.browser.switch_to_window(self.browser.window_handles[0]) - self.browser.close_window(self.browser.window_handles[1]) + role_list = self.browser.elements(hostgrp_view.ansible_roles.available_role, parent=self) + for single_role in role_list[1:]: + if single_role.text.split(". ")[1] == role_name: + single_role.click() - def remove_hostgroup_role(self, entity_name): - view = self.navigate_to(self, 'NewDetails', entity_name=entity_name) - view.wait_displayed() - self.browser.plugin.ensure_page_safe() - view.overview.details.edit.click() - self.browser.switch_to_window(self.browser.window_handles[1]) - hostgrp_view = HostGroupEditView(self.browser) - assign_role = hostgrp_view.ansible_roles.assigned_role.read().split(". ") - if assign_role[1] == 'RedHatInsights.insights-client': - hostgrp_view.ansible_roles.assigned_role.click() - hostgrp_view.ansible_roles.submit.click() - self.browser.switch_to_window(self.browser.window_handles[0]) - self.browser.close_window(self.browser.window_handles[1]) + @_decorator + def remove_hostgroup_role(self, entity_name, role_name): + """Remove a single Ansible role from the host group based on user input - def assign_all_role_to_hostgroup(self, entity_name): - view = self.navigate_to(self, 'NewDetails', entity_name=entity_name) - view.wait_displayed() - self.browser.plugin.ensure_page_safe() - view.overview.details.edit.click() - self.browser.switch_to_window(self.browser.window_handles[-1]) - self.browser.plugin.ensure_page_safe() + Args: + entity_name: Name of the host + role_name: Name of the ansible role + """ + hostgrp_view = HostGroupEditView(self.browser) + role_list = self.browser.elements(hostgrp_view.ansible_roles.assigned_role, parent=self) + for single_role in role_list[1:]: + if single_role.text.split(". ")[1] == role_name: + single_role.click() + + @_decorator + def assign_all_role_to_hostgroup(self, entity_name, role_name=None): + """Assign all Ansible roles from the host group""" hostgrp_view = HostGroupEditView(self.browser) hostgrp_view.ansible_roles.more_item.click() hostgrp_view.ansible_roles.select_pages.click() - available_ansible_role = '//div[@class="available-roles-container col-sm-6"]/div[2]/div' - role_list = self.browser.selenium.find_elements("xpath", available_ansible_role) + role_list = self.browser.elements(hostgrp_view.ansible_roles.available_role, parent=self) for single_role in role_list: single_role.click() - hostgrp_view.ansible_roles.submit.click() - self.browser.switch_to_window(self.browser.window_handles[0]) - self.browser.close_window(self.browser.window_handles[-1]) - def remove_all_role_from_hostgroup(self, entity_name): - view = self.navigate_to(self, 'NewDetails', entity_name=entity_name) - view.wait_displayed() - self.browser.plugin.ensure_page_safe() - view.overview.details.edit.click() - self.browser.switch_to_window(self.browser.window_handles[1]) + @_decorator + def remove_all_role_from_hostgroup(self, entity_name, role_name=None): + """Remove all Ansible roles from the host group""" hostgrp_view = HostGroupEditView(self.browser) hostgrp_view.ansible_roles.click() - assigned_ansible_role = '//div[@class="assigned-roles-container col-sm-6"]/div[2]/div' - role_list = self.browser.selenium.find_elements("xpath", assigned_ansible_role) + role_list = self.browser.elements(hostgrp_view.ansible_roles.assigned_role, parent=self) for single_role in role_list: single_role.click() - hostgrp_view.ansible_roles.submit.click() - self.browser.switch_to_window(self.browser.window_handles[0]) - self.browser.close_window(self.browser.window_handles[1]) def get_host_statuses(self, entity_name): """Read host statuses from Host Details page diff --git a/airgun/entities/hostgroup.py b/airgun/entities/hostgroup.py index d984f4276..72362890f 100644 --- a/airgun/entities/hostgroup.py +++ b/airgun/entities/hostgroup.py @@ -67,10 +67,10 @@ def update(self, entity_name, values): view.flash.dismiss() def total_no_of_assigned_role(self, entity_name): + """Count of assigned role to the host group""" view = self.navigate_to(self, 'Edit', entity_name=entity_name) view.ansible_roles.click() - assigned_ansible_role = '//div[@class="assigned-roles-container col-sm-6"]/div[2]/div' - role_list = self.browser.selenium.find_elements("xpath", assigned_ansible_role) + role_list = self.browser.elements(view.ansible_roles.assigned_ansible_role, parent=self) wait_for(lambda: int(role_list[-1].text.split(". ")[0]), timeout=30) return int(role_list[-1].text.split(". ")[0]) diff --git a/airgun/views/hostgroup.py b/airgun/views/hostgroup.py index 4cfc5485f..f2125ff49 100644 --- a/airgun/views/hostgroup.py +++ b/airgun/views/hostgroup.py @@ -152,11 +152,8 @@ class ansible_roles(SatTab): TAB_NAME = 'Ansible Roles' more_item = Text('//span[@class="pf-c-options-menu__toggle-button-icon"]') select_pages = Text('//ul[@class="pf-c-options-menu__menu"]/li[6]/button') - available_role = Text( - '//div[@class="available-roles-container col-sm-6"]/div[2]//div[contains(text(), "RedHatInsights.insights-client")]' - ) - assigned_role = Text( - '//div[@class="assigned-roles-container col-sm-6"]/div[2]//div[contains(text(), "RedHatInsights.insights-client")]' - ) + available_role = '//div[@class="available-roles-container col-sm-6"]/div[2]/div' + assigned_role = '//div[@class="assigned-roles-container col-sm-6"]/div[2]/div' + assigned_ansible_role = '//div[@class="assigned-roles-container col-sm-6"]/div[2]/div' no_of_available_role = Text('//span[@class="pf-c-options-menu__toggle-text"]//b[2]') submit = Text('//input[@name="commit"]')