plonehrm unittests
==================

Utils
-----

utils.py provides a function to update employees, checking whether all
required sub-objects exist and adding them if needed.

    >>> from Products.plonehrm.utils import updateEmployee

We'll create a mock employee for testing purposes and start out with empty
properties.

    >>> class Mock(object):
    ...     def __init__(self, **kwargs):
    ...         for key, value in kwargs.items(): setattr(self, key, value)
    >>> class MockPropertySheet(Mock):
    ...     def getProperty(self, key, default=None):
    ...         try:
    ...             return self.__getattribute__(key)
    ...         except AttributeError:
    ...             return default
    >>> class MockContent(Mock):
    ...     def setTitle(self, title):
    ...         self.Title = title
    >>> class MockPortalTypes(Mock):
    ...     def constructContent(self, portal_type, employee, id_):
    ...         employee[id_] = MockContent(portal_type=portal_type)
    >>> class MockEmployee(dict):
    ...     def objectIds(self):
    ...         # for testing
    ...         return self.keys()
    ...     portal_types = MockPortalTypes()
    >>> employee = MockEmployee()
    >>> employee.portal_properties = {}
    >>> hrmprops = MockPropertySheet()
    >>> employee.portal_properties['plonehrm_properties'] = hrmprops
    >>> updateEmployee(employee)

The content of plonehrm_properties must be a list of strings like
'portaltype,id'.

    >>> hrmprops = MockPropertySheet(portal_types_to_create=['portaltype,id'])
    >>> employee.portal_properties['plonehrm_properties'] = hrmprops
    >>> updateEmployee(employee)
    >>> hrmprops = MockPropertySheet(portal_types_to_create=["PersonalData,personal", "Checklist,checklist"])
    >>> employee.portal_properties['plonehrm_properties'] = hrmprops
    >>> updateEmployee(employee)


Other formats raise an error.

    >>> hrmprops = MockPropertySheet(portal_types_to_create="PersonalData")
    >>> employee.portal_properties['plonehrm_properties'] = hrmprops
    >>> updateEmployee(employee)
    Traceback (most recent call last):
    ...
    HRMConfigException: Bad item found in portal_types_to_create: ...
    >>> hrmprops = MockPropertySheet(portal_types_to_create=["PersonalData"])
    >>> employee.portal_properties['plonehrm_properties'] = hrmprops
    >>> updateEmployee(employee)
    Traceback (most recent call last):
    ...
    HRMConfigException: Bad item found in portal_types_to_create: ...
    >>> hrmprops = MockPropertySheet(portal_types_to_create=["Per,sonal,Data"])
    >>> employee.portal_properties['plonehrm_properties'] = hrmprops
    >>> updateEmployee(employee)
    Traceback (most recent call last):
    ...
    HRMConfigException: Bad item found in portal_types_to_create: ...
