From 3c601a15fa9f939b7ac14a7665345c7cd0057324 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Gabriel=20Alc=C3=A1zar?= Date: Sat, 7 Nov 2020 16:01:43 -0300 Subject: [PATCH 1/2] Avoid adding the same items multiple times into the same menu --- menu_generator/templatetags/menu_generator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu_generator/templatetags/menu_generator.py b/menu_generator/templatetags/menu_generator.py index 9752939..01fe14f 100755 --- a/menu_generator/templatetags/menu_generator.py +++ b/menu_generator/templatetags/menu_generator.py @@ -20,7 +20,7 @@ def get_menu(context, menu_name): :param menu_name: String, name of the menu to be found :return: Generated menu """ - menu_list = getattr(settings, menu_name, defaults.MENU_NOT_FOUND) + menu_list = list(getattr(settings, menu_name, defaults.MENU_NOT_FOUND)) menu_from_apps = get_menu_from_apps(menu_name) # If there isn't a menu on settings but there is menu from apps we built menu from apps if menu_list == defaults.MENU_NOT_FOUND and menu_from_apps: From f2698536aa0a40aa17de9a8315d29c18c6f55446 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20Gabriel=20Alc=C3=A1zar?= Date: Tue, 29 Dec 2020 18:48:14 -0300 Subject: [PATCH 2/2] Add test for fix --- menu_generator/templatetags/menu_generator.py | 2 ++ menu_generator/tests/test_menu.py | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/menu_generator/templatetags/menu_generator.py b/menu_generator/templatetags/menu_generator.py index 01fe14f..1da65d4 100755 --- a/menu_generator/templatetags/menu_generator.py +++ b/menu_generator/templatetags/menu_generator.py @@ -20,6 +20,8 @@ def get_menu(context, menu_name): :param menu_name: String, name of the menu to be found :return: Generated menu """ + # Instantiate a new list() or else the same instance of the menu_list gets used over and over + # (and possibly re-adding the menu_from_apps list on each request) menu_list = list(getattr(settings, menu_name, defaults.MENU_NOT_FOUND)) menu_from_apps = get_menu_from_apps(menu_name) # If there isn't a menu on settings but there is menu from apps we built menu from apps diff --git a/menu_generator/tests/test_menu.py b/menu_generator/tests/test_menu.py index c25a89c..1f41e7b 100755 --- a/menu_generator/tests/test_menu.py +++ b/menu_generator/tests/test_menu.py @@ -306,3 +306,13 @@ def test_generate_menu_selected_related_urls_submenu(self): self.assertEqual(nav[0]["selected"], True) self.assertEqual(nav[0]["submenu"][0]["selected"], True) self.assertEqual(nav[0]["submenu"][1]["selected"], False) + + def test_subsequent_requests(self): + self.request.user = TestUser(authenticated=True) + ctx = { + 'request': self.request + } + nav1 = get_menu(ctx, 'NAV_MENU') + nav2 = get_menu(ctx, 'NAV_MENU') + # Both menus should be equal + self.assertEqual(nav1, nav2)