From 5d9de292ac4ec1baff8933a8d56822a225bbf9e0 Mon Sep 17 00:00:00 2001
From: Dominik George <nik@naturalnet.de>
Date: Mon, 16 Nov 2020 23:01:19 +0100
Subject: [PATCH] Add tests for related_views

Move catch-all URL pattern to bottom; it was actually shadowing all
other patterns.
---
 menu_generator/tests/test_menu.py | 46 +++++++++++++++++++++++++++++++
 menu_generator/tests/urls.py      | 10 +++++--
 2 files changed, 53 insertions(+), 3 deletions(-)

diff --git a/menu_generator/tests/test_menu.py b/menu_generator/tests/test_menu.py
index c25a89c..6b46fd7 100755
--- a/menu_generator/tests/test_menu.py
+++ b/menu_generator/tests/test_menu.py
@@ -2,6 +2,7 @@ from django.core.exceptions import ImproperlyConfigured
 from django.http import HttpRequest
 from django.test import TestCase
 
+from .urls import testview
 from .utils import TestUser, is_main_site, is_paid_user
 from ..menu import MenuBase
 from ..templatetags.menu_generator import get_menu
@@ -306,3 +307,48 @@ class MenuTestCase(TestCase):
         self.assertEqual(nav[0]["selected"], True)
         self.assertEqual(nav[0]["submenu"][0]["selected"], True)
         self.assertEqual(nav[0]["submenu"][1]["selected"], False)
+
+    def test_generate_menu_selected_related_views_simple(self):
+        self.request.user = TestUser(authenticated=True)
+        self.request.path = "/known-view/"
+        self.menu.save_user_state(self.request)
+        list_dict = [
+            {
+                "name": "parent1",
+                "url": "/user/account/",
+                "related_views": [testview],
+            }
+        ]
+        nav = self.menu.generate_menu(list_dict)
+
+        self.assertEqual(len(nav), 1)
+        self.assertEqual(nav[0]["selected"], True)
+
+    def test_generate_menu_selected_related_views_submenu(self):
+        self.request.user = TestUser(authenticated=True)
+        self.request.path = "/known-view/"
+        self.menu.save_user_state(self.request)
+        list_dict = [
+            {
+                "name": "parent1",
+                "url": "/user/account/",
+                "submenu": [
+                    {
+                        "name": "child1",
+                        "url": '/user/account/profile/',
+                        "related_views": [testview]
+                    },
+                    {
+                        "name": "child2",
+                        "url": 'named_url',
+                        "related_views": []
+                    },
+                ],
+            }
+        ]
+        nav = self.menu.generate_menu(list_dict)
+
+        self.assertEqual(len(nav), 1)
+        self.assertEqual(nav[0]["selected"], True)
+        self.assertEqual(nav[0]["submenu"][0]["selected"], True)
+        self.assertEqual(nav[0]["submenu"][1]["selected"], False)
diff --git a/menu_generator/tests/urls.py b/menu_generator/tests/urls.py
index fb9c4f1..1ddb11b 100755
--- a/menu_generator/tests/urls.py
+++ b/menu_generator/tests/urls.py
@@ -1,7 +1,11 @@
 from django.conf.urls import url
 
+def testview(request):
+    return 'foo'
+
 urlpatterns = [
-    url('', lambda: 'foo'),
-    url('named-url', lambda: 'foo', name='named_url'),
-    url('named-with-params/(?P<pk>\d+)/', lambda: 'foo', name='named_with_params')
+    url(r'named-url', lambda: 'foo', name='named_url'),
+    url(r'named-with-params/(?P<pk>\d+)/', lambda: 'foo', name='named_with_params'),
+    url(r'known-view', testview, name='known_view'),
+    url(r'', lambda: 'foo'),
 ]
-- 
GitLab