from widgetastic.widget import Text
from widgetastic_patternfly import Button, Input, BootstrapSelect
from widgetastic.exceptions import NoSuchElementException
from navmazing import NavigateToAttribute, NavigateToSibling
from utils.update import Updateable
from utils.pretty import Pretty
from utils.appliance import Navigatable
from utils.appliance.implementations.ui import navigator, CFMENavigateStep, navigate_to
from cfme.base import Server
from . import ServicesCatalogView
[docs]class ServiceCatalogsView(ServicesCatalogView):
title = Text("#explorer_title_text")
@property
def is_displayed(self):
return (
self.in_explorer and
self.title.text == 'All Services' and
self.service_catalogs.is_opened and
self.service_catalogs.tree.currently_selected == ["All Services"])
[docs]class ServiceCatalogsDefaultView(ServicesCatalogView):
title = Text("#explorer_title_text")
@property
def is_displayed(self):
return (
self.in_explorer and
self.title.text == 'All Services' and
self.service_catalogs.is_opened)
[docs]class DetailsServiceCatalogView(ServicesCatalogView):
title = Text("#explorer_title_text")
order_button = Button("Order")
@property
def is_displayed(self):
return (
self.in_explorer and self.service_catalogs.is_opened and
self.title.text == 'Service "{}"'.format(self.context['object'].name)
)
[docs]class OrderServiceCatalogView(OrderForm):
submit_button = Button('Submit')
@property
def is_displayed(self):
return (
self.in_explorer and self.service_catalogs.is_opened and
self.title.text == 'Order Service "{}"'.format(self.context['object'].name)
)
[docs]class ServiceCatalogs(Updateable, Pretty, Navigatable):
def __init__(self, catalog=None, name=None, stack_data=None,
dialog_values=None, ansible_dialog_values=None, appliance=None):
Navigatable.__init__(self, appliance=appliance)
self.catalog = catalog
self.name = name
self.stack_data = stack_data
self.dialog_values = dialog_values
self.ansible_dialog_values = ansible_dialog_values
[docs] def order(self):
view = navigate_to(self, 'Order')
if self.stack_data:
view.fill(self.stack_data)
if self.dialog_values:
view.fill(self.dialog_values)
if self.ansible_dialog_values:
view.fill(self.ansible_dialog_values)
view.submit_button.click()
# Request page is displayed after this hence not asserting for view
view.flash.assert_success_message("Order Request was Submitted")
@navigator.register(Server)
[docs]class ServiceCatalogsDefault(CFMENavigateStep):
VIEW = ServiceCatalogsDefaultView
prerequisite = NavigateToAttribute('appliance.server', 'LoggedIn')
[docs] def step(self):
self.prerequisite_view.navigation.select('Services', 'Catalogs')
@navigator.register(ServiceCatalogs, 'All')
[docs]class ServiceCatalogsAll(CFMENavigateStep):
VIEW = ServiceCatalogsView
prerequisite = NavigateToAttribute('appliance.server', 'LoggedIn')
[docs] def step(self):
self.prerequisite_view.navigation.select('Services', 'Catalogs')
self.view.service_catalogs.tree.click_path("All Services")
@navigator.register(ServiceCatalogs, 'Details')
[docs]class ServiceCatalogDetails(CFMENavigateStep):
VIEW = DetailsServiceCatalogView
prerequisite = NavigateToSibling('All')
[docs] def step(self):
try:
self.prerequisite_view.service_catalogs.tree.click_path("All Services",
self.obj.catalog.name, self.obj.name)
except:
raise NoSuchElementException()
@navigator.register(ServiceCatalogs, 'Order')
[docs]class ServiceCatalogOrder(CFMENavigateStep):
VIEW = OrderServiceCatalogView
prerequisite = NavigateToSibling('Details')
[docs] def step(self):
self.prerequisite_view.order_button.click()