Ejemplo n.º 1
0
    def test_featureletsNotRemoved(self):
        # there was a bug where edits on the container that were not
        # from the edit template would cause all of the featurelets to
        # be uninstalled; this demonstrates that the bug has been
        # fixed
        flet_id = 'listen'
        content_id = 'lists'
        supporter = IFeatureletSupporter(self.proj)
        flet = getAdapter(supporter, IFeaturelet, flet_id)
        supporter.installFeaturelet(flet)
        self.failUnless(content_id in self.proj.objectIds())
        # unset the "don't recurse" flag
        req = self.proj.REQUEST
        req.set('flet_recurse_flag', None)

        zope.event.notify(objectevent.ObjectModifiedEvent(self.proj))
        self.failUnless(flet_id in supporter.getInstalledFeatureletIds())
Ejemplo n.º 2
0
    def test_removeFeaturelet(self):
        featurelet = ListenFeaturelet(self.project)
        fletsupporter = IFeatureletSupporter(self.project)
        fletsupporter.installFeaturelet(featurelet)
        fletsupporter.removeFeaturelet(featurelet)

        list_folder_id = featurelet._info['content'][0]['id']
        self.failIf(list_folder_id in self.project.objectIds())

        request = self.project.REQUEST
        try:
            view = getMultiAdapter((self.project, request),
                                   Interface, ListenFeaturelet.config_view)
        except ComponentLookupError:
            pass
        else:
            self.fail("Config view shouldn't be available after the "
                      "featurelet has been removed.")
Ejemplo n.º 3
0
    def test_addFeaturelet(self):
        featurelet = ListenFeaturelet(self.project)
        team = makeContent(self.portal.portal_teams, 'Team', 'OpenTeam')
        self.project.setSpaceTeams([team])
        self.assertEqual(list(self.project.objectIds()), [])
        request = self.project.REQUEST
        try:
            view = getMultiAdapter((self.project, request),
                                   Interface, ListenFeaturelet.config_view)
        except ComponentLookupError:
            pass
        else:
            self.fail("Config view shouldn't be available until the "
                      "featurelet is installed.")
        fletsupporter = IFeatureletSupporter(self.project)
        fletsupporter.installFeaturelet(featurelet)

        list_folder_id = featurelet._info['content'][0]['id']
        self.failUnless(list_folder_id in self.project.objectIds())
Ejemplo n.º 4
0
def save_featurelets(obj, event=None, request=None):
    """
    IObjectModified event subscriber that installs the appropriate
    featurelets.
    """
    if IContainerModifiedEvent.providedBy(event):
        # we only care about direct edits
        return
    
    if not request:
        request = obj.REQUEST

    if event and request.get('__initialize_project__', None):
        # bail if project isn't actuated yet and we are used via an
        # IObjectModifiedEvent event
        return

    if request.get('set_flets') is None:
        # don't do anything unless we're actually coming from the
        # project edit screen
        return

    # XXX there must be a better way... :-|
    if request.get('flet_recurse_flag') is not None:
        return

    request.set('flet_recurse_flag', True)
    supporter = IFeatureletSupporter(obj)
    flets = dict(getAdapters((supporter,), IFeaturelet))

    desired = request.form.get('featurelets')
    if desired is None:
        desired = tuple()
    desired = set(desired)
    installed = set([name for name, flet in flets.items() if flet.installed])

    needed = desired.difference(installed)
    for flet_id in needed:
        supporter.installFeaturelet(flets[flet_id])

    removed = installed.difference(desired)
    for flet_id in removed:
        supporter.removeFeaturelet(flets[flet_id])