import attr
from cfme.modeling.base import (
BaseCollection, BaseEntity,
EntityCollections,
parent_of_type,
load_appliance_collections,
)
from cfme.utils.appliance import DummyAppliance
import pytest
@attr.s
[docs]class DummyApplianceWithCollection(DummyAppliance):
def __attrs_post_init__(self):
from cfme.modeling.base import EntityCollections
self.collections = EntityCollections.for_appliance(self)
@attr.s
[docs]class MyEntity(BaseEntity):
name = attr.ib()
@attr.s
[docs]class MyCollection(BaseCollection):
ENTITY = MyEntity
@attr.s
[docs]class MyNewEntity(BaseEntity):
name = attr.ib()
_collections = {'entities': MyCollection}
@attr.s
[docs]class MyEntityWithDeclared(BaseEntity):
collections = EntityCollections.declared(
entities=MyCollection,
)
@attr.s
[docs]class MyNewCollection(BaseCollection):
ENTITY = MyNewEntity
@pytest.fixture
[docs]def dummy_appliance():
return DummyApplianceWithCollection()
[docs]def test_appliance_collections_dir(dummy_appliance):
base_level_collections = set(load_appliance_collections())
assert base_level_collections.issubset(dir(dummy_appliance.collections))
[docs]def test_appliance_collection(dummy_appliance):
obj = dummy_appliance.collections.datastores
assert obj.parent == dummy_appliance
[docs]def test_appliance_collections_instantiate(dummy_appliance):
obj = dummy_appliance.collections.datastores.instantiate('doop', 'dedoop')
assert obj
assert obj.parent == dummy_appliance.collections.datastores
assert obj.appliance == dummy_appliance
[docs]def test_appliance_collection_object_filter(dummy_appliance):
filtered_obj = dummy_appliance.collections.datastores.filter({'filtera': 'filterb'})
assert filtered_obj.parent == dummy_appliance
assert filtered_obj.filters['filtera'] == 'filterb'
[docs]def test_appliance_collection_chain_filter(dummy_appliance):
filtered_obj = dummy_appliance.collections.datastores.filter({'filtera': 'filterb'})
nested_filtered_obj = filtered_obj.filter({'filterc': 'filterd'})
assert filtered_obj.parent == dummy_appliance
assert nested_filtered_obj.filters['filtera'] == 'filterb'
assert nested_filtered_obj.filters['filtera'] == 'filterb'
[docs]def test_object_collections(dummy_appliance):
obj = MyNewCollection(dummy_appliance).instantiate('name')
assert obj.collections.entities
[docs]def test_object_collections_parent_filter(dummy_appliance):
obj = MyNewCollection(dummy_appliance).instantiate('name')
assert obj.collections.entities.filters['parent'] == obj
[docs]def test_parent_relationship(dummy_appliance):
obj = MyNewCollection(dummy_appliance).instantiate('name')
new_obj = obj.collections.entities.instantiate('boop')
assert new_obj.parent.parent.parent.parent == dummy_appliance
[docs]def test_parent_walker(dummy_appliance):
obj = MyNewCollection(dummy_appliance).instantiate('name')
new_obj = obj.collections.entities.instantiate('boop')
assert parent_of_type(new_obj, MyNewEntity) == obj
assert parent_of_type(new_obj, DummyApplianceWithCollection) == dummy_appliance
[docs]def test_declared_entity_collections(dummy_appliance):
obj = MyEntityWithDeclared(dummy_appliance)
new_obj = obj.collections.entities.instantiate('boop')
assert parent_of_type(new_obj, MyEntityWithDeclared) is obj
assert parent_of_type(new_obj, DummyApplianceWithCollection) is dummy_appliance