Skip to content

Commit a399a8f

Browse files
committed
added new tests
1 parent b66ff06 commit a399a8f

File tree

3 files changed

+60
-1
lines changed

3 files changed

+60
-1
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22
.idea/
33
__pycache__
44
.pytest_cache
5+
*.pytest-deps
56
*.pyc
67
.tox/
78
build/
89
dist/
910

1011
*.db
12+
*.log
1113

1214
.DS_Store
1315
.coverage

view_breadcrumbs/templatetags/view_breadcrumbs.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
55
"""
66

7-
87
from __future__ import unicode_literals
98

109
import logging

view_breadcrumbs/tests/unit/test_breadcrumbs.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import inspect
2+
13
from django.conf import settings
24
from django.test import RequestFactory, TestCase, override_settings
35
from django.utils.encoding import force_str
@@ -68,6 +70,9 @@ class ActionTestMixin(object):
6870

6971
def _get_view(self):
7072
# TODO: Move this to use the default django client.
73+
TestModel = self.view_attrs["model"]
74+
TestModel.get_absolute_url = lambda self: "test_model/%d" % self.pk
75+
7176
instance = TestModel.objects.create(name="Test")
7277

7378
TestViewClass = self.make_crumb_cls(
@@ -108,6 +113,59 @@ def test_valid_view_url(self):
108113
else:
109114
self.assertIsNotNone(view_url(view.object))
110115

116+
def test_valid_view_label(self):
117+
view = self._get_view()
118+
view_label_name = "{}_view_label".format(self.view_name)
119+
view_label_func = getattr(view, view_label_name)
120+
121+
kwargs = {}
122+
123+
# check if it's a property and get the actual function
124+
if isinstance(view_label_func, property):
125+
view_label_func = view_label_func.fget
126+
127+
# use inspect to get the function signature if callable
128+
if callable(view_label_func):
129+
signature = inspect.signature(view_label_func)
130+
if "instance" in signature.parameters:
131+
kwargs = {"instance": view.object}
132+
133+
label = (
134+
view_label_func(**kwargs) if callable(view_label_func) else view_label_func
135+
)
136+
137+
match self.view_name:
138+
case "list":
139+
self.assertEqual(label, view.model_name_title_plural)
140+
case "detail":
141+
self.assertEqual(
142+
label, view.detail_format_string % force_str(view.object)
143+
)
144+
case "create":
145+
self.assertEqual(
146+
label, view.add_format_string % {"model": view.model_name_title}
147+
)
148+
case "update":
149+
self.assertEqual(
150+
label,
151+
view.update_format_string % {"instance": force_str(view.object)},
152+
)
153+
case "delete":
154+
self.assertEqual(
155+
label,
156+
view.delete_format_string % {"instance": force_str(view.object)},
157+
)
158+
159+
new_label = "TEST"
160+
161+
@property
162+
def new_label_method(self, instance=None):
163+
return new_label
164+
165+
# monkey patch view class method to override
166+
setattr(type(view), view_label_name, new_label_method)
167+
self.assertEqual(getattr(view, view_label_name), new_label)
168+
111169

112170
class ListViewBreadcrumbTestCase(ActionTestMixin, BaseBreadcrumbTestCase):
113171
breadcrumb_mixin_cls = ListBreadcrumbMixin

0 commit comments

Comments
 (0)