Skip to content

Commit

Permalink
Merge c8e557d into 63a7824
Browse files Browse the repository at this point in the history
  • Loading branch information
petschki committed Nov 25, 2019
2 parents 63a7824 + c8e557d commit ecfd67d
Show file tree
Hide file tree
Showing 4 changed files with 101 additions and 0 deletions.
3 changes: 3 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ Changes
2.0.0 (unreleased)
------------------

- add uninstall handler to cleanup persistent utilites and generated behaviors
[petschki]

- Fix GenericSetup import/export in python3
[erral]

Expand Down
1 change: 1 addition & 0 deletions src/collective/taxonomy/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
directory="profiles/uninstall"
description="Uninstall profile."
provides="Products.GenericSetup.interfaces.EXTENSION"
post_handler=".setuphandlers.uninstall"
/>

<genericsetup:importStep
Expand Down
16 changes: 16 additions & 0 deletions src/collective/taxonomy/setuphandlers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# -*- conding: utf-8 -*-
from collective.taxonomy.interfaces import ITaxonomy
from zope.component.hooks import getSite
from zope.i18n.interfaces import ITranslationDomain
from zope.schema.interfaces import IVocabularyFactory


def uninstall(context):
sm = getSite().getSiteManager()
utilities = sm.getUtilitiesFor(ITaxonomy)

for uname, utility in utilities:
utility.unregisterBehavior()
sm.unregisterUtility(utility, ITaxonomy, name=uname)
sm.unregisterUtility(utility, IVocabularyFactory, name=uname)
sm.unregisterUtility(utility, ITranslationDomain, name=uname)
81 changes: 81 additions & 0 deletions src/collective/taxonomy/tests/test_setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# -*- coding: utf-8 -*-
"""Setup tests for this package."""
from Products.CMFCore.utils import getToolByName

from collective.taxonomy.testing import INTEGRATION_TESTING
from plone import api
from plone.app.testing import TEST_USER_ID
from plone.app.testing import setRoles

import unittest

no_get_installer = False

try:
from Products.CMFPlone.utils import get_installer
except Exception:
# Quick shim for 5.1 api change

class get_installer(object):
def __init__(self, portal, request):
self.installer = getToolByName(portal, 'portal_quickinstaller')

def is_product_installed(self, name):
return self.installer.isProductInstalled(name)

def uninstall_product(self, name):
return self.installer.uninstallProducts([name])


class TestSetup(unittest.TestCase):
"""Test that collective.taxonomy is properly installed."""

layer = INTEGRATION_TESTING

def setUp(self):
"""Custom shared utility setup for tests."""
self.portal = self.layer['portal']
self.installer = get_installer(self.portal, self.layer['request'])

def test_product_installed(self):
"""Test if collective.taxonomy is installed."""
self.assertTrue(self.installer.is_product_installed(
'collective.taxonomy'))

def test_browserlayer(self):
"""Test that IBrowserLayer is registered."""
from collective.taxonomy.interfaces import IBrowserLayer
from plone.browserlayer import utils
self.assertIn(
IBrowserLayer,
utils.registered_layers())


class TestUninstall(unittest.TestCase):

layer = INTEGRATION_TESTING

def setUp(self):
self.portal = self.layer['portal']
self.installer = get_installer(self.portal, self.layer['request'])
roles_before = api.user.get_roles(TEST_USER_ID)
setRoles(self.portal, TEST_USER_ID, ['Manager'])
self.installer.uninstall_product('collective.taxonomy')
setRoles(self.portal, TEST_USER_ID, roles_before)

def test_product_uninstalled(self):
"""Test if collective.taxonomy is cleanly uninstalled."""
self.assertFalse(self.installer.is_product_installed(
'collective.taxonomy'))

def test_browserlayer_removed(self):
"""Test that IBrowserLayer is removed."""
from collective.taxonomy.interfaces import IBrowserLayer
from plone.browserlayer import utils
self.assertNotIn(IBrowserLayer, utils.registered_layers())

def test_persistent_utility_uninstalled(self):
from collective.taxonomy.interfaces import ITaxonomy
sm = self.portal.getSiteManager()
utilities = sm.getUtilitiesFor(ITaxonomy)
self.assertTrue(len(list(utilities)) == 0)

0 comments on commit ecfd67d

Please sign in to comment.