Skip to content

Commit 0497cb2

Browse files
committed
tests
1 parent b99c9cb commit 0497cb2

2 files changed

Lines changed: 166 additions & 0 deletions

File tree

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
from cs_dynamicpages.adapters.patterns import RelatedImageContentbrowserPatternOptions
2+
from cs_dynamicpages.behaviors.related_image import IImageRelationList
3+
from cs_dynamicpages.testing import CS_DYNAMICPAGES_INTEGRATION_TESTING
4+
from plone import api
5+
from plone.app.testing import setRoles
6+
from plone.app.testing import TEST_USER_ID
7+
8+
9+
try:
10+
from plone.app.z3cform.interfaces import IContentBrowserWidget
11+
except ImportError:
12+
from plone.app.z3cform.interfaces import (
13+
IRelatedItemsWidget as IContentBrowserWidget,
14+
)
15+
16+
from z3c.form.interfaces import IValue
17+
from zope.component import getMultiAdapter
18+
from zope.interface import implementer
19+
from zope.interface import Interface
20+
21+
import unittest
22+
23+
24+
@implementer(Interface)
25+
class DummyContext:
26+
pass
27+
28+
29+
@implementer(Interface)
30+
class DummyRequest:
31+
pass
32+
33+
34+
@implementer(Interface)
35+
class DummyForm:
36+
pass
37+
38+
39+
@implementer(IImageRelationList)
40+
class DummyField:
41+
pass
42+
43+
44+
@implementer(IContentBrowserWidget)
45+
class DummyWidget:
46+
pass
47+
48+
49+
class RelatedImageContentbrowserPatternOptionsTest(unittest.TestCase):
50+
layer = CS_DYNAMICPAGES_INTEGRATION_TESTING
51+
52+
def setUp(self):
53+
"""Custom shared utility setup for tests."""
54+
self.portal = self.layer["portal"]
55+
setRoles(self.portal, TEST_USER_ID, ["Manager"])
56+
57+
def test_adapter_registration(self):
58+
context = DummyContext()
59+
request = DummyRequest()
60+
form = DummyForm()
61+
field = DummyField()
62+
widget = DummyWidget()
63+
64+
adapter = getMultiAdapter(
65+
(context, request, form, field, widget), IValue, name="pattern_options"
66+
)
67+
self.assertIsInstance(adapter, RelatedImageContentbrowserPatternOptions)
68+
69+
def test_adapter_get(self):
70+
context = DummyContext()
71+
request = DummyRequest()
72+
form = DummyForm()
73+
field = DummyField()
74+
widget = DummyWidget()
75+
76+
adapter = getMultiAdapter(
77+
(context, request, form, field, widget), IValue, name="pattern_options"
78+
)
79+
80+
api.portal.set_registry_record("plone.image_objects", ["Image"])
81+
self.assertEqual(
82+
adapter.get(),
83+
{
84+
"recentlyUsed": True,
85+
"selectableTypes": ["Image"],
86+
"upload": True,
87+
},
88+
)
89+
90+
api.portal.set_registry_record("plone.image_objects", ["Image", "CustomImage"])
91+
self.assertEqual(
92+
adapter.get(),
93+
{
94+
"recentlyUsed": True,
95+
"selectableTypes": ["Image", "CustomImage"],
96+
"upload": True,
97+
},
98+
)
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
from cs_dynamicpages.testing import CS_DYNAMICPAGES_FUNCTIONAL_TESTING
2+
from plone import api
3+
from plone.app.testing import setRoles
4+
from plone.app.testing import SITE_OWNER_NAME
5+
from plone.app.testing import SITE_OWNER_PASSWORD
6+
from plone.app.testing import TEST_USER_ID
7+
from plone.testing.zope import Browser
8+
9+
import transaction
10+
import unittest
11+
12+
13+
class RelatedImageFunctionalTest(unittest.TestCase):
14+
layer = CS_DYNAMICPAGES_FUNCTIONAL_TESTING
15+
16+
def setUp(self):
17+
self.portal = self.layer["portal"]
18+
self.request = self.layer["request"]
19+
setRoles(self.portal, TEST_USER_ID, ["Manager"])
20+
21+
# Create a document and apply the behavior to be able to test the form
22+
self.portal.invokeFactory("Document", "doc1", title="Doc 1")
23+
self.doc1 = self.portal["doc1"]
24+
25+
# Apply the behavior to Document type
26+
fti = api.portal.get_tool("portal_types").getTypeInfo("Document")
27+
behaviors = list(fti.behaviors)
28+
behaviors.append("cs_dynamicpages.related_image")
29+
fti.behaviors = tuple(behaviors)
30+
31+
transaction.commit()
32+
33+
self.browser = Browser(self.layer["app"])
34+
self.browser.handleErrors = False
35+
self.browser.addHeader(
36+
"Authorization", f"Basic {SITE_OWNER_NAME}:{SITE_OWNER_PASSWORD}"
37+
)
38+
39+
def test_related_image_pattern_options_in_browser(self):
40+
# We set the registry record
41+
api.portal.set_registry_record("plone.image_objects", ["Image", "CustomImage"])
42+
transaction.commit()
43+
44+
# Open the edit form of the document
45+
self.browser.open(self.doc1.absolute_url() + "/edit")
46+
47+
# The pattern options should be rendered in the HTML for the related_image field
48+
try:
49+
self.assertIn("data-pat-contentbrowser", self.browser.contents)
50+
except AssertionError:
51+
self.assertIn("data-pat-relateditems", self.browser.contents)
52+
53+
self.assertIn(
54+
""selectableTypes": ["Image", "CustomImage"]",
55+
self.browser.contents,
56+
)
57+
58+
# We change the registry record
59+
api.portal.set_registry_record("plone.image_objects", ["Image"])
60+
transaction.commit()
61+
62+
# Open the edit form again
63+
self.browser.open(self.doc1.absolute_url() + "/edit")
64+
65+
# The pattern options should be updated
66+
self.assertIn(
67+
""selectableTypes": ["Image"]", self.browser.contents
68+
)

0 commit comments

Comments
 (0)