from navmazing import NavigateToAttribute
from widgetastic.widget import Text, View, ParametrizedView, ParametrizedString, ParametrizedLocator
from widgetastic.utils import VersionPick, Version
from widgetastic_patternfly import Dropdown, CandidateNotFound, Button
from widgetastic_manageiq import (ItemsToolBarViewSelector, BaseEntitiesView,
ParametrizedSummaryTable)
from cfme.base.login import BaseLoggedInPage
from cfme.common import Taggable, TagPageView
from cfme.configure.configuration.region_settings import Category, Tag
from cfme.utils.appliance import MiqImplementationContext
from cfme.utils.appliance.implementations.ui import navigator, CFMENavigateStep, navigate_to, ViaUI
from . import GenericObjectInstance, GenericObjectInstanceCollection
[docs]class GenericObjectInstanceAllView(BaseLoggedInPage):
title = Text('//div[@id="main-content"]//h1')
toolbar = View.nested(GenericObjectInstanceToolbar)
including_entities = View.include(BaseEntitiesView, use_parent=True)
@property
def is_displayed(self):
return (
self.toolbar.policy.is_displayed and
'(All Generic Objects)' in self.entities.title.text
)
[docs]class GenericObjectInstanceDetailsView(BaseLoggedInPage):
@View.nested
class toolbar(View): # noqa
policy = Dropdown(text='Policy')
view_selector = View.nested(ItemsToolBarViewSelector)
title = Text('//div[@id="main-content"]//h1')
summary = ParametrizedSummaryTable()
@property
def is_displayed(self):
return (
self.title.text == '{} (Summary)'.format(self.context['object'].name)
)
[docs]class MyServiceGenericObjectInstanceView(BaseLoggedInPage):
@View.nested
class toolbar(View): # noqa
reload = Button(title=VersionPick({Version.lowest(): 'Reload current display',
'5.9': 'Refresh this page'}))
@ParametrizedView.nested
class group(ParametrizedView): # noqa
PARAMETERS = ("group_name",)
custom_button = Dropdown(text=ParametrizedString('{group_name}'))
@ParametrizedView.nested
class button(ParametrizedView): # noqa
PARAMETERS = ("button_name",)
custom_button = Text(ParametrizedLocator('//button[contains(@id, "custom__custom") and'
' normalize-space()={button_name|quote}]'))
title = Text('//div[@id="main-content"]//h1')
summary = ParametrizedSummaryTable()
@property
def is_displayed(self):
return (
self.title.text == self.context['object'].name
)
@MiqImplementationContext.external_for(GenericObjectInstance.exists.getter, ViaUI)
[docs]def exists(self):
try:
# first need to check if any instances are created
view = navigate_to(self.definition, 'Instances')
if view.is_displayed:
navigate_to(self, 'Details')
return True
else:
return False
except CandidateNotFound:
return False
@MiqImplementationContext.external_for(GenericObjectInstance.add_tag, ViaUI)
[docs]def add_tag(self, tag=None, cancel=False, reset=False, details=True):
# ToDo remove when taggable use random object
if not tag:
tag = Tag(display_name='Cost Center 001', category=Category(display_name='Cost Center'))
Taggable.add_tag(self, tag=tag, cancel=cancel, reset=reset, details=details)
return tag
@MiqImplementationContext.external_for(GenericObjectInstance.remove_tag, ViaUI)
[docs]def remove_tag(self, tag, cancel=False, reset=False, details=True):
Taggable.remove_tag(self, tag=tag, cancel=cancel, reset=reset, details=details)
@MiqImplementationContext.external_for(GenericObjectInstance.get_tags, ViaUI)
@navigator.register(GenericObjectInstanceCollection, 'All')
[docs]class All(CFMENavigateStep):
VIEW = GenericObjectInstanceAllView
prerequisite = NavigateToAttribute('parent', 'Details')
[docs] def step(self):
self.prerequisite_view.summary('Relationships').click_at('Instances')
@navigator.register(GenericObjectInstance, 'Details')
[docs]class DefinitionDetails(CFMENavigateStep):
VIEW = GenericObjectInstanceDetailsView
prerequisite = NavigateToAttribute('definition', 'Instances')
[docs] def step(self):
self.prerequisite_view.entities.get_entity(name=self.obj.name, surf_pages=True).click()
@navigator.register(GenericObjectInstance, 'EditTags')
@navigator.register(GenericObjectInstance, 'MyServiceDetails')
[docs]class MyServiceDetails(CFMENavigateStep):
VIEW = MyServiceGenericObjectInstanceView
prerequisite = NavigateToAttribute('my_service', 'GenericObjectInstance')
[docs] def step(self):
self.prerequisite_view.entities.get_entity(name=self.obj.name, surf_pages=True).click()