diff --git a/adminlte2_pdq/admin_menu.py b/adminlte2_pdq/admin_menu.py index 459064933ea728adf5e9e1851129337af2b883c9..67765489c7a27e7c2b2efe537a208f2abf081924 100644 --- a/adminlte2_pdq/admin_menu.py +++ b/adminlte2_pdq/admin_menu.py @@ -21,25 +21,41 @@ class _AdminMenu: self.app_icons = {} def create_menu(self, context): - """Create Menu""" + """Create menu""" - app_list = [] + # print("\n\n\n\n\n\n\n\n=============================\n\n\n\n\n\n\n\n") + # print("admin_menu.py create_menu():") + # print(" context: {0}".format(context)) + # print("\n\n\n") + app_list = [] all_admin_perms = [] + # print("Checking context...") request = context["request"] if not context.get("available_apps"): + # print("No available_apps. New value is") context["available_apps"] = site.get_app_list(request) + # print(" {0}".format(context["available_apps"])) + # print("\n\n\n\n") + # print("Processing apps...") for app in context["available_apps"]: model_nodes = [] + # print("\n") + # print(' Processing app "{0}" models...'.format(app)) for model in app["models"]: + # print("") + # print(' Processing model "{0}"'.format(model)) + if context["user"].is_staff or context["user"].is_superuser: + # print(" Is superuser. Processing extra stuff...") + # Initialize to none. If the user has a valid url endpoint they # can access from permissions, the url will get a value. url = None @@ -85,8 +101,14 @@ class _AdminMenu: model_nodes.append(model_node) + # else: + # print(" Is NOT superuser. Skipping extra processing.") + if model_nodes: + # print("") + # print(" Processing model_nodes...") + app_name = app["name"] app_icon = self.get_app_icon(app_name) @@ -99,6 +121,10 @@ class _AdminMenu: app_list.append(tree) + # else: + # print("") + # print(" Skipping model_nodes processing.") + admin_index = [ { "route": "admin:index", @@ -110,6 +136,10 @@ class _AdminMenu: } ] + # print("\n\n") + # print("Calculated admin_index:") + # print(" {0}".format(admin_index)) + put_entire_admin_in_tree = getattr( settings, "ADMINLTE2_ADMIN_MENU_IN_TREE", diff --git a/adminlte2_pdq/middleware.py b/adminlte2_pdq/middleware.py index 60fa86f63f27bfbdbe1153da077227a08c8c24f6..20aa70766dfafbdedd64a6b347d31af32459d22d 100644 --- a/adminlte2_pdq/middleware.py +++ b/adminlte2_pdq/middleware.py @@ -404,6 +404,11 @@ class AuthMiddleware: def parse_request_data(self, request): """Parses request data and generates dict of calculated values.""" + print("\n\n\n\n") + print("parse_request_data():") + print(" request: {0}".format(request)) + print("\n") + # Initialize default data structure. # This is our fallback if view is not using AdminLtePdq logic. data_dict = { @@ -433,14 +438,27 @@ class AuthMiddleware: data_dict["current_url_name"] = current_url_name data_dict["fully_qualified_url_name"] = fully_qualified_url_name + print(" app_name: {0}".format(app_name)) + print(" current_url_name: {0}".format(current_url_name)) + print(" fully_qualified_url_name: {0}".format(fully_qualified_url_name)) + print("\n") + # Get extra AdminLtePdq data, if available. if view_class: - # Is class-based view. Get class data dict. + # Is class-based view. + + # If class inheriting from AdminLte mixins, then ensure data is up-to-date and fully initialized. + if hasattr(view_class, "_update_admin_pdq_data"): + view_class._update_admin_pdq_data() + + # Get AdminLte class data dict. admin_pdq_data = getattr(view_class, "admin_pdq_data", {}) else: - # Is function-based view. Get function data dict. + # Is function-based view. Get AdminLte function data dict. admin_pdq_data = getattr(resolver.func, "admin_pdq_data", {}) + print("Data pulled from view decorator/mixin: {0}".format(admin_pdq_data)) + # Process data. if view_class: # Get class attributes. @@ -509,6 +527,7 @@ class AuthMiddleware: data_dict["full_permissions"] = admin_pdq_data.get("full_permissions", None) except Http404: + # Request was 404, not valid page. data_dict.update({"resolver": None}) # Return parsed data. diff --git a/adminlte2_pdq/mixins.py b/adminlte2_pdq/mixins.py index 48cfb8b075c03c3bc5f7d676a7fb8d9d05a2a10a..be3a83610c56ecd9f4dc216aedf0ea8766d94544 100644 --- a/adminlte2_pdq/mixins.py +++ b/adminlte2_pdq/mixins.py @@ -13,7 +13,43 @@ from django.urls import reverse_lazy from .constants import HOME_ROUTE -class AllowAnonymousAccessMixin: +class BaseAdminLteMixin: + + @classmethod + def _update_admin_pdq_data(cls): + """Helper function to update the data dictionary for AdminLTE data. + + Otherwise, depending on the order of project runtime loading, + values may be initialized with only the Mixin defaults, and not + actually have the intended values provided on the view class itself. + """ + + print("\n\n\n\n") + print("Updating admin_pdq_data...") + print("") + print(" Before Update:") + if hasattr(cls, "admin_pdq_data"): + print(" {0}".format(cls.admin_pdq_data)) + else: + print(" None") + + # Update one_permission_required variable. + if hasattr(cls, "permission_required_one"): + cls.admin_pdq_data["one_of_permissions"] = cls.permission_required_one + + # Update full_permission_required variable. + if hasattr(cls, "permission_required"): + cls.admin_pdq_data["full_permissions"] = cls.permission_required + + print(" After Update:") + if hasattr(cls, "admin_pdq_data"): + print(" {0}".format(cls.admin_pdq_data)) + else: + print(" None") + print("\n\n\n\n") + + +class AllowAnonymousAccessMixin(BaseAdminLteMixin): """Mixin for strict mode, that defines a view can be accessed without login. General logic comes from the login_required project decorator. @@ -40,7 +76,7 @@ class AllowAnonymousAccessMixin: cls.subclasses.append(cls.__name__) -class LoginRequiredMixin(DjangoLoginRequiredMixin): +class LoginRequiredMixin(DjangoLoginRequiredMixin, BaseAdminLteMixin): """Mixin for views that defines login is required.""" # Pdq data processing dict. @@ -64,7 +100,7 @@ class LoginRequiredMixin(DjangoLoginRequiredMixin): cls.subclasses.append(cls.__name__) -class AllowWithoutPermissionsMixin(DjangoLoginRequiredMixin): +class AllowWithoutPermissionsMixin(DjangoLoginRequiredMixin, BaseAdminLteMixin): """Mixin for strict mode, that defines a view which requires login, but no permissions. General logic comes from the login_required project decorator. @@ -91,7 +127,7 @@ class AllowWithoutPermissionsMixin(DjangoLoginRequiredMixin): cls.subclasses.append(cls.__name__) -class PermissionRequiredMixin(DjangoPermissionRequiredMixin): +class PermissionRequiredMixin(DjangoPermissionRequiredMixin, BaseAdminLteMixin): """Mixin for views that defines permissions are required.""" # Values for user to override. diff --git a/adminlte2_pdq/templatetags/sidebar_menu.py b/adminlte2_pdq/templatetags/sidebar_menu.py index e6382ddfd5e475907be92999170e50aae7140532..7fb5bd359d1d0e52778bdf745ae2f8b5c7282835 100644 --- a/adminlte2_pdq/templatetags/sidebar_menu.py +++ b/adminlte2_pdq/templatetags/sidebar_menu.py @@ -220,13 +220,32 @@ def render_link(context, node): def get_permissions_from_view(view): """Get the permission/access data from a view.""" + print("\n\n") + print("get_permissions_from_view():") + print(" view: {0}".format(view)) + print("") + view_data = {} view_class = getattr(view.func, "view_class", None) + + # Get extra AdminLtePdq data, if available. if view_class: + # Is class-based view. + + # If class inheriting from AdminLte mixins, then ensure data is up-to-date and fully initialized. + if hasattr(view_class, "_update_admin_pdq_data"): + view_class._update_admin_pdq_data() + + # Get AdminLte class data dict. admin_pdq_data = getattr(view_class, "admin_pdq_data", {}) else: + # Is function-based view. Get AdminLte function data dict. admin_pdq_data = getattr(view.func, "admin_pdq_data", {}) + print(" view_class: {0}".format(view_class)) + print(" pdq_data: {0}".format(admin_pdq_data)) + print("") + view_data["decorator_name"] = admin_pdq_data.get("decorator_name", "") view_data["allow_anonymous_access"] = admin_pdq_data.get("allow_anonymous_access", None) view_data["login_required"] = admin_pdq_data.get("login_required", None) @@ -249,6 +268,11 @@ def get_permissions_from_node(node): behavior as per project settings. Mostly those defined by STRICT mode and LOGIN_REQUIRED mode. """ + print("\n\n\n\n") + print("get_permissions_from_node():") + print(" node: {0}".format(node)) + print("\n") + err_str__anonymous_and_login_required = "Cannot allow_anonymous_access and have login_required at the same time." err_str__without_perms_and_perms_required = ( "Cannot allow_without_perms and have permissions required at the same time." @@ -264,6 +288,13 @@ def get_permissions_from_node(node): node_one_of_permissions = node.get("one_of_permissions", None) node_full_permissions = node.get("permissions", None) + print(" node_allow_anonymous_access: {0}".format(node_allow_anonymous_access)) + print(" node_login_required: {0}".format(node_login_required)) + print(" node_allow_without_permissions: {0}".format(node_allow_without_permissions)) + print(" node_one_of_permissions: {0}".format(node_one_of_permissions)) + print(" node_full_permissions: {0}".format(node_full_permissions)) + print("\n") + # If any of these are strings, set as iterables. if isinstance(node_one_of_permissions, str): node_one_of_permissions = (node_one_of_permissions,) @@ -337,6 +368,13 @@ def get_permissions_from_node(node): if isinstance(view_full_permissions, str): view_full_permissions = (view_full_permissions,) + print(" view_allow_anonymous_access: {0}".format(view_allow_anonymous_access)) + print(" view_login_required: {0}".format(view_login_required)) + print(" view_allow_without_permissions: {0}".format(view_allow_without_permissions)) + print(" view_one_of_permissions: {0}".format(view_one_of_permissions)) + print(" view_full_permissions: {0}".format(view_full_permissions)) + print("\n") + # Raise errors for configurations that don't make sense for view level. # Should handle effectively the same as above node error checks. Just at the view level. if view_allow_anonymous_access and view_login_required: @@ -401,6 +439,14 @@ def get_permissions_from_node(node): # Fall back to view value, as long as node allow_without_permissions is not set. full_permissions = view_full_permissions or [] + print(" allow_anonymous_access: {0}".format(allow_anonymous_access)) + print(" login_required: {0}".format(login_required)) + print(" allow_without_permissions: {0}".format(allow_without_permissions)) + print(" one_of_permissions: {0}".format(one_of_permissions)) + print(" full_permissions: {0}".format(full_permissions)) + print(" node_requires_permissions: {0}".format((bool(node_one_of_permissions) or bool(node_full_permissions)))) + print("\n") + # Return calculated values. return { "allow_anonymous_access": allow_anonymous_access, @@ -426,8 +472,23 @@ def is_allowed_node(user, node): # to really make sure this logic is correct. """ + print("\n\n\n\n\n\n\n\n") + print("===========================================================================") + print("===========================================================================") + print("===========================================================================") + print("\n\n\n\n\n\n\n\n") + print("is_allowed_node():") + print(" user: {0}".format(user)) + print(" node: {0}".format(node)) + print("") + print(" LOGIN_REQUIRED: {0}".format(LOGIN_REQUIRED)) + print(" STRICT MODE: {0}".format(STRICT_POLICY)) + # Always allow superuser. if user.is_superuser: + + print("\n\nis_allowed_node(): SUPERUSER TRUE") + return True # Start allowed as the opposite of the authentication policy. @@ -438,6 +499,11 @@ def is_allowed_node(user, node): # Get the permission/access values from the node or node's view. return_data = get_permissions_from_node(node) + + print("\n") + print("node permissions:") + print(" {0}".format(return_data)) + allow_anonymous_access = return_data["allow_anonymous_access"] login_required = return_data["login_required"] allow_without_permissions = return_data["allow_without_permissions"] @@ -446,24 +512,43 @@ def is_allowed_node(user, node): # Special case for handling a view in STRICT POLICY WHITELIST but the node says permission is required. node_requires_permissions = return_data["node_requires_permissions"] + print("\n") + print("Determining final node access state, against user {0}".format(user)) + print(" user.perms: {0}".format(user.user_permissions.all())) + print(" user.groups: {0}".format(user.groups.all())) + print("") + print(" Default States:") + print(" passes_login_check: {0}".format(passes_login_check)) + print(" passes_permission_check: {0}".format(passes_permission_check)) + print("\n") # If node allows anonymous, then anyone can access, regardless of any other settings. if allow_anonymous_access: + + print(" Handling for AllowAnonymous node logic.") + passes_login_check = True passes_permission_check = True # If the node requires being logged in, or the login required middleware is active. elif login_required or LOGIN_REQUIRED: + print(" Handling for LoginRequired node logic") + print(" user.is_authenticated: {0}".format(user.is_authenticated)) + print(" check_for_login_whitelisted_node:") + print("") # Some iteration of login is required. # Verify user is authenticated or the route for the node is whitelisted in the login exempt whitelist. passes_login_check = user.is_authenticated or check_for_login_whitelisted_node(node) # If node allows without permissions, then all users pass permission checks. if allow_without_permissions: + print(" Handling for AllowWithoutPermissions node logic") passes_permission_check = True # Check if view is in permission whitelist, so long as node doesn't specify permissions required. elif not node_requires_permissions and check_for_strict_whitelisted_node(node): + print(" Handling for PermsRequired (whitelisted) node logic") passes_permission_check = True # Otherwise if any permission values exist, user needs to pass a permission check. elif one_of_permissions or full_permissions: + print(" Handling for PermsRequired node logic") # TODO: I'm so tired, I suspect I messed this logic up? # Verify permission-access node tests when more rested. @@ -494,6 +579,11 @@ def is_allowed_node(user, node): # Final result is the combination of these two. passes_permission_check = passes_one_check and passes_all_check + print("\n") + print("Final Results:") + print(" passes_login_check: {0}".format(passes_login_check)) + print(" passes_permission_check: {0}".format(passes_permission_check)) + # Return true if passes both types of checks. False otherwise. return passes_login_check and passes_permission_check @@ -513,6 +603,9 @@ def check_for_one_permission(user, permissions): # Superusers get all permissions if user.is_superuser: + + print("\n\ncheck_for_one_permission(): SUPERUSER TRUE") + return True allowed = False @@ -525,6 +618,8 @@ def check_for_one_permission(user, permissions): allowed = True break + print("\n\ncheck_for_one_permission(): {0}".format(allowed)) + return allowed @@ -543,6 +638,9 @@ def check_for_all_permissions(user, permissions): # Superusers get all permissions if user.is_superuser: + + print("\n\ncheck_for_all_permissions(): SUPERUSER TRUE") + return True allowed = False @@ -554,6 +652,8 @@ def check_for_all_permissions(user, permissions): if not user.has_perms(permissions): allowed = False + print("\n\ncheck_for_all_permissions(): {0}".format(allowed)) + return allowed @@ -562,6 +662,9 @@ def check_for_one_permission_in_node_list(user, nodes): # Superusers get all permissions if user.is_superuser: + + print("\n\ncheck_for_one_permission_in_node_list(): SUPERUSER TRUE") + return True allowed = False @@ -580,16 +683,40 @@ def check_for_one_permission_in_node_list(user, nodes): allowed = True break + print("\n\ncheck_for_one_permission_in_node_list(): {0}".format(allowed)) + return allowed def check_for_login_whitelisted_node(node): """Check to see if the route property on the node is in the login whitelist""" + + print("") + print("") + print(" check_for_login_whitelisted_node():") + print(' node_route: "{0}"'.format(node.get("route"))) + print("") + print(" LOGIN_EXEMPT_WHITELIST: {0}".format(LOGIN_EXEMPT_WHITELIST)) + print("") + print(" node is whitelisted: {0}".format(node.get("route") in LOGIN_EXEMPT_WHITELIST)) + print("") + return node.get("route") in LOGIN_EXEMPT_WHITELIST def check_for_strict_whitelisted_node(node): """Check to see if the route property on the node is in the whitelist""" + + print("") + print("") + print(" check_for_login_whitelisted_node():") + print(' node_route: "{0}"'.format(node.get("route"))) + print("") + print(" STRICT_POLICY_WHITELIST: {0}".format(STRICT_POLICY_WHITELIST)) + print("") + print(" node is whitelisted: {0}".format(node.get("route") in STRICT_POLICY_WHITELIST)) + print("") + return node.get("route") in STRICT_POLICY_WHITELIST diff --git a/tests/django_adminlte2_pdq/tests/test_templatetags/__init__.py b/tests/django_adminlte2_pdq/tests/test_templatetags/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/django_adminlte2_pdq/tests/test_templatetags/test_sidebar_menu.py b/tests/django_adminlte2_pdq/tests/test_templatetags/test_sidebar_menu.py index 8dc15d56295e5c16520ce68375b17942d3af99a2..7f52ac68a874a142b5d77e324381c17692ab4778 100644 --- a/tests/django_adminlte2_pdq/tests/test_templatetags/test_sidebar_menu.py +++ b/tests/django_adminlte2_pdq/tests/test_templatetags/test_sidebar_menu.py @@ -107,17 +107,20 @@ class TemplateTagSidebarMenuBaseTestCase(TestCase): """Set up anonymous user""" self.anonymous_user = AnonymousUser() - def _setup_user(self, permissions=None): + def _setup_user(self, permissions=None, groups=None): """Set up basic user""" # Remove user if already exists. + # Ensures no potential overlap between subtests. if self.user: self.user.delete() + # Create basic user. self.user = UserModel() self.user.username = "test_user" self.user.save() + # Handle if perms provided. if permissions: if isinstance(permissions, str): permissions = [permissions] @@ -126,19 +129,34 @@ class TemplateTagSidebarMenuBaseTestCase(TestCase): codename__exact=permission, ).first() self.user.user_permissions.add(perm_object) + self.user.save() + + # Handle if groups provided. + if groups: + if isinstance(groups, str): + groups = [groups] + for group in groups: + group_object = Group.objects.filter( + name=group, + ).first() + self.user.groups.add(group_object) + self.user.save() - def _setup_staff_user(self, permissions=None): + def _setup_staff_user(self, permissions=None, groups=None): """Set up Staff user""" # Remove user if already exists. + # Ensures no potential overlap between subtests. if self.staff_user: self.staff_user.delete() + # Create basic staff user. self.staff_user = UserModel() self.staff_user.username = "test_staff_user" self.staff_user.is_staff = True self.staff_user.save() + # Handle if perms provided. if permissions: if isinstance(permissions, str): permissions = [permissions] @@ -147,9 +165,23 @@ class TemplateTagSidebarMenuBaseTestCase(TestCase): codename__exact=permission, ).first() self.staff_user.user_permissions.add(perm_object) + self.staff_user.save() + + # Handle if groups provided. + if groups: + if isinstance(groups, str): + groups = [groups] + for group in groups: + group_object = Group.objects.filter( + name=group, + ).first() + self.staff_user.groups.add(group_object) + self.staff_user.save() def _setup_super_user(self): """Set up Superuser""" + + # Create basic superuser. self.super_user = UserModel() self.super_user.username = "test_super_user" self.super_user.is_superuser = True @@ -1883,7 +1915,9 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # region Loose Mode, Standard Settings def test__standard__node_minimal(self): - """""" + """Tests for node with no auth requirements defined on a basic no-auth view. + Aka, the "standard" case. + """ # Node used for all subtests. node = { @@ -1910,7 +1944,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -1918,7 +1952,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -1934,7 +1968,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -1942,7 +1976,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -1991,7 +2025,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -1999,7 +2033,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2015,7 +2049,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2023,7 +2057,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2071,7 +2105,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2079,7 +2113,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2095,7 +2129,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2103,7 +2137,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2155,7 +2189,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2163,7 +2197,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2179,7 +2213,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2187,7 +2221,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2235,7 +2269,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2243,7 +2277,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2259,7 +2293,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2267,7 +2301,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2316,7 +2350,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2324,7 +2358,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2340,7 +2374,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2348,7 +2382,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2401,7 +2435,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2409,7 +2443,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2425,7 +2459,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2433,7 +2467,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2485,7 +2519,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2493,7 +2527,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2509,7 +2543,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2517,7 +2551,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2567,7 +2601,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2575,7 +2609,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2591,7 +2625,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2599,7 +2633,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2649,7 +2683,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2657,7 +2691,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2673,7 +2707,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2681,7 +2715,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2731,7 +2765,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2739,7 +2773,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2755,7 +2789,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2763,7 +2797,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2813,7 +2847,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2821,7 +2855,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2837,7 +2871,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2845,7 +2879,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2899,7 +2933,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2907,7 +2941,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2923,7 +2957,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2931,7 +2965,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -2983,7 +3017,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -2991,7 +3025,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3007,7 +3041,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3015,7 +3049,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3065,7 +3099,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3073,7 +3107,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3089,7 +3123,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3097,7 +3131,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3146,7 +3180,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3154,7 +3188,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3170,7 +3204,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3178,7 +3212,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3227,7 +3261,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3235,7 +3269,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3251,7 +3285,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3259,7 +3293,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3310,7 +3344,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3318,7 +3352,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3334,7 +3368,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3342,7 +3376,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3396,7 +3430,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3404,7 +3438,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3420,7 +3454,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3428,7 +3462,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3478,7 +3512,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3486,7 +3520,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3502,7 +3536,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3510,7 +3544,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3560,7 +3594,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3568,7 +3602,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3584,7 +3618,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3592,7 +3626,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3643,7 +3677,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3651,7 +3685,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3667,7 +3701,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3675,7 +3709,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3726,7 +3760,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3734,7 +3768,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3750,7 +3784,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3758,7 +3792,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3809,7 +3843,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3817,7 +3851,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3833,7 +3867,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3841,7 +3875,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3903,7 +3937,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As user with partial permissions"): # # Get user to run subtest on. - # self._setup_user(["add_foo"]) + # self._setup_user(permissions=["add_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3911,7 +3945,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As user with full permissions"): # # Get user to run subtest on. - # self._setup_user(["add_foo", "change_foo"]) + # self._setup_user(permissions=["add_foo", "change_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3927,7 +3961,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As staff user with partial permissions"): # # Get user to run subtest on. - # self._setup_staff_user(["add_foo"]) + # self._setup_staff_user(permissions=["add_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3935,7 +3969,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As staff user with full permissions"): # # Get user to run subtest on. - # self._setup_staff_user(["add_foo", "change_foo"]) + # self._setup_staff_user(permissions=["add_foo", "change_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -3987,7 +4021,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As user with partial permissions"): # # Get user to run subtest on. - # self._setup_user(["add_foo"]) + # self._setup_user(permissions=["add_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -3995,7 +4029,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As user with full permissions"): # # Get user to run subtest on. - # self._setup_user(["add_foo", "change_foo"]) + # self._setup_user(permissions=["add_foo", "change_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4011,7 +4045,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As staff user with partial permissions"): # # Get user to run subtest on. - # self._setup_staff_user(["add_foo"]) + # self._setup_staff_user(permissions=["add_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4019,7 +4053,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As staff user with full permissions"): # # Get user to run subtest on. - # self._setup_staff_user(["add_foo", "change_foo"]) + # self._setup_staff_user(permissions=["add_foo", "change_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4071,7 +4105,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As user with partial permissions"): # # Get user to run subtest on. - # self._setup_user(["add_foo"]) + # self._setup_user(permissions=["add_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4079,7 +4113,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As user with full permissions"): # # Get user to run subtest on. - # self._setup_user(["add_foo", "change_foo"]) + # self._setup_user(permissions=["add_foo", "change_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4095,7 +4129,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As staff user with partial permissions"): # # Get user to run subtest on. - # self._setup_staff_user(["add_foo"]) + # self._setup_staff_user(permissions=["add_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4103,7 +4137,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As staff user with full permissions"): # # Get user to run subtest on. - # self._setup_staff_user(["add_foo", "change_foo"]) + # self._setup_staff_user(permissions=["add_foo", "change_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4155,7 +4189,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As user with partial permissions"): # # Get user to run subtest on. - # self._setup_user(["add_foo"]) + # self._setup_user(permissions=["add_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4163,7 +4197,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As user with full permissions"): # # Get user to run subtest on. - # self._setup_user(["add_foo", "change_foo"]) + # self._setup_user(permissions=["add_foo", "change_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4179,7 +4213,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As staff user with partial permissions"): # # Get user to run subtest on. - # self._setup_staff_user(["add_foo"]) + # self._setup_staff_user(permissions=["add_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4187,7 +4221,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As staff user with full permissions"): # # Get user to run subtest on. - # self._setup_staff_user(["add_foo", "change_foo"]) + # self._setup_staff_user(permissions=["add_foo", "change_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4239,7 +4273,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As user with partial permissions"): # # Get user to run subtest on. - # self._setup_user(["add_foo"]) + # self._setup_user(permissions=["add_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4247,7 +4281,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As user with full permissions"): # # Get user to run subtest on. - # self._setup_user(["add_foo", "change_foo"]) + # self._setup_user(permissions=["add_foo", "change_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4263,7 +4297,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As staff user with partial permissions"): # # Get user to run subtest on. - # self._setup_staff_user(["add_foo"]) + # self._setup_staff_user(permissions=["add_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4271,7 +4305,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As staff user with full permissions"): # # Get user to run subtest on. - # self._setup_staff_user(["add_foo", "change_foo"]) + # self._setup_staff_user(permissions=["add_foo", "change_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4323,7 +4357,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As user with partial permissions"): # # Get user to run subtest on. - # self._setup_user(["add_foo"]) + # self._setup_user(permissions=["add_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4331,7 +4365,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As user with full permissions"): # # Get user to run subtest on. - # self._setup_user(["add_foo", "change_foo"]) + # self._setup_user(permissions=["add_foo", "change_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4347,7 +4381,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As staff user with partial permissions"): # # Get user to run subtest on. - # self._setup_staff_user(["add_foo"]) + # self._setup_staff_user(permissions=["add_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4355,7 +4389,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes # # with self.subTest("As staff user with full permissions"): # # Get user to run subtest on. - # self._setup_staff_user(["add_foo", "change_foo"]) + # self._setup_staff_user(permissions=["add_foo", "change_foo"]) # # # Test sidebar logic. # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4410,7 +4444,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4418,7 +4452,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4434,7 +4468,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4442,7 +4476,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4494,7 +4528,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4502,7 +4536,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4518,7 +4552,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4526,7 +4560,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4578,7 +4612,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4586,7 +4620,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4602,7 +4636,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4610,7 +4644,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4662,7 +4696,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4670,7 +4704,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4686,7 +4720,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4694,7 +4728,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4746,7 +4780,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4754,7 +4788,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4770,7 +4804,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4778,7 +4812,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4830,7 +4864,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4838,7 +4872,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4854,7 +4888,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4862,7 +4896,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4910,7 +4944,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with no permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4918,7 +4952,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4926,7 +4960,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -4942,7 +4976,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4950,7 +4984,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -4995,7 +5029,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with no permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -5003,7 +5037,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -5011,7 +5045,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -5027,7 +5061,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -5035,7 +5069,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -5088,7 +5122,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -5096,7 +5130,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -5112,7 +5146,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -5120,7 +5154,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -5173,7 +5207,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -5181,7 +5215,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -5197,7 +5231,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -5205,7 +5239,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -5258,7 +5292,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -5266,7 +5300,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -5282,7 +5316,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -5290,7 +5324,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -5343,7 +5377,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with partial permissions"): # Get user to run subtest on. - self._setup_user(["add_foo"]) + self._setup_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -5351,7 +5385,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As user with full permissions"): # Get user to run subtest on. - self._setup_user(["add_foo", "change_foo"]) + self._setup_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.user, node) @@ -5367,7 +5401,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with partial permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo"]) + self._setup_staff_user(permissions=["add_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) @@ -5375,7 +5409,7 @@ class TemplateTagSidebarMenu_IsAllowedNodeTestCase(TemplateTagSidebarMenuBaseTes with self.subTest("As staff user with full permissions"): # Get user to run subtest on. - self._setup_staff_user(["add_foo", "change_foo"]) + self._setup_staff_user(permissions=["add_foo", "change_foo"]) # Test sidebar logic. allowed = sidebar_menu.is_allowed_node(self.staff_user, node) diff --git a/tests/django_adminlte2_pdq/tests/test_templatetags/test_sidebar_menu_node_fallback.py b/tests/django_adminlte2_pdq/tests/test_templatetags/test_sidebar_menu_node_fallback.py new file mode 100644 index 0000000000000000000000000000000000000000..c4a62323caf248f3bea85f7a189fb96e48b6f314 --- /dev/null +++ b/tests/django_adminlte2_pdq/tests/test_templatetags/test_sidebar_menu_node_fallback.py @@ -0,0 +1,14931 @@ +""" +Tests for Template Tags +""" + +# System Imports. +from unittest.mock import patch + +# Third-party Imports. +from django.contrib.auth import get_user_model + +# Internal Imports. +from .test_sidebar_menu import TemplateTagSidebarMenuBaseTestCase +from adminlte2_pdq.templatetags import sidebar_menu + + +# Module Variables. +UserModel = get_user_model() + + +class TemplateTagSidebarMenu__ViewFallbackWhenNodeUndefined__Decorators(TemplateTagSidebarMenuBaseTestCase): + """Tests the logic for when a node does not have permissions defined, + so logic has to fall back to values defined on a function-based (aka decorator) view. + """ + + FULL_VIEW_WHITELIST = [ + "adminlte2_pdq:demo-css", + "adminlte2_pdq_tests:function-allow-anonymous-access", + "adminlte2_pdq_tests:function-login-required", + "adminlte2_pdq_tests:function-allow-without-permissions", + "adminlte2_pdq_tests:function-one-permission-required", + "adminlte2_pdq_tests:function-one-permission-required-as-string", + "adminlte2_pdq_tests:function-full-permissions-required", + "adminlte2_pdq_tests:function-full-permissions-required-as-string", + ] + + # region Loose Mode + + def test__loose_mode__view_with_no_decorator(self): + """Tests for a view with no decorator defined.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq:demo-css", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + def test__loose_mode__view_with_anonymous_access_decorator(self): + """Tests for a view with a AllowAnonymous decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-allow-anonymous-access", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + def test__loose_mode__view_with_login_required_decorator(self): + """Tests for a node deferring to a view with a LoginRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-login-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + def test__loose_mode__view_with_allow_without_permissions_decorator(self): + """Tests for a node deferring to a view with a AllowWithoutPermission decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-allow-without-permissions", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + def test__loose_mode__view_with_one_permission_required_decorator(self): + """Tests for a node deferring to a view with a OnePermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-one-permission-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + def test__loose_mode__view_with_one_permission_required_decorator_as_string(self): + """Tests for a node deferring to a view with a OnePermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-one-permission-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + def test__loose_mode__view_with_permission_required_decorator(self): + """Tests for a node deferring to a view with a PermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-full-permissions-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + def test__loose_mode__view_with_permission_required_decorator__as_str(self): + """Tests for a node deferring to a view with a PermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-full-permissions-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + # endregion Loose Mode + + # region LoginRequired Mode, No Whitelist + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + def test__login_required_mode__no_whitelists__view_with_no_decorator(self): + """Tests for a view with no decorator defined.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq:demo-css", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + def test__login_required_mode__no_whitelists__view_with_anonymous_access_decorator(self): + """Tests for a view with a AllowAnonymous decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-allow-anonymous-access", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + def test__login_required_mode__no_whitelists__view_with_login_required_decorator(self): + """Tests for a node deferring to a view with a LoginRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-login-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + def test__login_required_mode__no_whitelists__view_with_allow_without_permissions_decorator(self): + """Tests for a node deferring to a view with a AllowWithoutPermission decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-allow-without-permissions", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + def test__login_required_mode__no_whitelists__view_with_one_permission_required_decorator(self): + """Tests for a node deferring to a view with a OnePermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-one-permission-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + def test__login_required_mode__no_whitelists__view_with_one_permission_required_decorator_as_string(self): + """Tests for a node deferring to a view with a OnePermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-one-permission-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + def test__login_required_mode__no_whitelists__view_with_permission_required_decorator(self): + """Tests for a node deferring to a view with a PermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-full-permissions-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + def test__login_required_mode__no_whitelists__view_with_permission_required_decorator__as_str(self): + """Tests for a node deferring to a view with a PermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-full-permissions-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + # endregion LoginRequired Mode, No Whitelist + + # region LoginRequired Mode, Login Whitelist + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__login_required_mode__with_login_whitelist__view_with_no_decorator(self): + """Tests for a view with no decorator defined.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq:demo-css", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__login_required_mode__with_login_whitelist__view_with_anonymous_access_decorator(self): + """Tests for a view with a AllowAnonymous decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-allow-anonymous-access", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__login_required_mode__with_login_whitelist__view_with_login_required_decorator(self): + """Tests for a node deferring to a view with a LoginRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-login-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__login_required_mode__with_login_whitelist__view_with_allow_without_permissions_decorator(self): + """Tests for a node deferring to a view with a AllowWithoutPermission decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-allow-without-permissions", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__login_required_mode__with_login_whitelist__view_with_one_permission_required_decorator(self): + """Tests for a node deferring to a view with a OnePermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-one-permission-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__login_required_mode__with_login_whitelist__view_with_one_permission_required_decorator_as_string(self): + """Tests for a node deferring to a view with a OnePermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-one-permission-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__login_required_mode__with_login_whitelist__view_with_permission_required_decorator(self): + """Tests for a node deferring to a view with a PermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-full-permissions-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__login_required_mode__with_login_whitelist__view_with_permission_required_decorator__as_str(self): + """Tests for a node deferring to a view with a PermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-full-permissions-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + # endregion LoginRequired Mode, Login Whitelist + + # region Strict Mode, No Whitelist + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + def test__strict_mode__no_whitelists__view_with_no_decorator(self): + """Tests for a view with no decorator defined.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq:demo-css", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + def test__strict_mode__no_whitelists__view_with_anonymous_access_decorator(self): + """Tests for a view with a AllowAnonymous decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-allow-anonymous-access", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + def test__strict_mode__no_whitelists__view_with_login_required_decorator(self): + """Tests for a node deferring to a view with a LoginRequired decorator.""" + + # Note: LoginRequired is not valid for STRICT mode. + # Behavior is currently undefined, so here we verify behavior is more strict rather than less. + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-login-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + def test__strict_mode__no_whitelists__view_with_allow_without_permissions_decorator(self): + """Tests for a node deferring to a view with a AllowWithoutPermission decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-allow-without-permissions", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + def test__strict_mode__no_whitelists__view_with_one_permission_required_decorator(self): + """Tests for a node deferring to a view with a OnePermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-one-permission-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + def test__strict_mode__no_whitelists__view_with_one_permission_required_decorator_as_string(self): + """Tests for a node deferring to a view with a OnePermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-one-permission-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + def test__strict_mode__no_whitelists__view_with_permission_required_decorator(self): + """Tests for a node deferring to a view with a PermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-full-permissions-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + def test__strict_mode__no_whitelists__view_with_permission_required_decorator__as_str(self): + """Tests for a node deferring to a view with a PermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-full-permissions-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + # endregion Strict Mode, No Whitelist + + # region Strict Mode, Login Whitelist + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_login_whitelist__view_with_no_decorator(self): + """Tests for a view with no decorator defined.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq:demo-css", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_login_whitelist__view_with_anonymous_access_decorator(self): + """Tests for a view with a AllowAnonymous decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-allow-anonymous-access", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_login_whitelist__view_with_login_required_decorator(self): + """Tests for a node deferring to a view with a LoginRequired decorator.""" + + # Note: LoginRequired is not valid for STRICT mode. + # Behavior is currently undefined, so here we verify behavior is more strict rather than less. + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-login-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_login_whitelist__view_with_allow_without_permissions_decorator(self): + """Tests for a node deferring to a view with a AllowWithoutPermission decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-allow-without-permissions", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_login_whitelist__view_with_one_permission_required_decorator(self): + """Tests for a node deferring to a view with a OnePermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-one-permission-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_login_whitelist__view_with_one_permission_required_decorator_as_string(self): + """Tests for a node deferring to a view with a OnePermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-one-permission-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_login_whitelist__view_with_permission_required_decorator(self): + """Tests for a node deferring to a view with a PermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-full-permissions-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_login_whitelist__view_with_permission_required_decorator__as_str(self): + """Tests for a node deferring to a view with a PermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-full-permissions-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + # endregion Strict Mode, Login Whitelist + + # region Strict Mode, Permission Whitelist + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_permission_whitelist__view_with_no_decorator(self): + """Tests for a view with no decorator defined.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq:demo-css", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_permission_whitelist__view_with_anonymous_access_decorator(self): + """Tests for a view with a AllowAnonymous decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-allow-anonymous-access", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_permission_whitelist__view_with_login_required_decorator(self): + """Tests for a node deferring to a view with a LoginRequired decorator.""" + + # Note: LoginRequired is not valid for STRICT mode. + # Behavior is currently undefined, so here we verify behavior is more strict rather than less. + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-login-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_permission_whitelist__view_with_allow_without_permissions_decorator(self): + """Tests for a node deferring to a view with a AllowWithoutPermission decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-allow-without-permissions", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_permission_whitelist__view_with_one_permission_required_decorator(self): + """Tests for a node deferring to a view with a OnePermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-one-permission-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_permission_whitelist__view_with_one_permission_required_decorator_as_string(self): + """Tests for a node deferring to a view with a OnePermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-one-permission-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_permission_whitelist__view_with_permission_required_decorator(self): + """Tests for a node deferring to a view with a PermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-full-permissions-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_permission_whitelist__view_with_permission_required_decorator__as_str(self): + """Tests for a node deferring to a view with a PermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-full-permissions-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + # endregion Strict Mode, Permission Whitelist + + # region Strict Mode, Both Whitelists + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__both_whitelists__view_with_no_decorator(self): + """Tests for a view with no decorator defined.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq:demo-css", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__both_whitelists__view_with_anonymous_access_decorator(self): + """Tests for a view with a AllowAnonymous decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-allow-anonymous-access", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__both_whitelists__view_with_login_required_decorator(self): + """Tests for a node deferring to a view with a LoginRequired decorator.""" + + # Note: LoginRequired is not valid for STRICT mode. + # Behavior is currently undefined, so here we verify behavior is more strict rather than less. + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-login-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__both_whitelists__view_with_allow_without_permissions_decorator(self): + """Tests for a node deferring to a view with a AllowWithoutPermission decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-allow-without-permissions", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__both_whitelists__view_with_one_permission_required_decorator(self): + """Tests for a node deferring to a view with a OnePermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-one-permission-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__both_whitelists__view_with_one_permission_required_decorator_as_string(self): + """Tests for a node deferring to a view with a OnePermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-one-permission-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__both_whitelists__view_with_permission_required_decorator(self): + """Tests for a node deferring to a view with a PermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-full-permissions-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__both_whitelists__view_with_permission_required_decorator__as_str(self): + """Tests for a node deferring to a view with a PermissionRequired decorator.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:function-full-permissions-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + # endregion Strict Mode, Both Whitelists + + +class TemplateTagSidebarMenu__ViewFallbackWhenNodeUndefined__Classes(TemplateTagSidebarMenuBaseTestCase): + """Tests the logic for when a node does not have permissions defined, + so logic has to fall back to values defined on a class-based (aka mixin) view. + """ + + FULL_VIEW_WHITELIST = [ + "adminlte2_pdq:demo-css", + "adminlte2_pdq_tests:class-allow-anonymous-access", + "adminlte2_pdq_tests:class-login-required", + "adminlte2_pdq_tests:class-allow-without-permissions", + "adminlte2_pdq_tests:class-one-permission-required", + "adminlte2_pdq_tests:class-one-permission-required-as-string", + "adminlte2_pdq_tests:class-full-permissions-required", + "adminlte2_pdq_tests:class-full-permissions-required-as-string", + ] + + # region Loose Mode + + def test__loose_mode__view_with_no_mixin(self): + """Tests for a view with no mixin defined.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq:demo-css", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + def test__loose_mode__view_with_anonymous_access_mixin(self): + """Tests for a view with a AllowAnonymous mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-allow-anonymous-access", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + def test__loose_mode__view_with_login_required_mixin(self): + """Tests for a node deferring to a view with a LoginRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-login-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + # with self.subTest("As anonymous user"): + # # Get user to run subtest on. + # self._setup_anonymous_user() + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + # self.assertFalse(allowed) + + # with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + # with self.subTest("As user with wrong permissions"): + # # Get user to run subtest on. + # self._setup_user(permissions=["view_foo", "delete_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with partial permissions"): + # # Get user to run subtest on. + # self._setup_user(permissions=["add_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with full permissions"): + # # Get user to run subtest on. + # self._setup_user(permissions=["add_foo", "change_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with wrong permission groups"): + # # Get user to run subtest on. + # self._setup_user(groups=["view_bar", "delete_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with partial permission groups"): + # # Get user to run subtest on. + # self._setup_user(groups=["add_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with full permission groups"): + # # Get user to run subtest on. + # self._setup_user(groups=["add_bar", "change_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with no permissions"): + # # Get user to run subtest on. + # self._setup_staff_user() + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with wrong permissions"): + # # Get user to run subtest on. + # self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with partial permissions"): + # # Get user to run subtest on. + # self._setup_staff_user(permissions=["add_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with full permissions"): + # # Get user to run subtest on. + # self._setup_staff_user(permissions=["add_foo", "change_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with wrong permission groups"): + # # Get user to run subtest on. + # self._setup_staff_user(groups=["view_bar", "delete_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with partial permission groups"): + # # Get user to run subtest on. + # self._setup_staff_user(groups=["add_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with full permission groups"): + # # Get user to run subtest on. + # self._setup_staff_user(groups=["add_bar", "change_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As superuser"): + # # Get user to run subtest on. + # self._setup_super_user() + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.super_user, node) + # self.assertTrue(allowed) + + def test__loose_mode__view_with_allow_without_permissions_mixin(self): + """Tests for a node deferring to a view with a AllowWithoutPermission mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-allow-without-permissions", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + def test__loose_mode__view_with_one_permission_required_mixin(self): + """Tests for a node deferring to a view with a OnePermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-one-permission-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + def test__loose_mode__view_with_one_permission_required_mixin_as_string(self): + """Tests for a node deferring to a view with a OnePermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-one-permission-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + def test__loose_mode__view_with_permission_required_mixin(self): + """Tests for a node deferring to a view with a PermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-full-permissions-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + def test__loose_mode__view_with_permission_required_mixin__as_str(self): + """Tests for a node deferring to a view with a PermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-full-permissions-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + # endregion Loose Mode + + # region LoginRequired Mode, No Whitelist + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + def test__login_required_mode__no_whitelists__view_with_no_mixin(self): + """Tests for a view with no mixin defined.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq:demo-css", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + def test__login_required_mode__no_whitelists__view_with_anonymous_access_mixin(self): + """Tests for a view with a AllowAnonymous mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-allow-anonymous-access", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + def test__login_required_mode__no_whitelists__view_with_login_required_mixin(self): + """Tests for a node deferring to a view with a LoginRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-login-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + def test__login_required_mode__no_whitelists__view_with_allow_without_permissions_mixin(self): + """Tests for a node deferring to a view with a AllowWithoutPermission mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-allow-without-permissions", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + def test__login_required_mode__no_whitelists__view_with_one_permission_required_mixin(self): + """Tests for a node deferring to a view with a OnePermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-one-permission-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + def test__login_required_mode__no_whitelists__view_with_one_permission_required_mixin_as_string(self): + """Tests for a node deferring to a view with a OnePermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-one-permission-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + def test__login_required_mode__no_whitelists__view_with_permission_required_mixin(self): + """Tests for a node deferring to a view with a PermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-full-permissions-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + def test__login_required_mode__no_whitelists__view_with_permission_required_mixin__as_str(self): + """Tests for a node deferring to a view with a PermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-full-permissions-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + # endregion LoginRequired Mode, No Whitelist + + # region LoginRequired Mode, Login Whitelist + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__login_required_mode__with_login_whitelist__view_with_no_mixin(self): + """Tests for a view with no mixin defined.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq:demo-css", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__login_required_mode__with_login_whitelist__view_with_anonymous_access_mixin(self): + """Tests for a view with a AllowAnonymous mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-allow-anonymous-access", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__login_required_mode__with_login_whitelist__view_with_login_required_mixin(self): + """Tests for a node deferring to a view with a LoginRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-login-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__login_required_mode__with_login_whitelist__view_with_allow_without_permissions_mixin(self): + """Tests for a node deferring to a view with a AllowWithoutPermission mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-allow-without-permissions", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__login_required_mode__with_login_whitelist__view_with_one_permission_required_mixin(self): + """Tests for a node deferring to a view with a OnePermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-one-permission-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__login_required_mode__with_login_whitelist__view_with_one_permission_required_mixin_as_string(self): + """Tests for a node deferring to a view with a OnePermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-one-permission-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__login_required_mode__with_login_whitelist__view_with_permission_required_mixin(self): + """Tests for a node deferring to a view with a PermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-full-permissions-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__login_required_mode__with_login_whitelist__view_with_permission_required_mixin__as_str(self): + """Tests for a node deferring to a view with a PermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-full-permissions-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + # endregion LoginRequired Mode, Login Whitelist + + # region Strict Mode, No Whitelist + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + def test__strict_mode__no_whitelists__view_with_no_mixin(self): + """Tests for a view with no mixin defined.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq:demo-css", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + def test__strict_mode__no_whitelists__view_with_anonymous_access_mixin(self): + """Tests for a view with a AllowAnonymous mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-allow-anonymous-access", + "text": "Test Node", + "icon": "fa fa-file", + } + + # with self.subTest("As anonymous user"): + # # Get user to run subtest on. + # self._setup_anonymous_user() + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + # self.assertTrue(allowed) + + # with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + # with self.subTest("As user with wrong permissions"): + # # Get user to run subtest on. + # self._setup_user(permissions=["view_foo", "delete_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with partial permissions"): + # # Get user to run subtest on. + # self._setup_user(permissions=["add_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with full permissions"): + # # Get user to run subtest on. + # self._setup_user(permissions=["add_foo", "change_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with wrong permission groups"): + # # Get user to run subtest on. + # self._setup_user(groups=["view_bar", "delete_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with partial permission groups"): + # # Get user to run subtest on. + # self._setup_user(groups=["add_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with full permission groups"): + # # Get user to run subtest on. + # self._setup_user(groups=["add_bar", "change_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with no permissions"): + # # Get user to run subtest on. + # self._setup_staff_user() + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with wrong permissions"): + # # Get user to run subtest on. + # self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with partial permissions"): + # # Get user to run subtest on. + # self._setup_staff_user(permissions=["add_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with full permissions"): + # # Get user to run subtest on. + # self._setup_staff_user(permissions=["add_foo", "change_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with wrong permission groups"): + # # Get user to run subtest on. + # self._setup_staff_user(groups=["view_bar", "delete_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with partial permission groups"): + # # Get user to run subtest on. + # self._setup_staff_user(groups=["add_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with full permission groups"): + # # Get user to run subtest on. + # self._setup_staff_user(groups=["add_bar", "change_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As superuser"): + # # Get user to run subtest on. + # self._setup_super_user() + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.super_user, node) + # self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + def test__strict_mode__no_whitelists__view_with_login_required_mixin(self): + """Tests for a node deferring to a view with a LoginRequired mixin.""" + + # Note: LoginRequired is not valid for STRICT mode. + # Behavior is currently undefined, so here we verify behavior is more strict rather than less. + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-login-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + def test__strict_mode__no_whitelists__view_with_allow_without_permissions_mixin(self): + """Tests for a node deferring to a view with a AllowWithoutPermission mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-allow-without-permissions", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + def test__strict_mode__no_whitelists__view_with_one_permission_required_mixin(self): + """Tests for a node deferring to a view with a OnePermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-one-permission-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + def test__strict_mode__no_whitelists__view_with_one_permission_required_mixin_as_string(self): + """Tests for a node deferring to a view with a OnePermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-one-permission-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + def test__strict_mode__no_whitelists__view_with_permission_required_mixin(self): + """Tests for a node deferring to a view with a PermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-full-permissions-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + def test__strict_mode__no_whitelists__view_with_permission_required_mixin__as_str(self): + """Tests for a node deferring to a view with a PermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-full-permissions-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + # endregion Strict Mode, No Whitelist + + # region Strict Mode, Login Whitelist + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_login_whitelist__view_with_no_mixin(self): + """Tests for a view with no mixin defined.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq:demo-css", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_login_whitelist__view_with_anonymous_access_mixin(self): + """Tests for a view with a AllowAnonymous mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-allow-anonymous-access", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_login_whitelist__view_with_login_required_mixin(self): + """Tests for a node deferring to a view with a LoginRequired mixin.""" + + # Note: LoginRequired is not valid for STRICT mode. + # Behavior is currently undefined, so here we verify behavior is more strict rather than less. + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-login-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_login_whitelist__view_with_allow_without_permissions_mixin(self): + """Tests for a node deferring to a view with a AllowWithoutPermission mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-allow-without-permissions", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_login_whitelist__view_with_one_permission_required_mixin(self): + """Tests for a node deferring to a view with a OnePermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-one-permission-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_login_whitelist__view_with_one_permission_required_mixin_as_string(self): + """Tests for a node deferring to a view with a OnePermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-one-permission-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_login_whitelist__view_with_permission_required_mixin(self): + """Tests for a node deferring to a view with a PermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-full-permissions-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_login_whitelist__view_with_permission_required_mixin__as_str(self): + """Tests for a node deferring to a view with a PermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-full-permissions-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertFalse(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertFalse(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + # endregion Strict Mode, Login Whitelist + + # region Strict Mode, Permission Whitelist + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_permission_whitelist__view_with_no_mixin(self): + """Tests for a view with no mixin defined.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq:demo-css", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_permission_whitelist__view_with_anonymous_access_mixin(self): + """Tests for a view with a AllowAnonymous mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-allow-anonymous-access", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_permission_whitelist__view_with_login_required_mixin(self): + """Tests for a node deferring to a view with a LoginRequired mixin.""" + + # Note: LoginRequired is not valid for STRICT mode. + # Behavior is currently undefined, so here we verify behavior is more strict rather than less. + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-login-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_permission_whitelist__view_with_allow_without_permissions_mixin(self): + """Tests for a node deferring to a view with a AllowWithoutPermission mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-allow-without-permissions", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_permission_whitelist__view_with_one_permission_required_mixin(self): + """Tests for a node deferring to a view with a OnePermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-one-permission-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_permission_whitelist__view_with_one_permission_required_mixin_as_string(self): + """Tests for a node deferring to a view with a OnePermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-one-permission-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_permission_whitelist__view_with_permission_required_mixin(self): + """Tests for a node deferring to a view with a PermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-full-permissions-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__with_permission_whitelist__view_with_permission_required_mixin__as_str(self): + """Tests for a node deferring to a view with a PermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-full-permissions-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertFalse(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + # endregion Strict Mode, Permission Whitelist + + # region Strict Mode, Both Whitelists + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__both_whitelists__view_with_no_mixin(self): + """Tests for a view with no mixin defined.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq:demo-css", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__both_whitelists__view_with_anonymous_access_mixin(self): + """Tests for a view with a AllowAnonymous mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-allow-anonymous-access", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__both_whitelists__view_with_login_required_mixin(self): + """Tests for a node deferring to a view with a LoginRequired mixin.""" + + # Note: LoginRequired is not valid for STRICT mode. + # Behavior is currently undefined, so here we verify behavior is more strict rather than less. + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-login-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__both_whitelists__view_with_allow_without_permissions_mixin(self): + """Tests for a node deferring to a view with a AllowWithoutPermission mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-allow-without-permissions", + "text": "Test Node", + "icon": "fa fa-file", + } + + # with self.subTest("As anonymous user"): + # # Get user to run subtest on. + # self._setup_anonymous_user() + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + # self.assertTrue(allowed) + + # with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + # with self.subTest("As user with wrong permissions"): + # # Get user to run subtest on. + # self._setup_user(permissions=["view_foo", "delete_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with partial permissions"): + # # Get user to run subtest on. + # self._setup_user(permissions=["add_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with full permissions"): + # # Get user to run subtest on. + # self._setup_user(permissions=["add_foo", "change_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with wrong permission groups"): + # # Get user to run subtest on. + # self._setup_user(groups=["view_bar", "delete_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with partial permission groups"): + # # Get user to run subtest on. + # self._setup_user(groups=["add_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with full permission groups"): + # # Get user to run subtest on. + # self._setup_user(groups=["add_bar", "change_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with no permissions"): + # # Get user to run subtest on. + # self._setup_staff_user() + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As user with wrong permissions"): + # # Get user to run subtest on. + # self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with partial permissions"): + # # Get user to run subtest on. + # self._setup_staff_user(permissions=["add_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with full permissions"): + # # Get user to run subtest on. + # self._setup_staff_user(permissions=["add_foo", "change_foo"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with wrong permission groups"): + # # Get user to run subtest on. + # self._setup_staff_user(groups=["view_bar", "delete_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with partial permission groups"): + # # Get user to run subtest on. + # self._setup_staff_user(groups=["add_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As staff user with full permission groups"): + # # Get user to run subtest on. + # self._setup_staff_user(groups=["add_bar", "change_bar"]) + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + # self.assertTrue(allowed) + # + # with self.subTest("As superuser"): + # # Get user to run subtest on. + # self._setup_super_user() + # + # # Test sidebar logic. + # allowed = sidebar_menu.is_allowed_node(self.super_user, node) + # self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__both_whitelists__view_with_one_permission_required_mixin(self): + """Tests for a node deferring to a view with a OnePermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-one-permission-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__both_whitelists__view_with_one_permission_required_mixin_as_string(self): + """Tests for a node deferring to a view with a OnePermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-one-permission-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__both_whitelists__view_with_permission_required_mixin(self): + """Tests for a node deferring to a view with a PermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-full-permissions-required", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with partial permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo", "change_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with partial permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar", "change_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_REQUIRED", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY", True) + @patch("adminlte2_pdq.templatetags.sidebar_menu.LOGIN_EXEMPT_WHITELIST", FULL_VIEW_WHITELIST) + @patch("adminlte2_pdq.templatetags.sidebar_menu.STRICT_POLICY_WHITELIST", FULL_VIEW_WHITELIST) + def test__strict_mode__both_whitelists__view_with_permission_required_mixin__as_str(self): + """Tests for a node deferring to a view with a PermissionRequired mixin.""" + + # Node used for all subtests. + node = { + "route": "adminlte2_pdq_tests:class-full-permissions-required-as-string", + "text": "Test Node", + "icon": "fa fa-file", + } + + with self.subTest("As anonymous user"): + # Get user to run subtest on. + self._setup_anonymous_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.anonymous_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with no permissions"): + # Get user to run subtest on. + self._setup_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permissions"): + # Get user to run subtest on. + self._setup_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As user with full permission groups"): + # Get user to run subtest on. + self._setup_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with no permissions"): + # Get user to run subtest on. + self._setup_staff_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As user with wrong permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["view_foo", "delete_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permissions"): + # Get user to run subtest on. + self._setup_staff_user(permissions=["add_foo"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with wrong permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["view_bar", "delete_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As staff user with full permission groups"): + # Get user to run subtest on. + self._setup_staff_user(groups=["add_bar"]) + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.staff_user, node) + self.assertTrue(allowed) + + with self.subTest("As superuser"): + # Get user to run subtest on. + self._setup_super_user() + + # Test sidebar logic. + allowed = sidebar_menu.is_allowed_node(self.super_user, node) + self.assertTrue(allowed) + + # endregion Strict Mode, Both Whitelists