def test_project_for(self):
     from collective.teamwork.utils import project_for
     path = 'project1/team1/stuff'
     content = self.portal.unrestrictedTraverse(path)
     project_expected = self.portal['project1']
     assert self.same(project_for(content), project_expected)
     assert self.same(IProjectContext(content), project_expected)
 def __init__(self,
              context,
              parent=None,
              groupid=u'',
              title=u'',
              description=u'',
              namespace=u'',
              roles=(),
              members=None,
              **kwargs):
     if not IWorkspaceContext.providedBy(context):
         raise ValueError('Could not adapt: context not a workspace')
     schema = interfaces.IWorkspaceGroup
     if schema.providedBy(parent):
         self.__parent__ = parent
     self.context = context
     self.adapts_project = IProjectContext.providedBy(context)
     valid_setattr(self, schema['baseid'], _decode(groupid))
     valid_setattr(self, schema['title'], _decode(title))
     valid_setattr(self, schema['description'], _decode(description))
     valid_setattr(self, schema['namespace'], _decode(namespace))
     self.portal = getSite()
     self.site_members = members or interfaces.ISiteMembers(self.portal)
     groups = Groups(self.portal)
     groupname = self.pas_group()[0]
     if groupname not in groups:
         groups.add(groupname)  # edge-case: may cause write-on-read
     self._group = GroupInfo(groupname, members=self.site_members)
 def test_get_workspaces(self):
     from collective.teamwork.utils import get_workspaces
     project1 = self.portal['project1']
     # test without context, without site
     workspaces = get_workspaces()
     assert len(workspaces) == 5
     # test sort order, items closest to root first
     assert self.same(workspaces[0], project1)
     assert all(
         map(lambda o: IWorkspaceContext.providedBy(o), workspaces)
         )
     # after first two workspaces, remainder are not projects
     assert all(
         map(lambda o: not IProjectContext.providedBy(o), workspaces[2:])
         )
     _path = lambda o: o.getPhysicalPath()
     assert len(_path(workspaces[2])) > len(_path(workspaces[0]))
     # test without context, passing site
     found = get_workspaces()
     assert len(found) == len(workspaces)
     for workspace in found:
         assert workspace in workspaces
     # test with context
     contained_workspaces = get_workspaces(project1)
     assert len(contained_workspaces) == 3
Example #4
0
 def __init__(self,
              context,
              parent=None,
              groupid=u'',
              title=u'',
              description=u'',
              namespace=u'',
              roles=(),
              members=None,
              **kwargs):
     if not IWorkspaceContext.providedBy(context):
         raise ValueError('Could not adapt: context not a workspace')
     schema = interfaces.IWorkspaceGroup
     if schema.providedBy(parent):
         self.__parent__ = parent
     self.context = context
     self.adapts_project = IProjectContext.providedBy(context)
     valid_setattr(self, schema['baseid'], _decode(groupid))
     valid_setattr(self, schema['title'], _decode(title))
     valid_setattr(self, schema['description'], _decode(description))
     valid_setattr(self, schema['namespace'], _decode(namespace))
     self.portal = getSite()
     self.site_members = members or interfaces.ISiteMembers(self.portal)
     groups = Groups(self.portal)
     groupname = self.pas_group()[0]
     if groupname not in groups:
         groups.add(groupname)  # edge-case: may cause write-on-read
     self._group = GroupInfo(groupname, members=self.site_members)
Example #5
0
 def __init__(self, context, request):
     self.context = context
     self.request = request
     self.portal = getSite()
     self.site_members = SiteMembers(self.portal, self.request)
     self.mtool = getToolByName(context, 'portal_membership')
     self.roster = WorkspaceRoster(context)
     self.title = self.context.Title().decode('utf-8')
     self.path = '/'.join(self.context.getPhysicalPath())
     self.status = IStatusMessage(self.request)
     self.isproject = IProjectContext.providedBy(context)
 def __init__(self, context):
     self.adapts_project = IProjectContext.providedBy(context)
     self._load_config()
     super(WorkspaceRoster, self).__init__(
         context,
         parent=None,
         groupid=self._base['groupid'],
         title=self._base['title'],
         description=self._base['description'],
         namespace=group_namespace(context),
         )
     self._load_groups()
Example #7
0
 def __init__(self, context):
     self.adapts_project = IProjectContext.providedBy(context)
     self._load_config()
     super(WorkspaceRoster, self).__init__(
         context,
         parent=None,
         groupid=self._base['groupid'],
         title=self._base['title'],
         description=self._base['description'],
         namespace=group_namespace(context),
         )
     self._load_groups()
