Skip to content

Commit 42bc9c7

Browse files
committed
tests: Add test for related field descriptor
1 parent ec1bc8d commit 42bc9c7

File tree

4 files changed

+17
-12
lines changed

4 files changed

+17
-12
lines changed

djangocms_frontend/cms_plugins.py

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from cms.plugin_base import CMSPluginBase
33
from django.utils.encoding import force_str
44

5-
from djangocms_frontend.helpers import get_related_object
5+
from djangocms_frontend.helpers import get_related
66

77
if hasattr(CMSPluginBase, "edit_field"):
88
# FrontendEditable functionality already implemented in core?
@@ -12,15 +12,6 @@
1212
from .helpers import FrontendEditableAdminMixin
1313

1414

15-
def _get_related(instance, key):
16-
def get_related():
17-
obj = get_related_object(instance.config, key)
18-
setattr(instance, key, obj)
19-
return obj
20-
get_related.__name__ = key
21-
return get_related
22-
23-
2415
class CMSUIPlugin(FrontendEditableAdminMixin, CMSPluginBase):
2516
render_template = "djangocms_frontend/html_container.html"
2617
change_form_template = "djangocms_frontend/admin/base.html"
@@ -32,7 +23,7 @@ def render(self, context, instance, placeholder):
3223
for key, value in instance.config.items():
3324
if isinstance(value, dict) and set(value.keys()) == {"pk", "model"}:
3425
if key not in instance.__dir__(): # hasattr would return the value in the config dict
35-
setattr(instance, key, _get_related(instance, key))
26+
setattr(instance.__class__, key, get_related(key))
3627
return super().render(context, instance, placeholder)
3728

3829
def get_plugin_urls(self):

djangocms_frontend/helpers.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,18 @@ def get_related_object(scope, field_name):
3131
return relobj
3232

3333

34+
class get_related:
35+
"""Descriptor lazily getting related objects from the config dict."""
36+
def __init__(self, key):
37+
self.key = key
38+
39+
def __get__(self, instance, owner):
40+
obj = get_related_object(instance.config, self.key)
41+
if obj is not None:
42+
setattr(instance, self.key, obj)
43+
return obj
44+
45+
3446
def insert_fields(fieldsets, new_fields, block=None, position=-1, blockname=None, blockattrs=None):
3547
"""
3648
creates a copy of fieldsets inserting the new fields either in the indexed block at the position,

tests/image/test_plugins.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def test_plugin(self):
4545
plugin_type=ImagePlugin.__name__,
4646
language=self.language,
4747
config={
48-
"image": {"pk": self.image.id, "model": "filer.Image"},
48+
"picture": {"pk": self.image.id, "model": "filer.Image"},
4949
"picture_fluid": False,
5050
"picture_rounded": True,
5151
"picture_thumbnail": True,

tests/link/test_plugins.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ def test_plugin(self):
7171
self.assertEqual(response.status_code, 200)
7272
self.assertContains(response, "btn-primary")
7373
self.assertContains(response, 'href="/content/"')
74+
# Finally, test the descriptor
75+
self.assertEqual(plugin.internal_link, self.page)
7476

7577
# alternate version broken link
7678
plugin = add_plugin(

0 commit comments

Comments
 (0)