from navmazing import NavigateToAttribute, NavigateToSibling
from widgetastic.exceptions import NoSuchElementException
from widgetastic.utils import ParametrizedString, VersionPick
from widgetastic.widget import ParametrizedView, Text, View, Select
from widgetastic_patternfly import Button, Input, BootstrapSelect
from cfme.base import Server
from cfme.base.login import BaseLoggedInPage
from cfme.services.requests import RequestsView
from cfme.services.service_catalogs import ServiceCatalogs
from cfme.utils.appliance import MiqImplementationContext
from cfme.utils.appliance.implementations.ui import navigator, CFMENavigateStep, navigate_to, ViaUI
from cfme.utils.blockers import BZ
from cfme.utils.version import Version
from cfme.utils.wait import wait_for
from widgetastic_manageiq import Accordion, ManageIQTree, DialogFieldDropDownList
[docs]class ServicesCatalogView(BaseLoggedInPage):
@property
def in_service_catalogs(self):
return (
self.logged_in_as_current_user and
self.navigation.currently_selected == ['Services', 'Catalogs'])
@property
def is_displayed(self):
return (
self.in_service_catalogs and
self.configuration.is_displayed and
not self.catalogs.is_dimmed)
@View.nested
class service_catalogs(Accordion): # noqa
ACCORDION_NAME = "Service Catalogs"
tree = ManageIQTree()
[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)
)
@MiqImplementationContext.external_for(ServiceCatalogs.order, ViaUI)
[docs]def order(self):
view = navigate_to(self, 'Order')
wait_for(lambda: view.dialog_title.is_displayed, timeout=10)
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)
msg = "Order Request was Submitted"
if self.appliance.version < "5.9":
msg_type = "success"
else:
msg_type = "info"
# TODO Remove once repaired
if BZ(1513541, forced_streams=['5.9']).blocks:
raise NotImplementedError("Service Order is broken - check BZ 1513541")
view.submit_button.click()
view = self.create_view(RequestsView)
view.flash.assert_no_error()
view.flash.assert_message(msg, msg_type)
@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()