diff --git a/news/1884.feature b/news/1884.feature new file mode 100644 index 000000000..fe0ed9c9f --- /dev/null +++ b/news/1884.feature @@ -0,0 +1 @@ +Added `multilingual` feature to @site endpoint. @sneridagh diff --git a/src/plone/restapi/services/site/get.py b/src/plone/restapi/services/site/get.py index 39c4b7c96..d919e326b 100644 --- a/src/plone/restapi/services/site/get.py +++ b/src/plone/restapi/services/site/get.py @@ -4,6 +4,7 @@ from plone.event.utils import validated_timezone from plone.i18n.interfaces import ILanguageSchema from plone.registry.interfaces import IRegistry +from plone.restapi import HAS_MULTILINGUAL from plone.restapi.bbb import IImagingSchema from plone.restapi.bbb import ISiteSchema from plone.restapi.interfaces import IExpandableElement @@ -17,6 +18,10 @@ from zope.interface import Interface +if HAS_MULTILINGUAL: + from plone.app.multilingual.interfaces import IPloneAppMultilingualInstalled + + @implementer(IExpandableElement) @adapter(Interface, Interface) class Site: @@ -83,6 +88,8 @@ def features(self): "filter_aliases_by_date": hasattr( RedirectionSet, "supports_date_range_filtering" ), + "multilingual": HAS_MULTILINGUAL + and IPloneAppMultilingualInstalled.providedBy(self.request), } return result diff --git a/src/plone/restapi/tests/http-examples/site_get.resp b/src/plone/restapi/tests/http-examples/site_get.resp index 417c0cbf8..a304ab1db 100644 --- a/src/plone/restapi/tests/http-examples/site_get.resp +++ b/src/plone/restapi/tests/http-examples/site_get.resp @@ -4,7 +4,8 @@ Content-Type: application/json { "@id": "http://localhost:55001/plone/@site", "features": { - "filter_aliases_by_date": true + "filter_aliases_by_date": true, + "multilingual": false }, "plone.allowed_sizes": [ "huge 1600:65536", diff --git a/src/plone/restapi/tests/test_services_site.py b/src/plone/restapi/tests/test_services_site.py index 807562205..2f94e0482 100644 --- a/src/plone/restapi/tests/test_services_site.py +++ b/src/plone/restapi/tests/test_services_site.py @@ -1,8 +1,11 @@ +from plone.app.multilingual.interfaces import IPloneAppMultilingualInstalled from plone.app.testing import setRoles from plone.app.testing import TEST_USER_ID from plone.restapi.testing import PLONE_RESTAPI_DX_FUNCTIONAL_TESTING +from plone.restapi.testing import PLONE_RESTAPI_DX_PAM_FUNCTIONAL_TESTING from plone.restapi.testing import RelativeSession from zope.component import getMultiAdapter +from zope.interface import alsoProvides import unittest @@ -37,3 +40,28 @@ def test_get_site(self): self.assertIn("plone.available_languages", response.json()) self.assertIn("plone.default_language", response.json()) self.assertEqual(response.json()["plone.portal_timezone"], "UTC") + self.assertEqual(response.json()["features"]["multilingual"], False) + + +class TestServicesSiteMultilingual(unittest.TestCase): + + layer = PLONE_RESTAPI_DX_PAM_FUNCTIONAL_TESTING + + def setUp(self): + self.portal = self.layer["portal"] + self.portal_url = self.portal.absolute_url() + self.request = self.layer["request"] + + self.api_session = RelativeSession(self.portal_url, test=self) + self.api_session.headers.update({"Accept": "application/json"}) + + alsoProvides(self.layer["request"], IPloneAppMultilingualInstalled) + + def tearDown(self): + self.api_session.close() + + def test_site_is_multilingual(self): + response = self.api_session.get("/@site") + + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json()["features"]["multilingual"], True)