# # Test product's installation/uninstallation # from Products.PloneTestCase import PloneTestCase from Products.CMFCore.utils import getToolByName PRODUCT = 'qPloneComments' PRODUCT_SKIN_NAME = "qplonecomments" PROPERTY_SHEET = "qPloneComments" CONFIGLET_ID = "prefs_comments_setup_form" EMAIL_PID = "email_discussion_manager" APPROVE_NOTIFICATION_PID = "enable_approve_notification" PUBLISHED_NOTIFICATION_PID = "enable_published_notification" MODERATION_PID = "enable_moderation" ANONYMOUS_COMMENTING_PID = "enable_anonymous_commenting" PERM_NAME = 'Moderate Discussion' PloneTestCase.installProduct(PRODUCT) PloneTestCase.setupPloneSite() class TestInstallation(PloneTestCase.PloneTestCase): def afterSetUp(self): self.loginAsPortalOwner() self.qi = self.portal.portal_quickinstaller self.qi.installProduct(PRODUCT) def test_configlet_install(self): configTool = getToolByName(self.portal, 'portal_controlpanel', None) self.assert_(CONFIGLET_ID in [a.getId() for a in configTool.listActions()], 'Configlet not found') def test_skins_install(self): skinstool=getToolByName(self.portal, 'portal_skins') for skin in skinstool.getSkinSelections(): path = skinstool.getSkinPath(skin) path = map(str.strip, path.split(',')) self.assert_(PRODUCT_SKIN_NAME in path, 'qPloneComments layer not found in %s' % skin) def test_layer_install(self): from plone.browserlayer.utils import registered_layers from Products.qPloneComments.interfaces import IPloneCommentsLayer self.failUnless(IPloneCommentsLayer in registered_layers()) def test_propertysheet_install(self): portal_properties = getToolByName(self.portal, 'portal_properties', None) self.assert_(PROPERTY_SHEET in portal_properties.objectIds(), 'qPloneComments properies not found in portal_properties') property_ids = portal_properties[PROPERTY_SHEET].propertyIds() self.assert_(EMAIL_PID in property_ids, '%s propery not found in %s property' % (EMAIL_PID, PROPERTY_SHEET)) self.assert_(APPROVE_NOTIFICATION_PID in property_ids, '%s propery not found in %s property' % (APPROVE_NOTIFICATION_PID, PROPERTY_SHEET)) self.assert_(PUBLISHED_NOTIFICATION_PID in property_ids, '%s propery not found in %s property' % (PUBLISHED_NOTIFICATION_PID, PROPERTY_SHEET)) self.assert_(MODERATION_PID in property_ids, '%s propery not found in %s property' % (MODERATION_PID, PROPERTY_SHEET)) self.assert_(ANONYMOUS_COMMENTING_PID in property_ids, '%s propery not found in %s property' % (ANONYMOUS_COMMENTING_PID, PROPERTY_SHEET)) def test_skins_uninstall(self): self.qi.uninstallProducts([PRODUCT]) self.assertNotEqual(self.qi.isProductInstalled(PRODUCT), True,'qPloneComments is already installed') skinstool=getToolByName(self.portal, 'portal_skins') self.assert_(not PRODUCT_SKIN_NAME in skinstool.objectIds(), '%s directory view found in portal_skins after uninstallation' % PRODUCT_SKIN_NAME) for skin in skinstool.getSkinSelections(): path = skinstool.getSkinPath(skin) path = map(str.strip, path.split(',')) self.assert_(not PRODUCT_SKIN_NAME in path, '%s layer found in %s after uninstallation' % (PRODUCT_SKIN_NAME, skin)) def test_layer_uninstall(self): self.qi.uninstallProducts([PRODUCT]) self.assertNotEqual(self.qi.isProductInstalled(PRODUCT), True,'qPloneComments is already installed') from plone.browserlayer.utils import registered_layers from Products.qPloneComments.interfaces import IPloneCommentsLayer self.failIf(IPloneCommentsLayer in registered_layers()) def test_configlet_uninstall(self): self.qi.uninstallProducts([PRODUCT]) self.assertNotEqual(self.qi.isProductInstalled(PRODUCT), True,'qPloneComments is already installed') configTool = getToolByName(self.portal, 'portal_controlpanel', None) self.assert_(not CONFIGLET_ID in [a.getId() for a in configTool.listActions()], 'Configlet found after uninstallation') def test_propertysheet_uninstall(self): self.qi.uninstallProducts([PRODUCT]) self.assertNotEqual(self.qi.isProductInstalled(PRODUCT), True,'qPloneComments is already installed') portal_properties = getToolByName(self.portal, 'portal_properties') self.assert_(PROPERTY_SHEET in portal_properties.objectIds(), \ 'qPloneComments property_sheet not found in portal_properties after uninstallation') def test_permission_added(self): roles = [item['name'] for item in self.portal.rolesOfPermission(PERM_NAME)] self.assert_( roles != [], '%s not installed'%PERM_NAME) def test_suite(): from unittest import TestSuite, makeSuite suite = TestSuite() suite.addTest(makeSuite(TestInstallation)) return suite