Test coverage for vnccollab.theme.portlets.users_box

vnccollab/      covered 69% (1245 of 4098 uncovered)
    theme/      covered 69% (1245 of 4098 uncovered)
        portlets/      covered 68% (353 of 1108 uncovered)
            users_box.py      covered 51% (46 of 95 uncovered)

    1: from Acquisition import aq_inner
       
    1: from zope.formlib import form
    1: from zope.interface import implements
    1: from zope import schema
    1: from zope.component import getMultiAdapter
       
    1: from Products.Five.browser.pagetemplatefile import ZopeTwoPageTemplateFile
    1: from Products.CMFCore.utils import getToolByName
    1: from Products.CMFPlone.utils import safe_unicode
       
    1: from plone.memoize.instance import memoize
    1: from plone.portlets.interfaces import IPortletDataProvider
    1: from plone.app.portlets.portlets import base
       
    1: from vnccollab.theme import messageFactory as _
       
       
    2: class IUsersBoxPortlet(IPortletDataProvider):
       
    1:     header = schema.TextLine(
    1:         title=_(u"Header"),
    1:         description=_(u"Header of the portlet."),
    1:         required=False,
    1:         default=u'Users')
       
    1:     do_not_recurse = schema.Bool(
    1:         title=_(u"Do not fetch users recursively"),
    1:         description=_(u"By default portlet displays all users that contributed "
                             "to content under current container. If this option "
                             "ticked, only current context object contributors will "
                             "be shown."),
    1:         required=False,
    1:         default=False)
       
    1:     count = schema.Int(
    1:        title=_(u"Number of items to display"),
    1:        description=u'',
    1:        required=True,
    1:        default=30)
       
    2: class Assignment(base.Assignment):
    1:     implements(IUsersBoxPortlet)
       
    1:     header = u'Users'
    1:     do_not_recurse = False
    1:     count = 30
       
    1:     @property
           def title(self):
               """Return portlet header"""
>>>>>> return self.header or _(u"Users Box")
1: def __init__(self, header=u'Users', do_not_recurse=False, count=30):
>>>>>> self.header = header
>>>>>> self.do_not_recurse = do_not_recurse
>>>>>> self.count = count
2: class Renderer(base.Renderer): 1: render = ZopeTwoPageTemplateFile('templates/users_box.pt') 1: @property def available(self):
>>>>>> return len(self._getUsers()) > 0
1: def update(self):
>>>>>> self.users = self._getUsers()
1: @memoize def _getUsers(self):
>>>>>> if not self.data.count:
>>>>>> return ()
>>>>>> users = []
>>>>>> context = aq_inner(self.context)
>>>>>> catalog = getToolByName(context, 'portal_catalog')
>>>>>> acl_users = getToolByName(context, 'acl_users')
>>>>>> mtool = getToolByName(context, 'portal_membership')
>>>>>> cstate = getMultiAdapter((self.context, self.request),
>>>>>> name='plone_context_state')
# prepare catalog query
>>>>>> query = {'sort_on': 'modified',
>>>>>> 'sort_order': 'reverse'}
>>>>>> path = '/'.join(cstate.folder().getPhysicalPath())
>>>>>> if self.data.do_not_recurse:
>>>>>> query['path'] = {'query': path, 'depth': 0}
else:
>>>>>> query['path'] = path
>>>>>> added = []
>>>>>> invalid = []
>>>>>> purl = getToolByName(context, 'portal_url')()
>>>>>> limit = self.data.count
>>>>>> counter = 0
>>>>>> for brain in catalog(**query):
# already got enough users
>>>>>> if counter >= limit:
>>>>>> break
>>>>>> creator = brain.Creator
# skip duplicates
>>>>>> if not creator or creator in added or creator in invalid:
>>>>>> continue
# check if user exists and whether user got profile image
>>>>>> user = acl_users.getUserById(creator)
>>>>>> if user is None:
>>>>>> invalid.append(creator)
>>>>>> continue
# finally append user and increment counters
>>>>>> users.append({
>>>>>> 'id': creator,
>>>>>> 'img': mtool.getPersonalPortrait(id=creator),
>>>>>> 'url': '%s/author/%s' % (purl, creator),
>>>>>> 'fullname': user.getProperty("fullname"),
>>>>>> 'email': user.getProperty("email")
})
>>>>>> added.append(creator)
>>>>>> counter += 1
>>>>>> return tuple(users)
2: class AddForm(base.AddForm): 1: form_fields = form.Fields(IUsersBoxPortlet) 1: label = _(u"Add Users Box Portlet") 1: description = _(u"A portlet which lists users contributed to current " "container.") 1: def create(self, data):
>>>>>> return Assignment(**data)
2: class EditForm(base.EditForm): 1: form_fields = form.Fields(IUsersBoxPortlet) 1: label = _(u"Edit Users Box Portlet") 1: description = _(u"A portlet which lists users contributed to current " "container.")