From 84a483589dcea419ffe1c47e1ff0f02a841e1734 Mon Sep 17 00:00:00 2001 From: Sage Abdullah Date: Tue, 3 Oct 2023 15:46:40 +0100 Subject: [PATCH] Make the last item in the breadcrumbs a link to itself --- .../wagtailadmin/shared/breadcrumbs.html | 2 +- wagtail/admin/tests/test_collections_views.py | 6 +++--- wagtail/admin/tests/test_workflows.py | 18 ++++++++++++------ .../admin/tests/viewsets/test_model_viewset.py | 3 +++ wagtail/admin/views/generic/models.py | 7 ++++--- wagtail/admin/views/generic/usage.py | 2 +- wagtail/admin/views/workflows.py | 5 +++-- wagtail/locales/tests.py | 9 ++++++--- wagtail/sites/tests.py | 9 ++++++--- wagtail/snippets/tests/test_snippets.py | 5 ++++- wagtail/snippets/tests/test_viewset.py | 12 ++++++------ wagtail/snippets/views/snippets.py | 4 ++-- wagtail/test/utils/template_tests.py | 4 ++-- wagtail/users/tests/test_admin_views.py | 16 +++++++++------- 14 files changed, 62 insertions(+), 40 deletions(-) diff --git a/wagtail/admin/templates/wagtailadmin/shared/breadcrumbs.html b/wagtail/admin/templates/wagtailadmin/shared/breadcrumbs.html index 196c8561ba..33b80d55c9 100644 --- a/wagtail/admin/templates/wagtailadmin/shared/breadcrumbs.html +++ b/wagtail/admin/templates/wagtailadmin/shared/breadcrumbs.html @@ -48,7 +48,7 @@ data-w-breadcrumbs-target="content" {% endif %} > - {% if item.url %} + {% if item.url is not None %} {{ item.label }} diff --git a/wagtail/admin/tests/test_collections_views.py b/wagtail/admin/tests/test_collections_views.py index d118eaf2ad..ec3cb308bf 100644 --- a/wagtail/admin/tests/test_collections_views.py +++ b/wagtail/admin/tests/test_collections_views.py @@ -71,7 +71,7 @@ class TestCollectionsIndexViewAsSuperuser( self.assertNotContains(response, "No collections have been created.") self.assertContains(response, "Holiday snaps") self.assertBreadcrumbsItemsRendered( - [{"label": "Collections"}], response.content + [{"url": "", "label": "Collections"}], response.content ) def test_ordering(self): @@ -210,7 +210,7 @@ class TestAddCollectionAsSuperuser(AdminTemplateTestUtils, WagtailTestUtils, Tes self.assertBreadcrumbsItemsRendered( [ {"label": "Collections", "url": "/admin/collections/"}, - {"label": "New: Collection"}, + {"label": "New: Collection", "url": ""}, ], response.content, ) @@ -335,7 +335,7 @@ class TestEditCollectionAsSuperuser(AdminTemplateTestUtils, WagtailTestUtils, Te self.assertBreadcrumbsItemsRendered( [ {"url": "/admin/collections/", "label": "Collections"}, - {"label": str(self.collection)}, + {"url": "", "label": str(self.collection)}, ], response.content, ) diff --git a/wagtail/admin/tests/test_workflows.py b/wagtail/admin/tests/test_workflows.py index 37da117194..e4bbc779c5 100644 --- a/wagtail/admin/tests/test_workflows.py +++ b/wagtail/admin/tests/test_workflows.py @@ -116,7 +116,10 @@ class TestWorkflowsIndexView(AdminTemplateTestUtils, WagtailTestUtils, TestCase) response = self.get() self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "wagtailadmin/workflows/index.html") - self.assertBreadcrumbsItemsRendered([{"label": "Workflows"}], response.content) + self.assertBreadcrumbsItemsRendered( + [{"url": "", "label": "Workflows"}], + response.content, + ) # Initially there should be no workflows listed self.assertContains(response, "There are no enabled workflows.") @@ -207,7 +210,7 @@ class TestWorkflowsCreateView(AdminTemplateTestUtils, WagtailTestUtils, TestCase self.assertBreadcrumbsItemsRendered( [ {"label": "Workflows", "url": "/admin/workflows/list/"}, - {"label": "New: Workflow"}, + {"label": "New: Workflow", "url": ""}, ], response.content, ) @@ -437,7 +440,7 @@ class TestWorkflowsEditView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): self.assertBreadcrumbsItemsRendered( [ {"url": "/admin/workflows/list/", "label": "Workflows"}, - {"label": str(self.workflow)}, + {"url": "", "label": str(self.workflow)}, ], response.content, ) @@ -753,7 +756,10 @@ class TestTaskIndexView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): response = self.get() self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "wagtailadmin/workflows/task_index.html") - self.assertBreadcrumbsItemsRendered([{"label": "Tasks"}], response.content) + self.assertBreadcrumbsItemsRendered( + [{"url": "", "label": "Tasks"}], + response.content, + ) # Initially there should be no tasks listed self.assertContains(response, "There are no enabled tasks") @@ -851,7 +857,7 @@ class TestCreateTaskView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): self.assertBreadcrumbsItemsRendered( [ {"label": "Tasks", "url": "/admin/workflows/tasks/index/"}, - {"label": "New: Simple task"}, + {"label": "New: Simple task", "url": ""}, ], response.content, ) @@ -975,7 +981,7 @@ class TestEditTaskView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): self.assertBreadcrumbsItemsRendered( [ {"url": "/admin/workflows/tasks/index/", "label": "Tasks"}, - {"label": str(self.task)}, + {"url": "", "label": str(self.task)}, ], response.content, ) diff --git a/wagtail/admin/tests/viewsets/test_model_viewset.py b/wagtail/admin/tests/viewsets/test_model_viewset.py index fdbbac5ff8..2aabf05ada 100644 --- a/wagtail/admin/tests/viewsets/test_model_viewset.py +++ b/wagtail/admin/tests/viewsets/test_model_viewset.py @@ -659,6 +659,7 @@ class TestBreadcrumbs(AdminTemplateTestUtils, WagtailTestUtils, TestCase): response = self.client.get(reverse("feature_complete_toy:index")) items = [ { + "url": "", "label": "Feature complete toys", } ] @@ -672,6 +673,7 @@ class TestBreadcrumbs(AdminTemplateTestUtils, WagtailTestUtils, TestCase): "label": "Feature complete toys", }, { + "url": "", "label": "New: Feature complete toy", }, ] @@ -686,6 +688,7 @@ class TestBreadcrumbs(AdminTemplateTestUtils, WagtailTestUtils, TestCase): "label": "Feature complete toys", }, { + "url": "", "label": str(self.object), }, ] diff --git a/wagtail/admin/views/generic/models.py b/wagtail/admin/views/generic/models.py index bf60ea5384..38a9ff415a 100644 --- a/wagtail/admin/views/generic/models.py +++ b/wagtail/admin/views/generic/models.py @@ -359,7 +359,7 @@ class IndexView( if not self.model: return self.breadcrumbs_items return self.breadcrumbs_items + [ - {"label": capfirst(self.model._meta.verbose_name_plural)}, + {"url": "", "label": capfirst(self.model._meta.verbose_name_plural)}, ] def get_translations(self): @@ -464,6 +464,7 @@ class CreateView( ) items.append( { + "url": "", "label": _("New: %(model_name)s") % {"model_name": capfirst(self.model._meta.verbose_name)}, } @@ -619,7 +620,7 @@ class EditView( "label": capfirst(self.model._meta.verbose_name_plural), } ) - items.append({"label": get_latest_str(self.object)}) + items.append({"url": "", "label": get_latest_str(self.object)}) return self.breadcrumbs_items + items def get_edit_url(self): @@ -879,7 +880,7 @@ class InspectView(PermissionCheckedMixin, WagtailAdminTemplateMixin, TemplateVie edit_url = self.get_edit_url() if edit_url: items.append({"url": edit_url, "label": get_latest_str(self.object)}) - items.append({"label": _("Inspect")}) + items.append({"url": "", "label": _("Inspect")}) return self.breadcrumbs_items + items def get_fields(self): diff --git a/wagtail/admin/views/generic/usage.py b/wagtail/admin/views/generic/usage.py index 54b9542cb8..4470a9c765 100644 --- a/wagtail/admin/views/generic/usage.py +++ b/wagtail/admin/views/generic/usage.py @@ -58,7 +58,7 @@ class UsageView(PermissionCheckedMixin, BaseObjectMixin, BaseListingView): "label": get_latest_str(self.object), } ) - items.append({"label": _("Usage")}) + items.append({"url": "", "label": _("Usage")}) return self.breadcrumbs_items + items def get_queryset(self): diff --git a/wagtail/admin/views/workflows.py b/wagtail/admin/views/workflows.py index d35fac504f..3099a387de 100644 --- a/wagtail/admin/views/workflows.py +++ b/wagtail/admin/views/workflows.py @@ -509,8 +509,9 @@ class CreateTask(CreateView): "label": capfirst(Task._meta.verbose_name_plural), }, { + "url": "", "label": _("New: %(model_name)s") - % {"model_name": capfirst(self.model._meta.verbose_name)} + % {"model_name": capfirst(self.model._meta.verbose_name)}, }, ] return self.breadcrumbs_items + items @@ -558,7 +559,7 @@ class EditTask(EditView): "url": reverse(self.index_url_name), "label": capfirst(Task._meta.verbose_name_plural), }, - {"label": str(self.object)}, + {"url": "", "label": str(self.object)}, ] return self.breadcrumbs_items + items diff --git a/wagtail/locales/tests.py b/wagtail/locales/tests.py index ee79df621c..cc469361d8 100644 --- a/wagtail/locales/tests.py +++ b/wagtail/locales/tests.py @@ -20,7 +20,10 @@ class TestLocaleIndexView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): response = self.get() self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "wagtailadmin/generic/index.html") - self.assertBreadcrumbsItemsRendered([{"label": "Locales"}], response.content) + self.assertBreadcrumbsItemsRendered( + [{"url": "", "label": "Locales"}], + response.content, + ) class TestLocaleCreateView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): @@ -46,7 +49,7 @@ class TestLocaleCreateView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): self.assertBreadcrumbsItemsRendered( [ {"label": "Locales", "url": "/admin/locales/"}, - {"label": "New: Locale"}, + {"label": "New: Locale", "url": ""}, ], response.content, ) @@ -127,7 +130,7 @@ class TestLocaleEditView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): self.assertBreadcrumbsItemsRendered( [ {"url": "/admin/locales/", "label": "Locales"}, - {"label": str(self.english)}, + {"url": "", "label": str(self.english)}, ], response.content, ) diff --git a/wagtail/sites/tests.py b/wagtail/sites/tests.py index fb1358c481..0c9dbe7554 100644 --- a/wagtail/sites/tests.py +++ b/wagtail/sites/tests.py @@ -20,7 +20,10 @@ class TestSiteIndexView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): response = self.get() self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "wagtailadmin/generic/index.html") - self.assertBreadcrumbsItemsRendered([{"label": "Sites"}], response.content) + self.assertBreadcrumbsItemsRendered( + [{"url": "", "label": "Sites"}], + response.content, + ) class TestSiteCreateView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): @@ -60,7 +63,7 @@ class TestSiteCreateView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): self.assertBreadcrumbsItemsRendered( [ {"label": "Sites", "url": "/admin/sites/"}, - {"label": "New: Site"}, + {"label": "New: Site", "url": ""}, ], response.content, ) @@ -206,7 +209,7 @@ class TestSiteEditView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): self.assertBreadcrumbsItemsRendered( [ {"url": "/admin/sites/", "label": "Sites"}, - {"label": str(self.localhost)}, + {"url": "", "label": str(self.localhost)}, ], response.content, ) diff --git a/wagtail/snippets/tests/test_snippets.py b/wagtail/snippets/tests/test_snippets.py index 22a1aa3b8e..ccb8396c0d 100644 --- a/wagtail/snippets/tests/test_snippets.py +++ b/wagtail/snippets/tests/test_snippets.py @@ -97,7 +97,10 @@ class TestSnippetIndexView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): response = self.get() self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "wagtailadmin/generic/index.html") - self.assertBreadcrumbsItemsRendered([{"label": "Snippets"}], response.content) + self.assertBreadcrumbsItemsRendered( + [{"url": "", "label": "Snippets"}], + response.content, + ) def test_displays_snippet(self): self.assertContains(self.get(), "Adverts") diff --git a/wagtail/snippets/tests/test_viewset.py b/wagtail/snippets/tests/test_viewset.py index ffa4cf621b..33c9a2dce7 100644 --- a/wagtail/snippets/tests/test_viewset.py +++ b/wagtail/snippets/tests/test_viewset.py @@ -1369,7 +1369,7 @@ class TestBreadcrumbs(AdminTemplateTestUtils, BaseSnippetViewSetTests): def test_index_view(self): response = self.client.get(self.get_url("list")) - items = [{"label": "Full-featured snippets"}] + items = [{"url": "", "label": "Full-featured snippets"}] self.assertBreadcrumbsItemsRendered(items, response.content) def test_add_view(self): @@ -1379,7 +1379,7 @@ class TestBreadcrumbs(AdminTemplateTestUtils, BaseSnippetViewSetTests): "url": self.get_url("list"), "label": "Full-featured snippets", }, - {"label": "New: Full-featured snippet"}, + {"url": "", "label": "New: Full-featured snippet"}, ] self.assertBreadcrumbsItemsRendered(items, response.content) @@ -1390,7 +1390,7 @@ class TestBreadcrumbs(AdminTemplateTestUtils, BaseSnippetViewSetTests): "url": self.get_url("list"), "label": "Full-featured snippets", }, - {"label": str(self.object)}, + {"url": "", "label": str(self.object)}, ] self.assertBreadcrumbsItemsRendered(items, response.content) @@ -1409,7 +1409,7 @@ class TestBreadcrumbs(AdminTemplateTestUtils, BaseSnippetViewSetTests): "url": self.get_url("edit", args=(self.object.pk,)), "label": str(self.object), }, - {"label": "History"}, + {"url": "", "label": "History"}, ] self.assertBreadcrumbsItemsRendered(items, response.content) @@ -1424,7 +1424,7 @@ class TestBreadcrumbs(AdminTemplateTestUtils, BaseSnippetViewSetTests): "url": self.get_url("edit", args=(self.object.pk,)), "label": str(self.object), }, - {"label": "Usage"}, + {"url": "", "label": "Usage"}, ] self.assertBreadcrumbsItemsRendered(items, response.content) @@ -1439,6 +1439,6 @@ class TestBreadcrumbs(AdminTemplateTestUtils, BaseSnippetViewSetTests): "url": self.get_url("edit", args=(self.object.pk,)), "label": str(self.object), }, - {"label": "Inspect"}, + {"url": "", "label": "Inspect"}, ] self.assertBreadcrumbsItemsRendered(items, response.content) diff --git a/wagtail/snippets/views/snippets.py b/wagtail/snippets/views/snippets.py index 82b66a469c..2daca48800 100644 --- a/wagtail/snippets/views/snippets.py +++ b/wagtail/snippets/views/snippets.py @@ -106,7 +106,7 @@ class ModelIndexView(generic.IndexView): return super().dispatch(request, *args, **kwargs) def get_breadcrumbs_items(self): - return self.breadcrumbs_items + [{"label": _("Snippets")}] + return self.breadcrumbs_items + [{"url": "", "label": _("Snippets")}] def get_list_url(self, type): return reverse(type["model"].snippet_viewset.get_url_name("list")) @@ -489,7 +489,7 @@ class HistoryView(ReportView): "url": self.get_edit_url(self.object), "label": get_latest_str(self.object), }, - {"label": _("History")}, + {"url": "", "label": _("History")}, ] def get_context_data(self, *args, object_list=None, **kwargs): diff --git a/wagtail/test/utils/template_tests.py b/wagtail/test/utils/template_tests.py index ea363b11f6..c89ef1bb7a 100644 --- a/wagtail/test/utils/template_tests.py +++ b/wagtail/test/utils/template_tests.py @@ -41,7 +41,7 @@ class AdminTemplateTestUtils: ) for item, rendered_item in zip(items, rendered_items): - if item.get("url"): + if item.get("url") is not None: element = rendered_item.select_one("a") self.assertIsNotNone( element, @@ -50,7 +50,7 @@ class AdminTemplateTestUtils: self.assertEqual( element["href"], item["url"], - f"Expected '{item['label']}' breadcrumbs item to link to {item['url']}", + f"Expected '{item['label']}' breadcrumbs item to link to '{item['url']}'", ) else: element = rendered_item.select_one("div") diff --git a/wagtail/users/tests/test_admin_views.py b/wagtail/users/tests/test_admin_views.py index aa48b9dbc2..687fb4dac9 100644 --- a/wagtail/users/tests/test_admin_views.py +++ b/wagtail/users/tests/test_admin_views.py @@ -119,7 +119,7 @@ class TestGroupUsersView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): # response should contain page furniture, including the "Add a user" button self.assertContains(response, "Add a user") self.assertBreadcrumbsItemsRendered( - [{"label": capfirst(User._meta.verbose_name_plural)}], + [{"url": "", "label": capfirst(User._meta.verbose_name_plural)}], response.content, ) @@ -208,7 +208,7 @@ class TestUserIndexView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): # response should contain page furniture, including the "Add a user" button self.assertContains(response, "Add a user") self.assertBreadcrumbsItemsRendered( - [{"label": capfirst(User._meta.verbose_name_plural)}], + [{"url": "", "label": capfirst(User._meta.verbose_name_plural)}], response.content, ) @@ -320,7 +320,7 @@ class TestUserCreateView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): "url": "/admin/users/", "label": capfirst(User._meta.verbose_name_plural), }, - {"label": f"New: {capfirst(User._meta.verbose_name)}"}, + {"url": "", "label": f"New: {capfirst(User._meta.verbose_name)}"}, ], response.content, ) @@ -848,7 +848,7 @@ class TestUserEditView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): "url": "/admin/users/", "label": capfirst(User._meta.verbose_name_plural), }, - {"label": str(self.test_user)}, + {"url": "", "label": str(self.test_user)}, ], response.content, ) @@ -1346,7 +1346,9 @@ class TestGroupIndexView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): # response should contain page furniture, including the "Add a group" button self.assertContains(response, "Add a group") - self.assertBreadcrumbsItemsRendered([{"label": "Groups"}], response.content) + self.assertBreadcrumbsItemsRendered( + [{"url": "", "label": "Groups"}], response.content + ) def test_search(self): response = self.get({"q": "Hello"}) @@ -1413,7 +1415,7 @@ class TestGroupCreateView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): self.assertBreadcrumbsItemsRendered( [ {"url": "/admin/groups/", "label": "Groups"}, - {"label": "New: Group"}, + {"url": "", "label": "New: Group"}, ], response.content, ) @@ -1664,7 +1666,7 @@ class TestGroupEditView(AdminTemplateTestUtils, WagtailTestUtils, TestCase): "url": "/admin/groups/", "label": "Groups", }, - {"label": str(self.test_group)}, + {"url": "", "label": str(self.test_group)}, ], response.content, )