Skip to content

Commit 6b2a203

Browse files
authored
Merge pull request #23 from codesyntax/improve-add
fix: do not let adding existing items to the registry through the uti…
2 parents dfac31a + c1415b9 commit 6b2a203

5 files changed

Lines changed: 56 additions & 3 deletions

File tree

news/+addview.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Return false if trying to add a view that exists to the registry @erral

src/cs_dynamicpages/testing.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ def setUpZope(self, app, configurationContext):
1717
# The z3c.autoinclude feature is disabled in the Plone fixture base
1818
# layer.
1919
self.loadZCML(package=cs_dynamicpages)
20+
self.loadZCML(package=cs_dynamicpages, name="testing.zcml")
2021

2122
def setUpPloneSite(self, portal):
2223
applyProfile(portal, "cs_dynamicpages:default")

src/cs_dynamicpages/testing.zcml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<configure
2+
xmlns="http://namespaces.zope.org/zope"
3+
xmlns:browser="http://namespaces.zope.org/browser"
4+
xmlns:plone="http://namespaces.plone.org/plone"
5+
i18n_domain="cs_dynamicpages"
6+
>
7+
8+
<!-- Register a dummy view to be able to use it in tests -->
9+
10+
<configure package=".views">
11+
12+
<browser:page
13+
name="cs_dynamicpages-some-custom-view"
14+
for="cs_dynamicpages.content.dynamic_page_row.IDynamicPageRow"
15+
class=".slider_view.SliderView"
16+
template="slider_view.pt"
17+
permission="zope2.View"
18+
layer="cs_dynamicpages.interfaces.IBrowserLayer"
19+
/>
20+
</configure>
21+
22+
23+
</configure>

src/cs_dynamicpages/tests/test_utils.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from plone import api
1212
from plone.app.testing import setRoles
1313
from plone.app.testing import TEST_USER_ID
14+
from zope.schema.interfaces import WrongContainedType
1415

1516
import unittest
1617

@@ -143,7 +144,7 @@ def test_add_custom_view_returns_true(self):
143144
if existing_views:
144145
# Test with existing view - function should still work
145146
result = add_custom_view(
146-
existing_views[0]["row_type"],
147+
"cs_dynamicpages-some-custom-view",
147148
["title", "description"],
148149
has_button=False,
149150
icon="star",
@@ -153,10 +154,26 @@ def test_add_custom_view_returns_true(self):
153154
else:
154155
self.skipTest("No existing views to test with")
155156

157+
def test_add_custom_view_returns_false(self):
158+
# Use an existing view name
159+
existing_views = get_available_views_for_row()
160+
if existing_views:
161+
# Test with existing view - function should still work
162+
result = add_custom_view(
163+
existing_views[0]["row_type"],
164+
["title", "description"],
165+
has_button=False,
166+
icon="star",
167+
)
168+
# Function returns True even if view already exists
169+
self.assertFalse(result)
170+
else:
171+
self.skipTest("No existing views to test with")
172+
156173
def test_add_custom_view_structure(self):
157174
"""Test that add_custom_view creates correct structure."""
158175
# Test using slider-view which is registered
159-
view_name = "cs_dynamicpages-slider-view"
176+
view_name = "cs_dynamicpages-some-custom-view"
160177
original_len = len(api.portal.get_registry_record(self.record_name))
161178

162179
add_custom_view(view_name, ["title"], has_button=True, icon="heart")
@@ -175,7 +192,7 @@ def test_add_custom_view_structure(self):
175192

176193
def test_add_custom_view_default_icon_is_bricks(self):
177194
"""Test that default icon is 'bricks'."""
178-
view_name = "cs_dynamicpages-featured-view"
195+
view_name = "cs_dynamicpages-some-custom-view"
179196

180197
add_custom_view(view_name, ["title"])
181198

@@ -185,6 +202,13 @@ def test_add_custom_view_default_icon_is_bricks(self):
185202
last_match = matching[-1] # Get the last added one
186203
self.assertEqual(last_match["row_type_icon"], "bricks")
187204

205+
def test_add_not_available_custom_view_fails(self):
206+
"""try to add a view that is not registered"""
207+
view_name = "cs_dynamicpages-this-view-does-not-exist"
208+
209+
with self.assertRaises(WrongContainedType):
210+
add_custom_view(view_name, ["title"])
211+
188212

189213
class EnableBehaviorIntegrationTest(unittest.TestCase):
190214
"""Integration tests for enable_behavior function."""

src/cs_dynamicpages/utils.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ def add_custom_view(
3232
"""utility function to add a given view to the list of available row types"""
3333
record_name = "cs_dynamicpages.dynamic_pages_control_panel.row_type_fields"
3434
values = api.portal.get_registry_record(record_name)
35+
existing_views = [item.get("row_type") for item in values]
36+
if view_name in existing_views:
37+
return False
38+
3539
new_item = {
3640
"row_type": view_name,
3741
"each_row_type_fields": shown_fields,

0 commit comments

Comments
 (0)