diff --git a/src/collective/messagesviewlet/__init__.py b/src/collective/messagesviewlet/__init__.py
index f402108..c961d8a 100644
--- a/src/collective/messagesviewlet/__init__.py
+++ b/src/collective/messagesviewlet/__init__.py
@@ -9,7 +9,7 @@
_ = MessageFactory('collective.messagesviewlet')
-HAS_PLONE_5 = api.env.plone_version().startswith('5')
+HAS_PLONE_5_AND_MORE = api.env.plone_version().startswith('5') or api.env.plone_version().startswith('6')
try:
api.env.get_distribution('plone.app.event')
diff --git a/src/collective/messagesviewlet/browser/messagesviewlet.py b/src/collective/messagesviewlet/browser/messagesviewlet.py
index 22b964c..ee8a705 100644
--- a/src/collective/messagesviewlet/browser/messagesviewlet.py
+++ b/src/collective/messagesviewlet/browser/messagesviewlet.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-from collective.messagesviewlet import HAS_PLONE_5
+from collective.messagesviewlet import HAS_PLONE_5_AND_MORE
from collective.messagesviewlet.utils import get_messages_to_show
from plone.app.layout.viewlets import common
from plone.registry.interfaces import IRegistry
@@ -12,7 +12,7 @@ class MessagesViewletBase(common.ViewletBase):
location_filter = []
def is_plone_5(self):
- return HAS_PLONE_5
+ return HAS_PLONE_5_AND_MORE
def getAllMessages(self):
messages = get_messages_to_show(self.context)
diff --git a/src/collective/messagesviewlet/message.py b/src/collective/messagesviewlet/message.py
index 872b306..ab82b61 100644
--- a/src/collective/messagesviewlet/message.py
+++ b/src/collective/messagesviewlet/message.py
@@ -1,7 +1,7 @@
# -*- coding: utf-8 -*-
from collective.messagesviewlet import _
from collective.messagesviewlet import HAS_PAE
-from collective.messagesviewlet import HAS_PLONE_5
+from collective.messagesviewlet import HAS_PLONE_5_AND_MORE
from DateTime import DateTime
from plone import api
from plone.app.layout.navigation.interfaces import INavigationRoot
@@ -28,7 +28,7 @@
from plone.app.event.base import default_timezone
from plone.app.event.base import localized_now
-if not HAS_PLONE_5:
+if not HAS_PLONE_5_AND_MORE:
from plone.formwidget.datetime.z3cform.widget import DatetimeFieldWidget as dtfw4
@@ -102,7 +102,7 @@ class IMessage(model.Schema):
description=_(u"Specify start date message appearance"),
defaultFactory=default_start,
)
- if HAS_PLONE_5:
+ if HAS_PLONE_5_AND_MORE:
form.widget("start", dtfw5, default_timezone=default_timezone)
else:
form.widget("start", dtfw4)
@@ -115,7 +115,7 @@ class IMessage(model.Schema):
"If you pick a date, dont't forget hours !"
),
)
- if HAS_PLONE_5:
+ if HAS_PLONE_5_AND_MORE:
form.widget("end", dtfw5, default_timezone=default_timezone)
else:
form.widget("end", dtfw4)
@@ -154,7 +154,7 @@ def validateStartEnd(data):
def add_timezone(dt, force=False):
if HAS_PAE:
TZ = default_timezone(as_tzinfo=True)
- if force or (not HAS_PLONE_5 and not dt.tzinfo):
+ if force or (not HAS_PLONE_5_AND_MORE and not dt.tzinfo):
return TZ.localize(dt)
return dt
diff --git a/src/collective/messagesviewlet/profiles/testing/metadata.xml b/src/collective/messagesviewlet/profiles/testing/metadata.xml
new file mode 100644
index 0000000..723252c
--- /dev/null
+++ b/src/collective/messagesviewlet/profiles/testing/metadata.xml
@@ -0,0 +1,6 @@
+
+
+
+ profile-collective.messagesviewlet:default
+
+
diff --git a/src/collective/messagesviewlet/setuphandlers.py b/src/collective/messagesviewlet/setuphandlers.py
index dfadb0f..e305f04 100644
--- a/src/collective/messagesviewlet/setuphandlers.py
+++ b/src/collective/messagesviewlet/setuphandlers.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-from collective.messagesviewlet import HAS_PLONE_5
+from collective.messagesviewlet import HAS_PLONE_5_AND_MORE
from plone import api
from plone.app.dexterity.behaviors.exclfromnav import IExcludeFromNavigation
from Products.CMFPlone import interfaces as Plone
@@ -43,7 +43,7 @@ def add_default_messages(context):
if context.readDataFile('collectivemessagesviewlet_messages.txt') is None:
return
resource = 'resource'
- if HAS_PLONE_5:
+ if HAS_PLONE_5_AND_MORE:
resource = 'plone'
site = api.portal.get()
add_message('maintenance-soon', _('maintenance_soon_tit', context=site), _('maintenance_soon_txt', context=site),
diff --git a/src/collective/messagesviewlet/testing.py b/src/collective/messagesviewlet/testing.py
index cb2964a..a8f0c57 100644
--- a/src/collective/messagesviewlet/testing.py
+++ b/src/collective/messagesviewlet/testing.py
@@ -1,19 +1,17 @@
# -*- coding: utf-8 -*-
+from collective.messagesviewlet import HAS_PLONE_5_AND_MORE
from plone import api
+from plone.app.contenttypes.testing import PLONE_APP_CONTENTTYPES_FIXTURE
from plone.app.robotframework.testing import REMOTE_LIBRARY_BUNDLE_FIXTURE
from plone.app.testing import applyProfile
from plone.app.testing import FunctionalTesting
from plone.app.testing import IntegrationTesting
-from plone.app.contenttypes.testing import PLONE_APP_CONTENTTYPES_FIXTURE
from plone.app.testing import PloneSandboxLayer
from plone.testing import z2
import collective.messagesviewlet
-IS_PLONE_5 = api.env.plone_version().startswith('5')
-
-
class CollectiveMessagesviewletLayer(PloneSandboxLayer):
defaultBases = (PLONE_APP_CONTENTTYPES_FIXTURE,)
@@ -22,9 +20,11 @@ def setUpZope(self, app, configurationContext):
self.loadZCML(package=collective.messagesviewlet, name='testing.zcml')
def setUpPloneSite(self, portal):
- installer = portal['portal_quickinstaller']
- installer.installProduct('collective.messagesviewlet')
- applyProfile(portal, 'collective.messagesviewlet:default')
+ if not HAS_PLONE_5_AND_MORE:
+ installer = portal['portal_quickinstaller']
+ installer.installProduct('collective.messagesviewlet')
+ else:
+ applyProfile(portal, 'collective.messagesviewlet:testing')
api.user.create(email='test@imio.be', username='test')
api.user.grant_roles(username='test', roles=['Site Administrator'])
diff --git a/src/collective/messagesviewlet/tests/test_message.py b/src/collective/messagesviewlet/tests/test_message.py
index f954284..6ec0a4a 100644
--- a/src/collective/messagesviewlet/tests/test_message.py
+++ b/src/collective/messagesviewlet/tests/test_message.py
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
+from collective.messagesviewlet import HAS_PLONE_5_AND_MORE
from collective.messagesviewlet.browser.messagesviewlet import GlobalMessagesViewlet
from collective.messagesviewlet.message import add_timezone
from collective.messagesviewlet.message import IMessage
@@ -8,7 +9,6 @@
from collective.messagesviewlet.testing import (
COLLECTIVE_MESSAGESVIEWLET_INTEGRATION_TESTING,
) # noqa
-from collective.messagesviewlet.testing import IS_PLONE_5
from collective.messagesviewlet.utils import add_message
from dateutil.relativedelta import relativedelta
from datetime import datetime
@@ -63,7 +63,6 @@ def setUp(self):
# The products build the "special" folder "messages-config" to store messages.
self.message_config_folder = self.portal["messages-config"]
setRoles(self.portal, TEST_USER_ID, ["Manager"])
- self.installer = api.portal.get_tool("portal_quickinstaller")
self.wftool = self.portal.portal_workflow
self.messages = []
# Create some messages
@@ -113,7 +112,7 @@ def setUp(self):
self.messages.append(message)
def tearDown(self):
- self._changeUser("admin")
+ self._changeUser("test")
api.content.delete(obj=self.another_folder)
messages = api.content.find(
context=self.message_config_folder, portal_type="Message"
@@ -264,7 +263,7 @@ def test_viewlet_rendering(self):
"""
viewlet = self.get_global_viewlet(self.portal)
self.assertIn(self.messages[0].text.output, viewlet.render())
- if not IS_PLONE_5:
+ if not HAS_PLONE_5_AND_MORE:
self.assertIn("messagesviewlet-info", viewlet.render())
else:
self.assertIn("portalMessage info", viewlet.render())
@@ -364,7 +363,7 @@ def test_local_messages_location(self):
# To get this location message (justhere), we must be in a folder
context = self.portal["myfolder"]
locations = [term.token for term in location(context)._terms]
- self.assertEquals(locations, ["justhere", "fromhere"])
+ self.assertEqual(locations, ["justhere", "fromhere"])
def test_local_messages_viewlet_render(self):
api.portal.set_registry_record("messagesviewlet.authorize_local_message", True)
diff --git a/src/collective/messagesviewlet/tests/test_setup.py b/src/collective/messagesviewlet/tests/test_setup.py
index e7a148d..2a180dc 100644
--- a/src/collective/messagesviewlet/tests/test_setup.py
+++ b/src/collective/messagesviewlet/tests/test_setup.py
@@ -1,8 +1,12 @@
# -*- coding: utf-8 -*-
"""Setup tests for this package."""
+from collective.messagesviewlet import HAS_PLONE_5_AND_MORE
from collective.messagesviewlet.testing import COLLECTIVE_MESSAGESVIEWLET_INTEGRATION_TESTING # noqa
from plone import api
+if HAS_PLONE_5_AND_MORE:
+ from Products.CMFPlone.utils import get_installer
+
import unittest
@@ -14,11 +18,17 @@ class TestSetup(unittest.TestCase):
def setUp(self):
"""Custom shared utility setup for tests."""
self.portal = self.layer['portal']
- self.installer = api.portal.get_tool('portal_quickinstaller')
+ if not HAS_PLONE_5_AND_MORE:
+ self.installer = api.portal.get_tool('portal_quickinstaller')
+ else:
+ self.installer = get_installer(self.portal, self.layer["request"])
def test_product_installed(self):
"""Test if collective.messagesviewlet is installed with portal_quickinstaller."""
- self.assertTrue(self.installer.isProductInstalled('collective.messagesviewlet'))
+ if not HAS_PLONE_5_AND_MORE:
+ self.assertTrue(self.installer.isProductInstalled('collective.messagesviewlet'))
+ else:
+ self.assertTrue(self.installer.is_product_installed('collective.messagesviewlet'))
def test_browserlayer(self):
"""Test that ICollectiveMessagesviewletLayer is registered."""
@@ -33,9 +43,16 @@ class TestUninstall(unittest.TestCase):
def setUp(self):
self.portal = self.layer['portal']
- self.installer = api.portal.get_tool('portal_quickinstaller')
- self.installer.uninstallProducts(['collective.messagesviewlet'])
+ if not HAS_PLONE_5_AND_MORE:
+ self.installer = api.portal.get_tool('portal_quickinstaller')
+ self.installer.uninstallProducts(['collective.messagesviewlet'])
+ else:
+ self.installer = get_installer(self.portal, self.layer["request"])
+ self.installer.uninstall_product('collective.messagesviewlet')
def test_product_uninstalled(self):
"""Test if collective.messagesviewlet is cleanly uninstalled."""
- self.assertFalse(self.installer.isProductInstalled('collective.messagesviewlet'))
+ if not HAS_PLONE_5_AND_MORE:
+ self.assertFalse(self.installer.isProductInstalled('collective.messagesviewlet'))
+ else:
+ self.assertFalse(self.installer.is_product_installed('collective.messagesviewlet'))
diff --git a/src/collective/messagesviewlet/utils.py b/src/collective/messagesviewlet/utils.py
index b22976f..a8fef6d 100644
--- a/src/collective/messagesviewlet/utils.py
+++ b/src/collective/messagesviewlet/utils.py
@@ -1,12 +1,15 @@
# -*- coding: utf-8 -*-
from collective.behavior.talcondition.behavior import ITALCondition
-from collective.messagesviewlet import HAS_PLONE_5
+from collective.messagesviewlet import HAS_PLONE_5_AND_MORE
from collective.messagesviewlet.message import add_timezone
from collective.messagesviewlet.message import generate_uid
from datetime import datetime
from plone import api
-from plone.app.layout.navigation.defaultpage import isDefaultPage
+try:
+ from plone.app.layout.navigation.defaultpage import isDefaultPage
+except ImportError as error:
+ from Products.CMFPlone.defaultpage import is_default_page as isDefaultPage
from plone.app.layout.navigation.interfaces import INavigationRoot
from plone.app.textfield.value import RichTextValue
from six import text_type
@@ -45,7 +48,7 @@ def add_message(id, title, text, msg_type='info', can_hide=False, start=datetime
return None
rich_text = _richtextval(text)
# Add TZ when using Plone5
- if HAS_PLONE_5:
+ if HAS_PLONE_5_AND_MORE:
start = add_timezone(start, force=True)
try:
end_date = datetime.strptime(end, '%Y%m%d-%H%M')