Example #8
0
def sync_group_roles(context, groupname):
    """
    Given a group name as a full PAS groupname, infer appropriate
    roles for that group based on configuration, and bind those
    local roles to the context.
    """
    always_inherit_local_roles(context)
    manager = LocalRolesView(context, request_for(context))
    if IProjectContext.providedBy(context):
        roles = _project_roles_for(groupname)
    else:
        roles = _workspace_roles_for(groupname)
    manager.update_role_settings([grouproles(groupname, roles)])
 def test_utility_view(self):
     from collective.teamwork.utils import make_request
     from collective.teamwork.utils import WorkspaceUtilityView
     from collective.teamwork.utils import workspace_for, project_for
     request = make_request()
     path = 'project1/team1/stuff'
     content = self.portal.unrestrictedTraverse(path)
     view = WorkspaceUtilityView(content, request)
     assert isinstance(view(), str)  # calling returns string label
     assert self.same(view.workspace(), workspace_for(content))
     assert self.same(view.workspace(), IWorkspaceContext(content))
     assert self.same(view.project(), project_for(content))
     assert self.same(view.project(), IProjectContext(content))
Example #10
0
def sync_group_roles(context, groupname):
    """
    Given a group name as a full PAS groupname, infer appropriate
    roles for that group based on configuration, and bind those
    local roles to the context.
    """
    always_inherit_local_roles(context)
    manager = LocalRolesView(context, request_for(context))
    if IProjectContext.providedBy(context):
        roles = _project_roles_for(groupname)
    else:
        roles = _workspace_roles_for(groupname)
    manager.update_role_settings([grouproles(groupname, roles)])
 def test_get_projects(self):
     from collective.teamwork.utils import get_projects, get_workspaces
     from zope.component.hooks import getSite
     assert self.same(getSite(), self.portal)
     assert len(get_projects()) < len(get_workspaces())
     assert len(get_projects()) == len(get_projects(self.portal))
     assert len(get_projects()) == 2
     isproject = lambda o: IProjectContext.providedBy(o)
     for project in get_projects():
         assert isproject(project)
     found = get_projects()
     for project in filter(isproject, self.portal.objectValues()):
         assert project in found
Example #12
0
    def test_get_projects(self):
        from collective.teamwork.utils import get_projects, get_workspaces
        from zope.component.hooks import getSite

        assert self.same(getSite(), self.portal)
        assert len(get_projects()) < len(get_workspaces())
        assert len(get_projects()) == len(get_projects(self.portal))
        assert len(get_projects()) == 2
        isproject = lambda o: IProjectContext.providedBy(o)
        for project in get_projects():
            assert isproject(project)
        found = get_projects()
        for project in filter(isproject, self.portal.objectValues()):
            assert project in found
Example #13
0
 def test_interfaces(self):
     """Test any interface bindings configured on content"""
     from collective.teamwork.content import Workspace, Project
     from collective.teamwork.content.interfaces import IProject
     from collective.teamwork.content.interfaces import IWorkspace
     from collective.teamwork.interfaces import IWorkspaceContext
     from collective.teamwork.interfaces import IProjectContext
     assert issubclass(IProject, IProjectContext)
     assert issubclass(IProject, IWorkspaceContext)
     assert issubclass(IProject, IWorkspace)
     assert issubclass(IWorkspace, IWorkspaceContext)
     assert IWorkspaceContext.providedBy(Project('project'))
     assert IWorkspaceContext.providedBy(Workspace('team'))
     assert IProjectContext.providedBy(Project('project'))
     assert IWorkspace.providedBy(Project('project'))
     assert IWorkspace.providedBy(Workspace('team'))
     assert IProject.providedBy(Project('project'))
Example #14
0
    def test_get_workspaces(self):
        from collective.teamwork.utils import get_workspaces

        project1 = self.portal["project1"]
        # test without context, without site
        workspaces = get_workspaces()
        assert len(workspaces) == 5
        # test sort order, items closest to root first
        assert self.same(workspaces[0], project1)
        assert all(map(lambda o: IWorkspaceContext.providedBy(o), workspaces))
        # after first two workspaces, remainder are not projects
        assert all(map(lambda o: not IProjectContext.providedBy(o), workspaces[2:]))
        _path = lambda o: o.getPhysicalPath()
        assert len(_path(workspaces[2])) > len(_path(workspaces[0]))
        # test without context, passing site
        found = get_workspaces()
        assert len(found) == len(workspaces)
        for workspace in found:
            assert workspace in workspaces
        # test with context
        contained_workspaces = get_workspaces(project1)
        assert len(contained_workspaces) == 3
Example #15
0
def project_for(context):
    if IProjectContext.providedBy(context):
        return context
    return find_parent(context, iface=IProjectContext)
Example #16
0
 def __init__(self, context, request):
     if not IProjectContext.providedBy(context):
         raise ValueError("Can only purge from top-level projects")
     super(PurgeUserView, self).__init__(context, request)
 def __init__(self, context, request):
     if not IProjectContext.providedBy(context):
         raise ValueError('Can only purge from top-level projects')
     super(PurgeUserView, self).__init__(context, request)
def project_for(context):
    if IProjectContext.providedBy(context):
        return context
    return find_parent(context, iface=IProjectContext)