From 1b90bb028d12862b426e7d51e57efcc709fefe9e Mon Sep 17 00:00:00 2001 From: mauritsvanrees Date: Fri, 26 Jul 2024 22:02:51 +0200 Subject: [PATCH] [fc] Repository: plone.app.testing Branch: refs/heads/master Date: 2024-06-19T21:48:44+02:00 Author: Maurits van Rees (mauritsvanrees) Commit: https://github.com/plone/plone.app.testing/commit/89dfa1db45c537ba9e6e8039aef49f33d0d65c21 PloneFixture: explicitly install plone.app.contenttypes:default. The `addPloneSite` factory in Plone 6.1 no longer installs this by default. See https://github.com/plone/Products.CMFPlone/issues/3961 Files changed: A news/3961.feature M src/plone/app/testing/layers.py Repository: plone.app.testing Branch: refs/heads/master Date: 2024-07-26T22:02:51+02:00 Author: Maurits van Rees (mauritsvanrees) Commit: https://github.com/plone/plone.app.testing/commit/72970c70321e3331bfe75a8424237cff4b7758ea Merge pull request #97 from plone/distributions PloneFixture: explicitly install plone.app.contenttypes:default. Files changed: A news/3961.feature M src/plone/app/testing/layers.py --- last_commit.txt | 145 ++++++------------------------------------------ 1 file changed, 18 insertions(+), 127 deletions(-) diff --git a/last_commit.txt b/last_commit.txt index 405d05b207..b0e2478141 100644 --- a/last_commit.txt +++ b/last_commit.txt @@ -1,146 +1,37 @@ -Repository: Products.CMFPlone +Repository: plone.app.testing Branch: refs/heads/master -Date: 2024-06-19T13:52:58+02:00 +Date: 2024-06-19T21:48:44+02:00 Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/Products.CMFPlone/commit/0b35cd1e7e5826e84286f62fc5ea1ce4e2a92d12 +Commit: https://github.com/plone/plone.app.testing/commit/89dfa1db45c537ba9e6e8039aef49f33d0d65c21 -Remove `propertiestool` import step and usage of `portal_properties`. +PloneFixture: explicitly install plone.app.contenttypes:default. -Files changed: -A news/125.breaking -M Products/CMFPlone/browser/author.py -M Products/CMFPlone/browser/templates/ajax_main_template.pt -M Products/CMFPlone/browser/templates/main_template.pt -M Products/CMFPlone/exportimport/configure.zcml -M Products/CMFPlone/profiles/default/componentregistry.xml -M Products/CMFPlone/profiles/default/toolset.xml -M Products/CMFPlone/tests/testNavigationView.py -M Products/CMFPlone/tests/testPortalCreation.py -M Products/CMFPlone/tests/testWebDAV.py -M Products/CMFPlone/tests/test_zmi.py -D Products/CMFPlone/exportimport/propertiestool.py -D Products/CMFPlone/exportimport/tests/testPropertiesTool.py -D Products/CMFPlone/profiles/default/propertiestool.xml - -b'diff --git a/Products/CMFPlone/browser/author.py b/Products/CMFPlone/browser/author.py\nindex 644099ea71..2b0fef236c 100644\n--- a/Products/CMFPlone/browser/author.py\n+++ b/Products/CMFPlone/browser/author.py\n@@ -5,7 +5,6 @@\n from plone.base.interfaces.controlpanel import IMailSchema\n from plone.base.utils import pretty_title_or_id\n from plone.registry.interfaces import IRegistry\n-from Products.CMFCore.interfaces import IPropertiesTool\n from Products.CMFCore.utils import getToolByName\n from Products.Five.browser import BrowserView\n from Products.MailHost.interfaces import IMailHost\n@@ -201,11 +200,7 @@ def home_folder(self, username):\n return self.membership_tool.getHomeFolder(id=username)\n \n def __call__(self):\n- self.portal_properties = getUtility(IPropertiesTool)\n-\n self.portal_catalog = getToolByName(self.context, "portal_catalog")\n-\n- # XXX: getUtility call does not work.\n self.membership_tool = getToolByName(self.context, "portal_membership")\n \n self.portal_state = getMultiAdapter(\ndiff --git a/Products/CMFPlone/browser/templates/ajax_main_template.pt b/Products/CMFPlone/browser/templates/ajax_main_template.pt\nindex 81eab03a4a..f4efc3b8e7 100644\n--- a/Products/CMFPlone/browser/templates/ajax_main_template.pt\n+++ b/Products/CMFPlone/browser/templates/ajax_main_template.pt\n@@ -15,7 +15,6 @@\n dummy python: plone_layout.mark_view(view);\n portal_url python:portal_state.portal_url();\n checkPermission python:context.restrictedTraverse(\'portal_membership\').checkPermission;\n- site_properties python:context.restrictedTraverse(\'portal_properties\').site_properties;\n ajax_include_head python:request.get(\'ajax_include_head\', False);\n ajax_load python:False;"\n i18n:domain="plone"\ndiff --git a/Products/CMFPlone/browser/templates/main_template.pt b/Products/CMFPlone/browser/templates/main_template.pt\nindex 9bffd9a9bb..efe9eac05e 100644\n--- a/Products/CMFPlone/browser/templates/main_template.pt\n+++ b/Products/CMFPlone/browser/templates/main_template.pt\n@@ -15,7 +15,6 @@\n dummy python: plone_layout.mark_view(view);\n portal_url python:portal_state.portal_url();\n checkPermission python:context.restrictedTraverse(\'portal_membership\').checkPermission;\n- site_properties python:context.restrictedTraverse(\'portal_properties\').site_properties;\n ajax_include_head python:request.get(\'ajax_include_head\', False);\n ajax_load python:False;"\n i18n:domain="plone"\ndiff --git a/Products/CMFPlone/exportimport/configure.zcml b/Products/CMFPlone/exportimport/configure.zcml\nindex ca451845e8..b3fe625468 100644\n--- a/Products/CMFPlone/exportimport/configure.zcml\n+++ b/Products/CMFPlone/exportimport/configure.zcml\n@@ -54,19 +54,9 @@\n \n \n \n- \n \n \n \n- \n- \n- \n-\n \n \n- \n-\n \n \n- \n-\n- \n-\n \n \n- \n-\n \n-\n- Site wide properties\n- True\n-\n-"""\n-\n-_PROPERTIESTOOL_XML = b"""\\\n-\n-\n- \n- Site wide properties\n- True\n- \n-\n-"""\n-\n-\n-class PropertySheetXMLAdapterTests(BodyAdapterTestCase):\n- def _getTargetClass(self):\n- from Products.CMFPlone.exportimport.propertiestool import (\n- SimpleItemWithPropertiesXMLAdapter,\n- )\n-\n- return SimpleItemWithPropertiesXMLAdapter\n-\n- def _populate(self, obj):\n- obj.manage_changeProperties(title="Site wide properties")\n- obj.manage_addProperty("displayPublicationDateInByline", True, "boolean")\n-\n- def setUp(self):\n- from plone.base.interfaces import ISimpleItemWithProperties\n- from Products.GenericSetup.interfaces import IBody\n- from Products.GenericSetup.interfaces import ISetupEnviron\n-\n- provideAdapter(\n- self._getTargetClass(), (ISimpleItemWithProperties, ISetupEnviron), IBody\n- )\n-\n- self._obj = SimpleItemWithProperties("site_properties")\n- self._BODY = _PROPERTYSHEET_XML\n-\n-\n-class PropertiesToolXMLAdapterTests(BodyAdapterTestCase):\n- def _getTargetClass(self):\n- from Products.CMFPlone.exportimport.propertiestool import (\n- PlonePropertiesToolXMLAdapter,\n- )\n-\n- return PlonePropertiesToolXMLAdapter\n-\n- def _populate(self, obj):\n- obj._setObject("site_properties", SimpleItemWithProperties("site_properties"))\n- obj.site_properties.manage_changeProperties(title="Site wide properties")\n- obj.site_properties.manage_addProperty(\n- "displayPublicationDateInByline", True, "boolean"\n- )\n-\n- def setUp(self):\n- from plone.base.interfaces import IPropertiesTool\n- from plone.base.interfaces import ISimpleItemWithProperties\n- from Products.CMFPlone.exportimport.propertiestool import (\n- SimpleItemWithPropertiesXMLAdapter,\n- )\n- from Products.GenericSetup.interfaces import IBody\n- from Products.GenericSetup.interfaces import ISetupEnviron\n-\n- provideAdapter(self._getTargetClass(), (IPropertiesTool, ISetupEnviron), IBody)\n- provideAdapter(\n- SimpleItemWithPropertiesXMLAdapter,\n- (ISimpleItemWithProperties, ISetupEnviron),\n- IBody,\n- )\n-\n- self._obj = PropertiesTool()\n- self._BODY = _PROPERTIESTOOL_XML\n-\n-\n-def test_suite():\n- from unittest import makeSuite\n- from unittest import TestSuite\n-\n- suite = TestSuite()\n- suite.addTest(makeSuite(PropertySheetXMLAdapterTests))\n- suite.addTest(makeSuite(PropertiesToolXMLAdapterTests))\n- return suite\ndiff --git a/Products/CMFPlone/profiles/default/componentregistry.xml b/Products/CMFPlone/profiles/default/componentregistry.xml\nindex f35d005476..f1195c4eb2 100644\n--- a/Products/CMFPlone/profiles/default/componentregistry.xml\n+++ b/Products/CMFPlone/profiles/default/componentregistry.xml\n@@ -68,9 +68,6 @@\n \n- \n \ndiff --git a/Products/CMFPlone/profiles/default/propertiestool.xml b/Products/CMFPlone/profiles/default/propertiestool.xml\ndeleted file mode 100644\nindex d90844dacd..0000000000\n--- a/Products/CMFPlone/profiles/default/propertiestool.xml\n+++ /dev/null\n@@ -1,15 +0,0 @@\n-\n-\n- \n- NavigationTree properties\n- \n- \n- Site wide properties\n- \n-\ndiff --git a/Products/CMFPlone/profiles/default/toolset.xml b/Products/CMFPlone/profiles/default/toolset.xml\nindex dfbff83fe0..1a225138d1 100644\n--- a/Products/CMFPlone/profiles/default/toolset.xml\n+++ b/Products/CMFPlone/profiles/default/toolset.xml\n@@ -42,9 +42,6 @@\n \n- \n \ndiff --git a/Products/CMFPlone/tests/testNavigationView.py b/Products/CMFPlone/tests/testNavigationView.py\nindex fa8d525a6b..f52b1e7831 100644\n--- a/Products/CMFPlone/tests/testNavigationView.py\n+++ b/Products/CMFPlone/tests/testNavigationView.py\n@@ -121,29 +121,6 @@ def path(x):\n self.assertEqual(subfolder221map["item"].getPath(), path(subfolder221))\n self.assertEqual(len(subfolder221map["children"]), 0)\n \n- def testSitemapUnchangedWithTopLevel(self):\n- # Test that setting topLevel does not alter the sitemap\n- ntp = self.portal.portal_properties.navtree_properties\n- for topLevel in range(0, 5):\n- ntp.manage_changeProperties(topLevel=topLevel)\n- view = self.view_class(self.portal, self.request)\n- sitemap = view.siteMap()\n- self.assertEqual(\n- sitemap["children"][-1]["item"].getPath(), "/plone/folder2"\n- )\n-\n- def testSitemapUnchangedWithBottomLevel(self):\n- # Test that setting bottomLevel does not alter the sitemap\n- ntp = self.portal.portal_properties.navtree_properties\n- for bottomLevel in range(0, 5):\n- ntp.manage_changeProperties(bottomLevel=bottomLevel)\n- view = self.view_class(self.portal, self.request)\n- sitemap = view.siteMap()\n- self.assertEqual(\n- sitemap["children"][-1]["item"].getPath(), "/plone/folder2"\n- )\n- self.assertTrue(len(sitemap["children"][-1]["children"]) > 0)\n-\n def testSitemapWithNavigationRoot(self):\n self.navigation_settings.root = "/folder2"\n view = self.view_class(self.portal, self.request)\ndiff --git a/Products/CMFPlone/tests/testPortalCreation.py b/Products/CMFPlone/tests/testPortalCreation.py\nindex 080d3c6beb..f3474cf2c7 100644\n--- a/Products/CMFPlone/tests/testPortalCreation.py\n+++ b/Products/CMFPlone/tests/testPortalCreation.py\n@@ -42,7 +42,6 @@ def afterSetUp(self):\n self.types = self.portal.portal_types\n self.cp = self.portal.portal_controlpanel\n self.actions = self.portal.portal_actions\n- self.properties = self.portal.portal_properties\n self.memberdata = self.portal.portal_memberdata\n self.catalog = self.portal.portal_catalog\n self.groups = self.portal.portal_groups\n@@ -146,35 +145,11 @@ def testNoPortalNavigationTool(self):\n # portal_navigation should have been removed\n self.assertFalse("portal_navigation" in self.portal)\n \n- def testNoFormProperties(self):\n- # form_properties should have been removed\n- self.assertFalse("form_properties" in self.properties)\n-\n- def testNoNavigationProperties(self):\n- # navigation_properties should have been removed\n- self.assertFalse("navigation_properties" in self.properties)\n-\n def testFormToolTipsProperty(self):\n # formtooltips should have been removed\n self.assertFalse(self.memberdata.hasProperty("formtooltips"))\n \n def testNavTreeProperties(self):\n- # navtree_properties should contain the new properties\n- self.assertFalse(\n- self.properties.navtree_properties.hasProperty("parentMetaTypesNotToQuery")\n- )\n- self.assertFalse(self.properties.navtree_properties.hasProperty("sitemapDepth"))\n- self.assertFalse(\n- self.properties.navtree_properties.hasProperty("showAllParents")\n- )\n- self.assertFalse(\n- self.properties.navtree_properties.hasProperty("metaTypesNotToList")\n- ) # noqa\n- self.assertFalse(\n- self.properties.navtree_properties.hasProperty("sortAttribute")\n- )\n- self.assertFalse(self.properties.navtree_properties.hasProperty("sortOrder"))\n-\n registry = getUtility(IRegistry)\n self.assertTrue("plone.workflow_states_to_show" in registry)\n self.assertTrue("plone.filter_on_workflow" in registry)\n@@ -946,9 +921,6 @@ def testFinalStepsWithMembersFolderDeleted(self):\n \n \n class TestManagementPageCharset(PloneTestCase.PloneTestCase):\n- def afterSetUp(self):\n- self.properties = self.portal.portal_properties\n-\n def testManagementPageCharset(self):\n manage_charset = getattr(self.portal, "management_page_charset", None)\n self.assertTrue(manage_charset)\ndiff --git a/Products/CMFPlone/tests/testWebDAV.py b/Products/CMFPlone/tests/testWebDAV.py\nindex 2105ae4390..e3938407ef 100644\n--- a/Products/CMFPlone/tests/testWebDAV.py\n+++ b/Products/CMFPlone/tests/testWebDAV.py\n@@ -18,17 +18,6 @@\n """\n \n \n-class TestDAVProperties(PloneTestCase.PloneTestCase):\n- def testPropertiesToolTitle(self):\n- ptool = getToolByName(self.portal, "portal_properties")\n- psets = dict(ptool.propertysheets.items())\n- self.assertTrue("webdav" in psets.keys())\n- default = psets["webdav"]\n- items = dict(default.propertyItems())\n- self.assertTrue("displayname" in items.keys())\n- self.assertEqual(items["displayname"], ptool.title)\n-\n-\n class TestPUTObjects(PloneTestCase.PloneTestCase):\n # PUT objects into Plone including special cases like index_html.\n # Confirms fix for http://dev.plone.org/plone/ticket/1375\ndiff --git a/Products/CMFPlone/tests/test_zmi.py b/Products/CMFPlone/tests/test_zmi.py\nindex 3ec5997246..8be5e75e98 100644\n--- a/Products/CMFPlone/tests/test_zmi.py\n+++ b/Products/CMFPlone/tests/test_zmi.py\n@@ -121,11 +121,6 @@ def test_portal_modifier(self):\n view = self.portal.restrictedTraverse(url)\n self.assertTrue(view(), msg=f"{url} is broken")\n \n- def test_portal_properties(self):\n- url = "portal_properties/manage_main"\n- view = self.portal.restrictedTraverse(url)\n- self.assertTrue(view(), msg=f"{url} is broken")\n-\n def test_portal_purgepolicy(self):\n url = "portal_purgepolicy/manage_propertiesForm"\n view = self.portal.restrictedTraverse(url)\ndiff --git a/news/125.breaking b/news/125.breaking\nnew file mode 100644\nindex 0000000000..42b585932b\n--- /dev/null\n+++ b/news/125.breaking\n@@ -0,0 +1,2 @@\n+Remove `propertiestool` import step and usage of `portal_properties`.\n+[maurits]\n' - -Repository: Products.CMFPlone - - -Branch: refs/heads/master -Date: 2024-06-19T14:16:31+02:00 -Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/Products.CMFPlone/commit/e58f33b47fad53e899ba45cb6b02cc84376459d3 - -Remove site_properties from comments. +The `addPloneSite` factory in Plone 6.1 no longer installs this by default. +See https://github.com/plone/Products.CMFPlone/issues/3961 Files changed: -M Products/CMFPlone/PloneTool.py -M Products/CMFPlone/tests/testNavigationView.py -M Products/CMFPlone/tests/test_defaultpage.py -M news/125.breaking +A news/3961.feature +M src/plone/app/testing/layers.py -b'diff --git a/Products/CMFPlone/PloneTool.py b/Products/CMFPlone/PloneTool.py\nindex 886d93ff63..e5ec5bd1be 100644\n--- a/Products/CMFPlone/PloneTool.py\n+++ b/Products/CMFPlone/PloneTool.py\n@@ -623,9 +623,8 @@ def browserDefault(self, obj):\n # 3. If the object has a property default_page set and this gives a list\n # of, or single, object id, and that object is is found in the\n # folder or is the name of a skin template, return that id\n- # 4. If the property default_page is set in site_properties and that\n- # property contains a list of ids of which one id is found in the\n- # folder, return that id\n+ # 4. Look up the property plone.default_page in the registry for\n+ # magic ids and test these.\n # 5. If the object implements IBrowserDefault, try to get the selected\n # layout.\n # 6. If the type has a \'folderlisting\' action and no default page is\n@@ -928,7 +927,7 @@ def getUserFriendlyTypes(self, typesList=None):\n # and selection purposes.\n #\n # This is the list of types available in the portal, minus those\n- # defined in the types_not_searched property in site_properties, if it\n+ # defined in the types_not_searched property in the registry, if it\n # exists.\n #\n # If typesList is given, this is used as the base list; else all types\ndiff --git a/Products/CMFPlone/tests/testNavigationView.py b/Products/CMFPlone/tests/testNavigationView.py\nindex f52b1e7831..aeddd0ba26 100644\n--- a/Products/CMFPlone/tests/testNavigationView.py\n+++ b/Products/CMFPlone/tests/testNavigationView.py\n@@ -247,7 +247,7 @@ def testTabInfo(self):\n self.assertTrue("review_state" in tab and tab["review_state"])\n \n def testDisableFolderTabs(self):\n- # Setting the site_property disable_folder_sections should remove\n+ # Setting the registry setting generate_tabs to False should remove\n # all folder based tabs\n self.navigation_settings.generate_tabs = False\n view = self.view_class(self.portal, self.request)\ndiff --git a/Products/CMFPlone/tests/test_defaultpage.py b/Products/CMFPlone/tests/test_defaultpage.py\nindex 3be7eafd7d..ac633b5d6b 100644\n--- a/Products/CMFPlone/tests/test_defaultpage.py\n+++ b/Products/CMFPlone/tests/test_defaultpage.py\n@@ -106,8 +106,8 @@ def test_get_default_page_step_3_2(self):\n self.assertEqual("d1", get_default_page(self.folder))\n \n def test_get_default_page_step_4(self):\n- # 4. Else, look up the property default_page in site_properties for\n- # magic ids and test these\n+ # 4. Else, look up the property plone.default_page in the registry for\n+ # magic ids and test these\n registry = getUtility(IRegistry)\n registry["plone.default_page"] = ["d1"]\n self.folder.invokeFactory("Document", "d1", title="Doc 1")\ndiff --git a/news/125.breaking b/news/125.breaking\nindex 42b585932b..6c3870d67e 100644\n--- a/news/125.breaking\n+++ b/news/125.breaking\n@@ -1,2 +1,3 @@\n Remove `propertiestool` import step and usage of `portal_properties`.\n+Remove `site_properties` from `main_template.pt` and ajax template.\n [maurits]\n' +b'diff --git a/news/3961.feature b/news/3961.feature\nnew file mode 100644\nindex 0000000..2c653dc\n--- /dev/null\n+++ b/news/3961.feature\n@@ -0,0 +1,4 @@\n+PloneFixture: explicitly install plone.app.contenttypes:default.\n+The `addPloneSite` factory in Plone 6.1 no longer installs this by default.\n+[maurits]\n+\ndiff --git a/src/plone/app/testing/layers.py b/src/plone/app/testing/layers.py\nindex e1eb75b..6b787c3 100644\n--- a/src/plone/app/testing/layers.py\n+++ b/src/plone/app/testing/layers.py\n@@ -70,7 +70,10 @@ class PloneFixture(Layer):\n )\n \n # Extension profiles to be installed with site setup\n- extensionProfiles = ("plonetheme.barceloneta:default",)\n+ extensionProfiles = (\n+ "plone.app.contenttypes:default",\n+ "plonetheme.barceloneta:default",\n+ )\n \n # Layer lifecycle\n \n' -Repository: Products.CMFPlone +Repository: plone.app.testing Branch: refs/heads/master -Date: 2024-06-29T02:21:42+02:00 -Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/Products.CMFPlone/commit/674282237137384171352a8f346a4a995447c484 - -Merge branch 'master' into remove-portal_properties - -Files changed: -A news/3765-1.bugfix -A news/3765-2.bugfix -A news/3765-3.bugfix -A news/3765-4.bugfix -A news/3982.internal -A news/3984.internal -M .github/ISSUE_TEMPLATE/PLIP.md -M Products/CMFPlone/browser/configure.zcml -M Products/CMFPlone/controlpanel/browser/tinymce.py -M Products/CMFPlone/interfaces/__init__.py -M Products/CMFPlone/patterns/settings.py -M Products/CMFPlone/patterns/tinymce.py -M Products/CMFPlone/tests/test_patternsettings.py - -b'diff --git a/.github/ISSUE_TEMPLATE/PLIP.md b/.github/ISSUE_TEMPLATE/PLIP.md\nindex 271a1c9345..e570a1162f 100644\n--- a/.github/ISSUE_TEMPLATE/PLIP.md\n+++ b/.github/ISSUE_TEMPLATE/PLIP.md\n@@ -2,8 +2,9 @@\n name: "\\U0001F680 PLIP"\n about: Plone Improvement Proposal\n title: \'\'\n-labels: \'\'\n+labels: \'03 type: feature (plip)\'\n assignees: \'\'\n+projects: \'plone/47\'\n \n ---\n \n@@ -11,9 +12,7 @@ assignees: \'\'\n \n \n- \n-\n \n -Commit: https://github.com/plone/Products.CMFPlone/commit/9aed8290f69261c841a3563316e360aa9556a664 - -Merge branch 'master' into remove-portal_properties - -Files changed: -A news/3988.internal -M .github/ISSUE_TEMPLATE/PLIP.md -M CHANGES.md -M setup.py -D news/3756.bugfix -D news/3765-1.bugfix -D news/3765-2.bugfix -D news/3765-3.bugfix -D news/3765-4.bugfix -D news/3942.bugfix -D news/3942.internal -D news/3945.bugfix -D news/3946.bugfix -D news/3949.bugfix -D news/3952.bugfix -D news/3960.bugfix -D news/3962.bugfix -D news/3964.bugfix -D news/3965.bugfix -D news/3966.bugfix -D news/3967.bugfix -D news/3968.bugfix -D news/3975.bugfix.1 -D news/3975.bugfix.2 -D news/3982.internal -D news/3984.internal -D news/6103.internal - -b'diff --git a/.github/ISSUE_TEMPLATE/PLIP.md b/.github/ISSUE_TEMPLATE/PLIP.md\nindex e570a1162f..df9efd7ad5 100644\n--- a/.github/ISSUE_TEMPLATE/PLIP.md\n+++ b/.github/ISSUE_TEMPLATE/PLIP.md\n@@ -12,7 +12,7 @@ projects: \'plone/47\'\n \n \n \n+## 6.1.0a4.dev0 (2024-07-08)\n+\n+\n+### Bug fixes:\n+\n+- Mockup TinyMCE settings: Remove unused loadingBaseUrl option. 3765-1\n+- Mockup TinyMCE settings: Remove deprecated AtD plugin settings. 3765-2\n+- Mockup TinyMCE settings: Remove unused AtD related views. 3765-3\n+- Mockup TinyMCE settings: Remove unused ITinyMCESpellCheckerSchema and ITinyMCESpellCheckerForm. 3765-4\n+- Fix deprecation warnings in "navtree" code + some micro optimizations\n+ [jensens] #3756\n+- Use details element for collapsibles in the resource registry.\n+ Makes it possible to toggle elements even with broken or missing javascript.\n+ Also properly connect form labels with their inputs.\n+ Fixes #3942\n+- Import INavigationRoot from plone.base, removes DeprecationWarning.\n+ [@jensens] #3945\n+- Use `context` instead of `here` in templates.\n+ Call `@@main_template` (with prefix `@@`) to optimize lookup.\n+ [@jensens] #3946\n+- Reduce DeprecationWarnings. [@jensens] #3949\n+- Fix TypeError in getGroups sorting\n+ [@rohnsha0] #3952\n+- Remove queryCatalog and getFolderContents skins script.\n+ This includes a refactoring in the search RSS and updates to soe tests\n+ [@jensens] #3960\n+- Products.CMFPlone must not depend on plone.api [@jensens] #3962\n+- Removes duplicate `
` in controlpanel templates\n+ [@szakitibi] #3964\n+- Do not test types_not_searched for a element that is not part of the underlying vocabulary.\n+ [@jensens] #3965\n+- Remove unused leftover reference to the Zope2 package from test. [@jensens] #3966\n+- Fix: Traceback in maintenance control panel on shutdown if feature is not available.\n+ Hide button if action is not possible.\n+ [@jensens] #3967\n+- Fixed RegistrationTool to take user email with `__+__@abc.com`.\n+ [@rohnsha0] #3968\n+- Plone upgrade page: show error when upgrade is needed but no upgrades are available.\n+ Especially show a note when the `plone.app.upgrade` package is not available.\n+ [maurits] #3975\n+- Plone upgrade page: show list of previously installed packages that are currently missing.\n+ For example: `plone.app.discussion` may be missing in Plone 6.1, unless you explicitly add it, or depend on the `Plone` package.\n+ [maurits] #3975\n+\n+\n+### Internal:\n+\n+- Resourceregistry controlpanel: zprettify template.\n+ [thet] #3942\n+- Automatically set the label to `03 type: feature (plip)` for PLIPs. @stevepiercy #3982\n+- Automatically add a PLIP issue to the PLIP project board. @stevepiercy #3984\n+- Updated metadata version to 6103.\n+ [maurits] #6103\n+\n ## 6.1.0a3 (2024-04-26)\n \n \ndiff --git a/news/3756.bugfix b/news/3756.bugfix\ndeleted file mode 100644\nindex 4f3c022774..0000000000\n--- a/news/3756.bugfix\n+++ /dev/null\n@@ -1,2 +0,0 @@\n-Fix deprecation warnings in "navtree" code + some micro optimizations\n-[jensens]\ndiff --git a/news/3765-1.bugfix b/news/3765-1.bugfix\ndeleted file mode 100644\nindex befe772169..0000000000\n--- a/news/3765-1.bugfix\n+++ /dev/null\n@@ -1 +0,0 @@\n-Mockup TinyMCE settings: Remove unused loadingBaseUrl option.\ndiff --git a/news/3765-2.bugfix b/news/3765-2.bugfix\ndeleted file mode 100644\nindex 64cdb7bfc9..0000000000\n--- a/news/3765-2.bugfix\n+++ /dev/null\n@@ -1 +0,0 @@\n-Mockup TinyMCE settings: Remove deprecated AtD plugin settings.\ndiff --git a/news/3765-3.bugfix b/news/3765-3.bugfix\ndeleted file mode 100644\nindex 0f699fdb93..0000000000\n--- a/news/3765-3.bugfix\n+++ /dev/null\n@@ -1 +0,0 @@\n-Mockup TinyMCE settings: Remove unused AtD related views.\ndiff --git a/news/3765-4.bugfix b/news/3765-4.bugfix\ndeleted file mode 100644\nindex 47a716e6a4..0000000000\n--- a/news/3765-4.bugfix\n+++ /dev/null\n@@ -1 +0,0 @@\n-Mockup TinyMCE settings: Remove unused ITinyMCESpellCheckerSchema and ITinyMCESpellCheckerForm.\ndiff --git a/news/3942.bugfix b/news/3942.bugfix\ndeleted file mode 100644\nindex a939eff395..0000000000\n--- a/news/3942.bugfix\n+++ /dev/null\n@@ -1,6 +0,0 @@\n-Use details element for collapsibles in the resource registry\n-\n-Makes it possible to toggle elements even with broken or missing javascript.\n-Also properly connect form labels with their inputs.\n-\n-Fixes #3942\ndiff --git a/news/3942.internal b/news/3942.internal\ndeleted file mode 100644\nindex 062c197fa0..0000000000\n--- a/news/3942.internal\n+++ /dev/null\n@@ -1,2 +0,0 @@\n-Resourceregistry controlpanel: zprettify template.\n-[thet]\ndiff --git a/news/3945.bugfix b/news/3945.bugfix\ndeleted file mode 100644\nindex d6e4076422..0000000000\n--- a/news/3945.bugfix\n+++ /dev/null\n@@ -1,2 +0,0 @@\n-Import INavigationRoot from plone.base, removes DeprecationWarning.\n-[@jensens]\n\\ No newline at end of file\ndiff --git a/news/3946.bugfix b/news/3946.bugfix\ndeleted file mode 100644\nindex 1853b16830..0000000000\n--- a/news/3946.bugfix\n+++ /dev/null\n@@ -1,3 +0,0 @@\n-Use `context` instead of `here` in templates.\n-Call `@@main_template` (with prefix `@@`) to optimize lookup.\n-[@jensens]\n\\ No newline at end of file\ndiff --git a/news/3949.bugfix b/news/3949.bugfix\ndeleted file mode 100644\nindex bf15b1c268..0000000000\n--- a/news/3949.bugfix\n+++ /dev/null\n@@ -1 +0,0 @@\n-Reduce DeprecationWarnings. [@jensens]\ndiff --git a/news/3952.bugfix b/news/3952.bugfix\ndeleted file mode 100644\nindex a63571e60a..0000000000\n--- a/news/3952.bugfix\n+++ /dev/null\n@@ -1,2 +0,0 @@\n-Fix TypeError in getGroups sorting\n-[@rohnsha0]\n\\ No newline at end of file\ndiff --git a/news/3960.bugfix b/news/3960.bugfix\ndeleted file mode 100644\nindex b1fe215568..0000000000\n--- a/news/3960.bugfix\n+++ /dev/null\n@@ -1,3 +0,0 @@\n-Remove queryCatalog and getFolderContents skins script.\n-This includes a refactoring in the search RSS and updates to soe tests\n-[@jensens]\ndiff --git a/news/3962.bugfix b/news/3962.bugfix\ndeleted file mode 100644\nindex d49decfcd7..0000000000\n--- a/news/3962.bugfix\n+++ /dev/null\n@@ -1 +0,0 @@\n-Products.CMFPlone must not depend on plone.api [@jensens]\ndiff --git a/news/3964.bugfix b/news/3964.bugfix\ndeleted file mode 100644\nindex 08994471a3..0000000000\n--- a/news/3964.bugfix\n+++ /dev/null\n@@ -1,2 +0,0 @@\n-Removes duplicate `
` in controlpanel templates\n-[@szakitibi]\ndiff --git a/news/3965.bugfix b/news/3965.bugfix\ndeleted file mode 100644\nindex de4d0d6091..0000000000\n--- a/news/3965.bugfix\n+++ /dev/null\n@@ -1,2 +0,0 @@\n-Do not test types_not_searched for a element that is not part of the underlying vocabulary.\n-[@jensens]\ndiff --git a/news/3966.bugfix b/news/3966.bugfix\ndeleted file mode 100644\nindex 1c962a9e34..0000000000\n--- a/news/3966.bugfix\n+++ /dev/null\n@@ -1 +0,0 @@\n-Remove unused leftover reference to the Zope2 package from test. [@jensens]\ndiff --git a/news/3967.bugfix b/news/3967.bugfix\ndeleted file mode 100644\nindex 8cbd922fef..0000000000\n--- a/news/3967.bugfix\n+++ /dev/null\n@@ -1,3 +0,0 @@\n-Fix: Traceback in maintenance control panel on shutdown if feature is not available.\n-Hide button if action is not possible.\n-[@jensens]\ndiff --git a/news/3968.bugfix b/news/3968.bugfix\ndeleted file mode 100644\nindex c81fb575d7..0000000000\n--- a/news/3968.bugfix\n+++ /dev/null\n@@ -1,2 +0,0 @@\n-Fixed RegistrationTool to take user email with `__+__@abc.com`.\n-[@rohnsha0]\n\\ No newline at end of file\ndiff --git a/news/3975.bugfix.1 b/news/3975.bugfix.1\ndeleted file mode 100644\nindex e93d7ef4ab..0000000000\n--- a/news/3975.bugfix.1\n+++ /dev/null\n@@ -1,3 +0,0 @@\n-Plone upgrade page: show error when upgrade is needed but no upgrades are available.\n-Especially show a note when the `plone.app.upgrade` package is not available.\n-[maurits]\ndiff --git a/news/3975.bugfix.2 b/news/3975.bugfix.2\ndeleted file mode 100644\nindex ffd645a7c0..0000000000\n--- a/news/3975.bugfix.2\n+++ /dev/null\n@@ -1,3 +0,0 @@\n-Plone upgrade page: show list of previously installed packages that are currently missing.\n-For example: `plone.app.discussion` may be missing in Plone 6.1, unless you explicitly add it, or depend on the `Plone` package.\n-[maurits]\ndiff --git a/news/3982.internal b/news/3982.internal\ndeleted file mode 100644\nindex f2a9d60744..0000000000\n--- a/news/3982.internal\n+++ /dev/null\n@@ -1 +0,0 @@\n-Automatically set the label to `03 type: feature (plip)` for PLIPs. @stevepiercy\ndiff --git a/news/3984.internal b/news/3984.internal\ndeleted file mode 100644\nindex 97a602f581..0000000000\n--- a/news/3984.internal\n+++ /dev/null\n@@ -1 +0,0 @@\n-Automatically add a PLIP issue to the PLIP project board. @stevepiercy\ndiff --git a/news/3988.internal b/news/3988.internal\nnew file mode 100644\nindex 0000000000..420c7c968f\n--- /dev/null\n+++ b/news/3988.internal\n@@ -0,0 +1 @@\n+Update the link to the PLIPs page for Plone 6 Documentation. @stevepiercy\ndiff --git a/news/6103.internal b/news/6103.internal\ndeleted file mode 100644\nindex efbd58ca7e..0000000000\n--- a/news/6103.internal\n+++ /dev/null\n@@ -1,2 +0,0 @@\n-Updated metadata version to 6103.\n-[maurits]\ndiff --git a/setup.py b/setup.py\nindex 52f7d51108..d296af837a 100644\n--- a/setup.py\n+++ b/setup.py\n@@ -2,7 +2,7 @@\n from setuptools import setup\n \n \n-version = "6.1.0a4.dev0"\n+version = "6.1.0a4.dev1"\n \n \n setup(\n' - -Repository: Products.CMFPlone - - -Branch: refs/heads/master -Date: 2024-07-25T22:09:27+02:00 -Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/Products.CMFPlone/commit/72432f2f01baa490c526dfa74c7693e22712adf4 +Date: 2024-07-26T22:02:51+02:00 +Author: Maurits van Rees (mauritsvanrees) +Commit: https://github.com/plone/plone.app.testing/commit/72970c70321e3331bfe75a8424237cff4b7758ea -Merge pull request #3978 from plone/remove-portal_properties +Merge pull request #97 from plone/distributions -Remove `propertiestool` import step and usage of `portal_properties`. +PloneFixture: explicitly install plone.app.contenttypes:default. Files changed: -A news/125.breaking -M Products/CMFPlone/PloneTool.py -M Products/CMFPlone/browser/author.py -M Products/CMFPlone/browser/templates/ajax_main_template.pt -M Products/CMFPlone/browser/templates/main_template.pt -M Products/CMFPlone/exportimport/configure.zcml -M Products/CMFPlone/profiles/default/componentregistry.xml -M Products/CMFPlone/profiles/default/toolset.xml -M Products/CMFPlone/tests/testNavigationView.py -M Products/CMFPlone/tests/testPortalCreation.py -M Products/CMFPlone/tests/testWebDAV.py -M Products/CMFPlone/tests/test_defaultpage.py -M Products/CMFPlone/tests/test_zmi.py -D Products/CMFPlone/exportimport/propertiestool.py -D Products/CMFPlone/exportimport/tests/testPropertiesTool.py -D Products/CMFPlone/profiles/default/propertiestool.xml +A news/3961.feature +M src/plone/app/testing/layers.py -b'diff --git a/Products/CMFPlone/PloneTool.py b/Products/CMFPlone/PloneTool.py\nindex 886d93ff63..e5ec5bd1be 100644\n--- a/Products/CMFPlone/PloneTool.py\n+++ b/Products/CMFPlone/PloneTool.py\n@@ -623,9 +623,8 @@ def browserDefault(self, obj):\n # 3. If the object has a property default_page set and this gives a list\n # of, or single, object id, and that object is is found in the\n # folder or is the name of a skin template, return that id\n- # 4. If the property default_page is set in site_properties and that\n- # property contains a list of ids of which one id is found in the\n- # folder, return that id\n+ # 4. Look up the property plone.default_page in the registry for\n+ # magic ids and test these.\n # 5. If the object implements IBrowserDefault, try to get the selected\n # layout.\n # 6. If the type has a \'folderlisting\' action and no default page is\n@@ -928,7 +927,7 @@ def getUserFriendlyTypes(self, typesList=None):\n # and selection purposes.\n #\n # This is the list of types available in the portal, minus those\n- # defined in the types_not_searched property in site_properties, if it\n+ # defined in the types_not_searched property in the registry, if it\n # exists.\n #\n # If typesList is given, this is used as the base list; else all types\ndiff --git a/Products/CMFPlone/browser/author.py b/Products/CMFPlone/browser/author.py\nindex 644099ea71..2b0fef236c 100644\n--- a/Products/CMFPlone/browser/author.py\n+++ b/Products/CMFPlone/browser/author.py\n@@ -5,7 +5,6 @@\n from plone.base.interfaces.controlpanel import IMailSchema\n from plone.base.utils import pretty_title_or_id\n from plone.registry.interfaces import IRegistry\n-from Products.CMFCore.interfaces import IPropertiesTool\n from Products.CMFCore.utils import getToolByName\n from Products.Five.browser import BrowserView\n from Products.MailHost.interfaces import IMailHost\n@@ -201,11 +200,7 @@ def home_folder(self, username):\n return self.membership_tool.getHomeFolder(id=username)\n \n def __call__(self):\n- self.portal_properties = getUtility(IPropertiesTool)\n-\n self.portal_catalog = getToolByName(self.context, "portal_catalog")\n-\n- # XXX: getUtility call does not work.\n self.membership_tool = getToolByName(self.context, "portal_membership")\n \n self.portal_state = getMultiAdapter(\ndiff --git a/Products/CMFPlone/browser/templates/ajax_main_template.pt b/Products/CMFPlone/browser/templates/ajax_main_template.pt\nindex 81eab03a4a..f4efc3b8e7 100644\n--- a/Products/CMFPlone/browser/templates/ajax_main_template.pt\n+++ b/Products/CMFPlone/browser/templates/ajax_main_template.pt\n@@ -15,7 +15,6 @@\n dummy python: plone_layout.mark_view(view);\n portal_url python:portal_state.portal_url();\n checkPermission python:context.restrictedTraverse(\'portal_membership\').checkPermission;\n- site_properties python:context.restrictedTraverse(\'portal_properties\').site_properties;\n ajax_include_head python:request.get(\'ajax_include_head\', False);\n ajax_load python:False;"\n i18n:domain="plone"\ndiff --git a/Products/CMFPlone/browser/templates/main_template.pt b/Products/CMFPlone/browser/templates/main_template.pt\nindex 9bffd9a9bb..efe9eac05e 100644\n--- a/Products/CMFPlone/browser/templates/main_template.pt\n+++ b/Products/CMFPlone/browser/templates/main_template.pt\n@@ -15,7 +15,6 @@\n dummy python: plone_layout.mark_view(view);\n portal_url python:portal_state.portal_url();\n checkPermission python:context.restrictedTraverse(\'portal_membership\').checkPermission;\n- site_properties python:context.restrictedTraverse(\'portal_properties\').site_properties;\n ajax_include_head python:request.get(\'ajax_include_head\', False);\n ajax_load python:False;"\n i18n:domain="plone"\ndiff --git a/Products/CMFPlone/exportimport/configure.zcml b/Products/CMFPlone/exportimport/configure.zcml\nindex ca451845e8..b3fe625468 100644\n--- a/Products/CMFPlone/exportimport/configure.zcml\n+++ b/Products/CMFPlone/exportimport/configure.zcml\n@@ -54,19 +54,9 @@\n \n \n \n- \n \n \n \n- \n- \n- \n-\n \n \n- \n-\n \n \n- \n-\n- \n-\n \n \n- \n-\n \n-\n- Site wide properties\n- True\n-\n-"""\n-\n-_PROPERTIESTOOL_XML = b"""\\\n-\n-\n- \n- Site wide properties\n- True\n- \n-\n-"""\n-\n-\n-class PropertySheetXMLAdapterTests(BodyAdapterTestCase):\n- def _getTargetClass(self):\n- from Products.CMFPlone.exportimport.propertiestool import (\n- SimpleItemWithPropertiesXMLAdapter,\n- )\n-\n- return SimpleItemWithPropertiesXMLAdapter\n-\n- def _populate(self, obj):\n- obj.manage_changeProperties(title="Site wide properties")\n- obj.manage_addProperty("displayPublicationDateInByline", True, "boolean")\n-\n- def setUp(self):\n- from plone.base.interfaces import ISimpleItemWithProperties\n- from Products.GenericSetup.interfaces import IBody\n- from Products.GenericSetup.interfaces import ISetupEnviron\n-\n- provideAdapter(\n- self._getTargetClass(), (ISimpleItemWithProperties, ISetupEnviron), IBody\n- )\n-\n- self._obj = SimpleItemWithProperties("site_properties")\n- self._BODY = _PROPERTYSHEET_XML\n-\n-\n-class PropertiesToolXMLAdapterTests(BodyAdapterTestCase):\n- def _getTargetClass(self):\n- from Products.CMFPlone.exportimport.propertiestool import (\n- PlonePropertiesToolXMLAdapter,\n- )\n-\n- return PlonePropertiesToolXMLAdapter\n-\n- def _populate(self, obj):\n- obj._setObject("site_properties", SimpleItemWithProperties("site_properties"))\n- obj.site_properties.manage_changeProperties(title="Site wide properties")\n- obj.site_properties.manage_addProperty(\n- "displayPublicationDateInByline", True, "boolean"\n- )\n-\n- def setUp(self):\n- from plone.base.interfaces import IPropertiesTool\n- from plone.base.interfaces import ISimpleItemWithProperties\n- from Products.CMFPlone.exportimport.propertiestool import (\n- SimpleItemWithPropertiesXMLAdapter,\n- )\n- from Products.GenericSetup.interfaces import IBody\n- from Products.GenericSetup.interfaces import ISetupEnviron\n-\n- provideAdapter(self._getTargetClass(), (IPropertiesTool, ISetupEnviron), IBody)\n- provideAdapter(\n- SimpleItemWithPropertiesXMLAdapter,\n- (ISimpleItemWithProperties, ISetupEnviron),\n- IBody,\n- )\n-\n- self._obj = PropertiesTool()\n- self._BODY = _PROPERTIESTOOL_XML\n-\n-\n-def test_suite():\n- from unittest import makeSuite\n- from unittest import TestSuite\n-\n- suite = TestSuite()\n- suite.addTest(makeSuite(PropertySheetXMLAdapterTests))\n- suite.addTest(makeSuite(PropertiesToolXMLAdapterTests))\n- return suite\ndiff --git a/Products/CMFPlone/profiles/default/componentregistry.xml b/Products/CMFPlone/profiles/default/componentregistry.xml\nindex f35d005476..f1195c4eb2 100644\n--- a/Products/CMFPlone/profiles/default/componentregistry.xml\n+++ b/Products/CMFPlone/profiles/default/componentregistry.xml\n@@ -68,9 +68,6 @@\n \n- \n \ndiff --git a/Products/CMFPlone/profiles/default/propertiestool.xml b/Products/CMFPlone/profiles/default/propertiestool.xml\ndeleted file mode 100644\nindex d90844dacd..0000000000\n--- a/Products/CMFPlone/profiles/default/propertiestool.xml\n+++ /dev/null\n@@ -1,15 +0,0 @@\n-\n-\n- \n- NavigationTree properties\n- \n- \n- Site wide properties\n- \n-\ndiff --git a/Products/CMFPlone/profiles/default/toolset.xml b/Products/CMFPlone/profiles/default/toolset.xml\nindex dfbff83fe0..1a225138d1 100644\n--- a/Products/CMFPlone/profiles/default/toolset.xml\n+++ b/Products/CMFPlone/profiles/default/toolset.xml\n@@ -42,9 +42,6 @@\n \n- \n \ndiff --git a/Products/CMFPlone/tests/testNavigationView.py b/Products/CMFPlone/tests/testNavigationView.py\nindex fa8d525a6b..aeddd0ba26 100644\n--- a/Products/CMFPlone/tests/testNavigationView.py\n+++ b/Products/CMFPlone/tests/testNavigationView.py\n@@ -121,29 +121,6 @@ def path(x):\n self.assertEqual(subfolder221map["item"].getPath(), path(subfolder221))\n self.assertEqual(len(subfolder221map["children"]), 0)\n \n- def testSitemapUnchangedWithTopLevel(self):\n- # Test that setting topLevel does not alter the sitemap\n- ntp = self.portal.portal_properties.navtree_properties\n- for topLevel in range(0, 5):\n- ntp.manage_changeProperties(topLevel=topLevel)\n- view = self.view_class(self.portal, self.request)\n- sitemap = view.siteMap()\n- self.assertEqual(\n- sitemap["children"][-1]["item"].getPath(), "/plone/folder2"\n- )\n-\n- def testSitemapUnchangedWithBottomLevel(self):\n- # Test that setting bottomLevel does not alter the sitemap\n- ntp = self.portal.portal_properties.navtree_properties\n- for bottomLevel in range(0, 5):\n- ntp.manage_changeProperties(bottomLevel=bottomLevel)\n- view = self.view_class(self.portal, self.request)\n- sitemap = view.siteMap()\n- self.assertEqual(\n- sitemap["children"][-1]["item"].getPath(), "/plone/folder2"\n- )\n- self.assertTrue(len(sitemap["children"][-1]["children"]) > 0)\n-\n def testSitemapWithNavigationRoot(self):\n self.navigation_settings.root = "/folder2"\n view = self.view_class(self.portal, self.request)\n@@ -270,7 +247,7 @@ def testTabInfo(self):\n self.assertTrue("review_state" in tab and tab["review_state"])\n \n def testDisableFolderTabs(self):\n- # Setting the site_property disable_folder_sections should remove\n+ # Setting the registry setting generate_tabs to False should remove\n # all folder based tabs\n self.navigation_settings.generate_tabs = False\n view = self.view_class(self.portal, self.request)\ndiff --git a/Products/CMFPlone/tests/testPortalCreation.py b/Products/CMFPlone/tests/testPortalCreation.py\nindex 080d3c6beb..f3474cf2c7 100644\n--- a/Products/CMFPlone/tests/testPortalCreation.py\n+++ b/Products/CMFPlone/tests/testPortalCreation.py\n@@ -42,7 +42,6 @@ def afterSetUp(self):\n self.types = self.portal.portal_types\n self.cp = self.portal.portal_controlpanel\n self.actions = self.portal.portal_actions\n- self.properties = self.portal.portal_properties\n self.memberdata = self.portal.portal_memberdata\n self.catalog = self.portal.portal_catalog\n self.groups = self.portal.portal_groups\n@@ -146,35 +145,11 @@ def testNoPortalNavigationTool(self):\n # portal_navigation should have been removed\n self.assertFalse("portal_navigation" in self.portal)\n \n- def testNoFormProperties(self):\n- # form_properties should have been removed\n- self.assertFalse("form_properties" in self.properties)\n-\n- def testNoNavigationProperties(self):\n- # navigation_properties should have been removed\n- self.assertFalse("navigation_properties" in self.properties)\n-\n def testFormToolTipsProperty(self):\n # formtooltips should have been removed\n self.assertFalse(self.memberdata.hasProperty("formtooltips"))\n \n def testNavTreeProperties(self):\n- # navtree_properties should contain the new properties\n- self.assertFalse(\n- self.properties.navtree_properties.hasProperty("parentMetaTypesNotToQuery")\n- )\n- self.assertFalse(self.properties.navtree_properties.hasProperty("sitemapDepth"))\n- self.assertFalse(\n- self.properties.navtree_properties.hasProperty("showAllParents")\n- )\n- self.assertFalse(\n- self.properties.navtree_properties.hasProperty("metaTypesNotToList")\n- ) # noqa\n- self.assertFalse(\n- self.properties.navtree_properties.hasProperty("sortAttribute")\n- )\n- self.assertFalse(self.properties.navtree_properties.hasProperty("sortOrder"))\n-\n registry = getUtility(IRegistry)\n self.assertTrue("plone.workflow_states_to_show" in registry)\n self.assertTrue("plone.filter_on_workflow" in registry)\n@@ -946,9 +921,6 @@ def testFinalStepsWithMembersFolderDeleted(self):\n \n \n class TestManagementPageCharset(PloneTestCase.PloneTestCase):\n- def afterSetUp(self):\n- self.properties = self.portal.portal_properties\n-\n def testManagementPageCharset(self):\n manage_charset = getattr(self.portal, "management_page_charset", None)\n self.assertTrue(manage_charset)\ndiff --git a/Products/CMFPlone/tests/testWebDAV.py b/Products/CMFPlone/tests/testWebDAV.py\nindex 2105ae4390..e3938407ef 100644\n--- a/Products/CMFPlone/tests/testWebDAV.py\n+++ b/Products/CMFPlone/tests/testWebDAV.py\n@@ -18,17 +18,6 @@\n """\n \n \n-class TestDAVProperties(PloneTestCase.PloneTestCase):\n- def testPropertiesToolTitle(self):\n- ptool = getToolByName(self.portal, "portal_properties")\n- psets = dict(ptool.propertysheets.items())\n- self.assertTrue("webdav" in psets.keys())\n- default = psets["webdav"]\n- items = dict(default.propertyItems())\n- self.assertTrue("displayname" in items.keys())\n- self.assertEqual(items["displayname"], ptool.title)\n-\n-\n class TestPUTObjects(PloneTestCase.PloneTestCase):\n # PUT objects into Plone including special cases like index_html.\n # Confirms fix for http://dev.plone.org/plone/ticket/1375\ndiff --git a/Products/CMFPlone/tests/test_defaultpage.py b/Products/CMFPlone/tests/test_defaultpage.py\nindex 3be7eafd7d..ac633b5d6b 100644\n--- a/Products/CMFPlone/tests/test_defaultpage.py\n+++ b/Products/CMFPlone/tests/test_defaultpage.py\n@@ -106,8 +106,8 @@ def test_get_default_page_step_3_2(self):\n self.assertEqual("d1", get_default_page(self.folder))\n \n def test_get_default_page_step_4(self):\n- # 4. Else, look up the property default_page in site_properties for\n- # magic ids and test these\n+ # 4. Else, look up the property plone.default_page in the registry for\n+ # magic ids and test these\n registry = getUtility(IRegistry)\n registry["plone.default_page"] = ["d1"]\n self.folder.invokeFactory("Document", "d1", title="Doc 1")\ndiff --git a/Products/CMFPlone/tests/test_zmi.py b/Products/CMFPlone/tests/test_zmi.py\nindex 3ec5997246..8be5e75e98 100644\n--- a/Products/CMFPlone/tests/test_zmi.py\n+++ b/Products/CMFPlone/tests/test_zmi.py\n@@ -121,11 +121,6 @@ def test_portal_modifier(self):\n view = self.portal.restrictedTraverse(url)\n self.assertTrue(view(), msg=f"{url} is broken")\n \n- def test_portal_properties(self):\n- url = "portal_properties/manage_main"\n- view = self.portal.restrictedTraverse(url)\n- self.assertTrue(view(), msg=f"{url} is broken")\n-\n def test_portal_purgepolicy(self):\n url = "portal_purgepolicy/manage_propertiesForm"\n view = self.portal.restrictedTraverse(url)\ndiff --git a/news/125.breaking b/news/125.breaking\nnew file mode 100644\nindex 0000000000..6c3870d67e\n--- /dev/null\n+++ b/news/125.breaking\n@@ -0,0 +1,3 @@\n+Remove `propertiestool` import step and usage of `portal_properties`.\n+Remove `site_properties` from `main_template.pt` and ajax template.\n+[maurits]\n' +b'diff --git a/news/3961.feature b/news/3961.feature\nnew file mode 100644\nindex 0000000..2c653dc\n--- /dev/null\n+++ b/news/3961.feature\n@@ -0,0 +1,4 @@\n+PloneFixture: explicitly install plone.app.contenttypes:default.\n+The `addPloneSite` factory in Plone 6.1 no longer installs this by default.\n+[maurits]\n+\ndiff --git a/src/plone/app/testing/layers.py b/src/plone/app/testing/layers.py\nindex e1eb75b..6b787c3 100644\n--- a/src/plone/app/testing/layers.py\n+++ b/src/plone/app/testing/layers.py\n@@ -70,7 +70,10 @@ class PloneFixture(Layer):\n )\n \n # Extension profiles to be installed with site setup\n- extensionProfiles = ("plonetheme.barceloneta:default",)\n+ extensionProfiles = (\n+ "plone.app.contenttypes:default",\n+ "plonetheme.barceloneta:default",\n+ )\n \n # Layer lifecycle\n \n'