plone.restapi/translate-workflow-titles: Add a few functional tests for expansion.

Timo Stollenwerk <jenkins-z4DKO/[email protected]>
Newsgroups gmane.comp.web.zope.plone.cvs
Message-ID <[email protected]>
Repository: plone.restapi
Branch: refs/heads/translate-workflow-titles
Date: 2017-07-26T15:40:50+02:00
Author: Timo Stollenwerk (tisto) <tisto-z4DKO/[email protected]>
Commit: https://github.com/plone/plone.restapi/commit/349068e1544b954d39e038a7761076020310e820

Add a few functional tests for expansion.

Files changed:
M src/plone/restapi/tests/test_expansion.py

diff --git a/src/plone/restapi/tests/test_expansion.py b/src/plone/restapi/tests/test_expansion.py
index 51193401..5d5ceafb 100644
--- a/src/plone/restapi/tests/test_expansion.py
+++ b/src/plone/restapi/tests/test_expansion.py
@@ -1,4 +1,11 @@
 # -*- coding: utf-8 -*-
+from plone.app.testing import setRoles
+from plone.app.testing import SITE_OWNER_NAME
+from plone.app.testing import SITE_OWNER_PASSWORD
+from plone.app.testing import TEST_USER_ID
+from plone.dexterity.utils import createContentInContainer
+from plone.restapi.testing import PLONE_RESTAPI_DX_FUNCTIONAL_TESTING
+from plone.restapi.testing import RelativeSession
 from plone.restapi.interfaces import IExpandableElement
 from plone.restapi.serializer.expansion import expandable_elements
 from zope.component import provideAdapter
@@ -6,6 +13,7 @@
 from zope.publisher.browser import TestRequest
 from zope.publisher.interfaces.browser import IBrowserRequest
 
+import transaction
 import unittest
 
 
@@ -68,3 +76,126 @@ def test_expansion_returns_multiple_expanded_elements(self):
         self.assertEqual(
             {'@components': {'bar': 'expanded', 'foo': 'expanded'}},
             expandable_elements(None, request))
+
+
+class TestExpansionFunctional(unittest.TestCase):
+
+    layer = PLONE_RESTAPI_DX_FUNCTIONAL_TESTING
+
+    def setUp(self):
+        self.app = self.layer['app']
+        self.portal = self.layer['portal']
+        self.portal_url = self.portal.absolute_url()
+        setRoles(self.portal, TEST_USER_ID, ['Manager'])
+
+        self.api_session = RelativeSession(self.portal_url)
+        self.api_session.headers.update({'Accept': 'application/json'})
+        self.api_session.auth = (SITE_OWNER_NAME, SITE_OWNER_PASSWORD)
+
+        self.folder = createContentInContainer(
+            self.portal, u'Folder',
+            id=u'folder',
+            title=u'Some Folder')
+        transaction.commit()
+
+    def test_navigation_is_expandable(self):
+        response = self.api_session.get('/folder')
+
+        self.assertEqual(response.status_code, 200)
+        self.assertIn(
+            'navigation',
+            response.json().get('@components').keys()
+        )
+
+    def test_navigation_expanded(self):
+        response = self.api_session.get(
+            '/folder',
+            params={
+                "expand": "navigation"
+            }
+        )
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(
+            [
+                {
+                    u'title': u'Home',
+                    u'url': u'http://localhost:55001/plone'
+                },
+                {
+                    u'title': u'Some Folder',
+                    u'url': u'http://localhost:55001/plone/folder'
+                }
+            ],
+            response.json()['@components']['navigation']['items']
+        )
+
+    def test_breadcrumbs_is_expandable(self):
+        response = self.api_session.get('/folder')
+
+        self.assertEqual(response.status_code, 200)
+        self.assertIn(
+            'breadcrumbs',
+            response.json().get('@components').keys()
+        )
+
+    def test_breadcrumbs_expanded(self):
+        response = self.api_session.get(
+            '/folder',
+            params={
+                "expand": "breadcrumbs"
+            }
+        )
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(
+            [
+                {
+                    u'title': u'Some Folder',
+                    u'url': u'http://localhost:55001/plone/folder'
+                }
+            ],
+            response.json()['@components']['breadcrumbs']['items']
+        )
+
+    def test_workflow_is_expandable(self):
+        response = self.api_session.get('/folder')
+
+        self.assertEqual(response.status_code, 200)
+        self.assertIn(
+            'workflow',
+            response.json().get('@components').keys()
+        )
+
+    def test_workflow_expanded(self):
+        response = self.api_session.get(
+            '/folder',
+            params={
+                "expand": "workflow"
+            }
+        )
+
+        self.assertEqual(response.status_code, 200)
+        self.assertEqual(
+            u'http://localhost:55001/plone/folder/@workflow',
+            response.json().get('@components').get('workflow').get('@id')
+        )
+        self.assertEqual(
+            u'private',
+            response.json()['@components']['workflow']['history'][0]['review_state']  # noqa
+        )
+        self.assertEqual(
+            u'Private',
+            response.json()['@components']['workflow']['history'][0]['title']
+        )
+        self.assertEqual(
+            [
+                {
+                    u'@id': u'http://localhost:55001/plone/folder/@workflow/publish',  # noqa
+                    u'title': u'Publish'
+                },
+                {
+                    u'@id': u'http://localhost:55001/plone/folder/@workflow/submit',  # noqa
+                    u'title': u'Submit for publication'
+                }
+            ],
+            response.json()['@components']['workflow']['transitions']
+        )



------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.