diff --git a/.vscode/settings.json b/.vscode/settings.json
index 44937d74..c6d23b56 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,9 +1,8 @@
{
"eslint.workingDirectories": ["./frontend"],
- "flake8.cwd": "${workspaceFolder}/backend",
- "flake8.args": ["--config=pyproject.toml"],
"ruff.organizeImports": true,
"python.terminal.activateEnvironment": true,
+ "python.defaultInterpreterPath": "${workspaceFolder}/backend/.venv/bin/python",
"python.testing.pytestArgs": [
"backend/tests"
],
diff --git a/backend/news/+pytest.internal b/backend/news/+pytest.internal
new file mode 100644
index 00000000..27925962
--- /dev/null
+++ b/backend/news/+pytest.internal
@@ -0,0 +1 @@
+Update pytest-plone to version 1.0.0. @ericof
diff --git a/backend/news/246.feature b/backend/news/246.feature
new file mode 100644
index 00000000..839c0896
--- /dev/null
+++ b/backend/news/246.feature
@@ -0,0 +1 @@
+Add plone.formblock dependency and uninstall collective.volto.formsupport. @ericof
diff --git a/backend/pyproject.toml b/backend/pyproject.toml
index 456c3b02..e7e43af0 100644
--- a/backend/pyproject.toml
+++ b/backend/pyproject.toml
@@ -29,6 +29,7 @@ dependencies = [
"plone.app.querystring==2.1.7",
"kitconcept.voltolighttheme>=8.0.0a9",
"collective.volto.formsupport==3.2.3",
+ "plone.formblock>=1.0.0a2",
"collective.honeypot",
"collective.person==1.0.0b4",
"plone.exportimport>=2.0.0a2",
@@ -41,7 +42,7 @@ test = [
"plone.restapi[test]",
"pytest",
"pytest-cov",
- "pytest-plone>=1.0.0a1",
+ "pytest-plone>=1.0.0",
]
[dependency-groups]
diff --git a/backend/src/kitconcept/core/dependencies.zcml b/backend/src/kitconcept/core/dependencies.zcml
index 2ce733f9..43a5387c 100644
--- a/backend/src/kitconcept/core/dependencies.zcml
+++ b/backend/src/kitconcept/core/dependencies.zcml
@@ -1,11 +1,34 @@
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/backend/src/kitconcept/core/factory.py b/backend/src/kitconcept/core/factory.py
index 48ea254f..886ebbf6 100644
--- a/backend/src/kitconcept/core/factory.py
+++ b/backend/src/kitconcept/core/factory.py
@@ -61,6 +61,8 @@
"plone.restapi",
"plone.volto",
"kitconcept.voltolighttheme",
+ "collective.volto.formsupport",
+ "plone.formblock",
"plonegovbr.socialmedia",
]
_PLONE_PROFILES = [
@@ -97,8 +99,10 @@
"plone.volto:default",
"kitconcept.voltolighttheme:default",
"kitconcept.voltolighttheme:demo",
- "collective.volto.formsupport:default",
+ "plone.formblock:default",
"plonegovbr.socialmedia:demo",
+ # Leave it here until we remove the package
+ "collective.volto.formsupport:default",
]
@@ -149,9 +153,9 @@ class LocalAddonList:
Addon(profile_id="plonetheme.barceloneta:default"),
Addon(profile_id="kitconcept.voltolighttheme:default"),
Addon(profile_id="collective.person:default"),
- Addon(profile_id="collective.volto.formsupport:default"),
Addon(profile_id="plonegovbr.socialmedia:default"),
Addon(profile_id="kitconcept.core:dependencies"),
+ Addon(profile_id="plone.formblock:default"),
])
diff --git a/backend/src/kitconcept/core/profiles/base/metadata.xml b/backend/src/kitconcept/core/profiles/base/metadata.xml
index ddb87044..162413ec 100644
--- a/backend/src/kitconcept/core/profiles/base/metadata.xml
+++ b/backend/src/kitconcept/core/profiles/base/metadata.xml
@@ -1,4 +1,4 @@
- 20260505001
+ 20260619001
diff --git a/backend/src/kitconcept/core/profiles/dependencies/metadata.xml b/backend/src/kitconcept/core/profiles/dependencies/metadata.xml
index 88a7fc21..b077b5f6 100644
--- a/backend/src/kitconcept/core/profiles/dependencies/metadata.xml
+++ b/backend/src/kitconcept/core/profiles/dependencies/metadata.xml
@@ -8,7 +8,7 @@
profile-plone.volto:default
profile-collective.person:default
profile-kitconcept.voltolighttheme:default
- profile-collective.volto.formsupport:default
profile-plonegovbr.socialmedia:default
+ profile-plone.formblock:default
diff --git a/backend/src/kitconcept/core/upgrades/configure.zcml b/backend/src/kitconcept/core/upgrades/configure.zcml
index 426fc0b9..8aedfcbf 100644
--- a/backend/src/kitconcept/core/upgrades/configure.zcml
+++ b/backend/src/kitconcept/core/upgrades/configure.zcml
@@ -12,5 +12,6 @@
+
diff --git a/backend/src/kitconcept/core/upgrades/v20260619001/__init__.py b/backend/src/kitconcept/core/upgrades/v20260619001/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/backend/src/kitconcept/core/upgrades/v20260619001/configure.zcml b/backend/src/kitconcept/core/upgrades/v20260619001/configure.zcml
new file mode 100644
index 00000000..056111f1
--- /dev/null
+++ b/backend/src/kitconcept/core/upgrades/v20260619001/configure.zcml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
diff --git a/backend/tests/conftest.py b/backend/tests/conftest.py
index 3049e583..ae659206 100644
--- a/backend/tests/conftest.py
+++ b/backend/tests/conftest.py
@@ -3,7 +3,6 @@
from kitconcept.core.testing import FUNCTIONAL_TESTING
from kitconcept.core.testing import INTEGRATION_TESTING
from pytest_plone import fixtures_factory
-from zope.component.hooks import site
import pytest
@@ -32,18 +31,7 @@ def current_versions() -> CurrentVersions:
from kitconcept.core import __version__
return CurrentVersions(
- base="20260505001",
+ base="20260619001",
dependencies="1000",
package=__version__,
)
-
-
-@pytest.fixture(scope="class")
-def portal_class(integration_class):
- if hasattr(integration_class, "testSetUp"):
- integration_class.testSetUp()
- portal = integration_class["portal"]
- with site(portal):
- yield portal
- if hasattr(integration_class, "testTearDown"):
- integration_class.testTearDown()
diff --git a/backend/tests/services/conftest.py b/backend/tests/services/conftest.py
index c9b6e956..010ef879 100644
--- a/backend/tests/services/conftest.py
+++ b/backend/tests/services/conftest.py
@@ -1,7 +1,6 @@
from plone.app.testing import SITE_OWNER_NAME
from plone.app.testing import SITE_OWNER_PASSWORD
from plone.restapi.testing import RelativeSession
-from zope.component.hooks import site
import pytest
@@ -12,14 +11,8 @@ def portal(functional):
@pytest.fixture(scope="class")
-def portal_class(functional_class):
- if hasattr(functional_class, "testSetUp"):
- functional_class.testSetUp()
- portal = functional_class["portal"]
- with site(portal):
- yield portal
- if hasattr(functional_class, "testTearDown"):
- functional_class.testTearDown()
+def portal_class(functional_portal_class):
+ yield functional_portal_class
@pytest.fixture()
diff --git a/backend/tests/setup/test_setup_install.py b/backend/tests/setup/test_setup_install.py
index f1821247..fb566e54 100644
--- a/backend/tests/setup/test_setup_install.py
+++ b/backend/tests/setup/test_setup_install.py
@@ -7,7 +7,7 @@
class TestSetupInstall:
@pytest.fixture(autouse=True)
- def _setup(self, current_versions):
+ def _setup(self, current_versions) -> None:
self.profile_version: str = current_versions.base
self.dependencies_profile_version: str = current_versions.dependencies
@@ -59,7 +59,7 @@ def _setup(self, portal_class):
"plone.volto:default",
"plonetheme.barceloneta:default",
"kitconcept.voltolighttheme:default",
- "collective.volto.formsupport:default",
+ "plone.formblock:default",
"plonegovbr.socialmedia:default",
],
)
@@ -67,6 +67,16 @@ def test_installed(self, profile: str):
"""Test if a profile is installed."""
assert self.setup_tool.getLastVersionForProfile(profile) is not None
+ @pytest.mark.parametrize(
+ "profile",
+ [
+ "collective.volto.formsupport:default",
+ ],
+ )
+ def test_uninstalled(self, profile: str):
+ """Test if a profile is not installed."""
+ assert self.setup_tool.getLastVersionForProfile(profile) == "unknown"
+
@pytest.mark.parametrize(
"portal_type,title,klass",
[
diff --git a/backend/uv.lock b/backend/uv.lock
index 4104aab9..be1f7355 100644
--- a/backend/uv.lock
+++ b/backend/uv.lock
@@ -1152,6 +1152,7 @@ dependencies = [
{ name = "plone-app-querystring" },
{ name = "plone-distribution" },
{ name = "plone-exportimport" },
+ { name = "plone-formblock" },
{ name = "products-cmfplone" },
]
@@ -1191,11 +1192,12 @@ requires-dist = [
{ name = "plone-app-testing", marker = "extra == 'test'" },
{ name = "plone-distribution" },
{ name = "plone-exportimport", specifier = ">=2.0.0a2" },
+ { name = "plone-formblock", specifier = ">=1.0.0a2" },
{ name = "plone-restapi", extras = ["test"], marker = "extra == 'test'" },
{ name = "products-cmfplone", specifier = "==6.1.4" },
{ name = "pytest", marker = "extra == 'test'" },
{ name = "pytest-cov", marker = "extra == 'test'" },
- { name = "pytest-plone", marker = "extra == 'test'", specifier = ">=1.0.0a1" },
+ { name = "pytest-plone", marker = "extra == 'test'", specifier = ">=1.0.0" },
]
provides-extras = ["test"]
@@ -2861,6 +2863,25 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/ce/0b/83624d18a1c370a50a84890046d012d6393b851fb1648fa315d3ae5dadae/plone.folder-4.0.1-py3-none-any.whl", hash = "sha256:68886e45058190a2a005ef9247b199ee0c7f51bdefcde5c6419de8c0fe25ac5e", size = 25967, upload-time = "2024-01-22T20:02:32.756Z" },
]
+[[package]]
+name = "plone-formblock"
+version = "1.0.0a2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "beautifulsoup4" },
+ { name = "jsonschema" },
+ { name = "plone-api" },
+ { name = "plone-restapi" },
+ { name = "plone-volto" },
+ { name = "products-cmfplone" },
+ { name = "pyotp" },
+ { name = "souper-plone" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/0c/2c/f184add43539b0b53ceb7857a70cd532af520b9eef28b8fa60b9da3d4e47/plone_formblock-1.0.0a2.tar.gz", hash = "sha256:059ff2452349d79a0e007c80527758d02d771baf9d22f8ab75c7bbff534a2612", size = 133651, upload-time = "2026-06-18T15:23:09.514Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/66/86/c310b2d0202affd415eceee62308fa3b4b3774df5a34b4b641d27d946d47/plone_formblock-1.0.0a2-py3-none-any.whl", hash = "sha256:c91288c9e1821bb556638bfb29630c2cdeb93aba309d0c3c2f59f6e2c6670c66", size = 89528, upload-time = "2026-06-18T15:23:07.894Z" },
+]
+
[[package]]
name = "plone-formwidget-namedfile"
version = "3.1.2"
@@ -4282,7 +4303,7 @@ wheels = [
[[package]]
name = "pytest-plone"
-version = "1.0.0a2"
+version = "1.0.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "plone-api" },
@@ -4292,13 +4313,14 @@ dependencies = [
{ name = "plone-dexterity" },
{ name = "products-cmfplone", extra = ["test"] },
{ name = "pytest" },
+ { name = "requests" },
{ name = "zope-component" },
{ name = "zope-pytestlayer" },
{ name = "zope-schema" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/e8/2e/5ff66321565851d500ce691611f9e2dae1e9260a39ccee119275f1513050/pytest_plone-1.0.0a2.tar.gz", hash = "sha256:9916ff9293463b7e83088d12dab717aa3077b685ef12915b40458d23678683e3", size = 18993, upload-time = "2025-06-11T22:29:04.711Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/44/57/3b6cac92b5554e1c7f124dcb2b8cf25bc3de63668d264fee2c43ab4240ca/pytest_plone-1.0.0.tar.gz", hash = "sha256:3c60b893edc9a1dadf2a21b090b1ca389a2787dc754105ee7b6b35721361a822", size = 28120, upload-time = "2026-05-18T22:12:42.902Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/70/43/386e61230fc75be1a5a49d5b9583637859ccec000fa0536ade1b59bdc360/pytest_plone-1.0.0a2-py3-none-any.whl", hash = "sha256:48c993aef530123dcaa893eeef098fcdc91a02ed89786de0743caae085a45723", size = 16253, upload-time = "2025-06-11T22:29:03.253Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/a8/01780c4ded556b57e617e88e0cd0c2eb11c6f41f0f27aec3d5b3e4c1885d/pytest_plone-1.0.0-py3-none-any.whl", hash = "sha256:51533c8df40947fcf7eae865483bae6e7ac4b94481c55724846cdd86868ef058", size = 23434, upload-time = "2026-05-18T22:12:41.303Z" },
]
[[package]]
diff --git a/news/+vscode.internal b/news/+vscode.internal
new file mode 100644
index 00000000..f8f76d87
--- /dev/null
+++ b/news/+vscode.internal
@@ -0,0 +1 @@
+Update `.vscode/settings.json`. @ericof