From 47afbca9c5f0d8a6bbc54e686a5cc13e65c2c237 Mon Sep 17 00:00:00 2001 From: rafalp Date: Sun, 16 Jun 2024 13:04:13 +0200 Subject: [PATCH] Test moderator permissions --- .../tests/test_moderator_manager.py | 28 +++--- .../tests/test_user_permissions_proxy.py | 85 ++++++++++++++++++- 2 files changed, 96 insertions(+), 17 deletions(-) diff --git a/misago/permissions/tests/test_moderator_manager.py b/misago/permissions/tests/test_moderator_manager.py index 9862014387..e47db7af63 100644 --- a/misago/permissions/tests/test_moderator_manager.py +++ b/misago/permissions/tests/test_moderator_manager.py @@ -10,36 +10,36 @@ def test_moderator_manager_get_moderator_data_returns_empty_data_for_user_if_non def test_moderator_manager_get_moderator_data_returns_categories_ids_for_user( - root_category, child_category, user + sibling_category, child_category, user ): Moderator.objects.create( is_global=False, user=user, - categories=[root_category.id, child_category.id], + categories=[sibling_category.id, child_category.id], ) data = Moderator.objects.get_moderator_data(user) assert not data.is_global - assert data.categories_ids == set([root_category.id, child_category.id]) + assert data.categories_ids == set([sibling_category.id, child_category.id]) def test_moderator_manager_get_moderator_data_sums_categories_ids_for_user( - root_category, child_category, user + sibling_category, child_category, user ): Moderator.objects.create( is_global=False, user=user, - categories=[root_category.id], + categories=[sibling_category.id], ) Moderator.objects.create( is_global=False, user=user, - categories=[root_category.id, child_category.id], + categories=[sibling_category.id, child_category.id], ) data = Moderator.objects.get_moderator_data(user) assert not data.is_global - assert data.categories_ids == set([root_category.id, child_category.id]) + assert data.categories_ids == set([sibling_category.id, child_category.id]) def test_moderator_manager_get_moderator_data_returns_global_flag_for_user(user): @@ -51,7 +51,7 @@ def test_moderator_manager_get_moderator_data_returns_global_flag_for_user(user) def test_moderator_manager_get_moderator_data_returns_categories_ids_for_user_group( - root_category, child_category, user, members_group, custom_group + sibling_category, child_category, user, members_group, custom_group ): user.set_groups(members_group, [custom_group]) user.save() @@ -59,16 +59,16 @@ def test_moderator_manager_get_moderator_data_returns_categories_ids_for_user_gr Moderator.objects.create( is_global=False, group=custom_group, - categories=[root_category.id, child_category.id], + categories=[sibling_category.id, child_category.id], ) data = Moderator.objects.get_moderator_data(user) assert not data.is_global - assert data.categories_ids == set([root_category.id, child_category.id]) + assert data.categories_ids == set([sibling_category.id, child_category.id]) def test_moderator_manager_get_moderator_data_sums_categories_ids_for_user_group( - root_category, child_category, user, members_group, custom_group + sibling_category, child_category, user, members_group, custom_group ): user.set_groups(members_group, [custom_group]) user.save() @@ -76,17 +76,17 @@ def test_moderator_manager_get_moderator_data_sums_categories_ids_for_user_group Moderator.objects.create( is_global=False, group=custom_group, - categories=[root_category.id], + categories=[sibling_category.id], ) Moderator.objects.create( is_global=False, group=custom_group, - categories=[root_category.id, child_category.id], + categories=[sibling_category.id, child_category.id], ) data = Moderator.objects.get_moderator_data(user) assert not data.is_global - assert data.categories_ids == set([root_category.id, child_category.id]) + assert data.categories_ids == set([sibling_category.id, child_category.id]) def test_moderator_manager_get_moderator_data_returns_global_flag_for_user_group( diff --git a/misago/permissions/tests/test_user_permissions_proxy.py b/misago/permissions/tests/test_user_permissions_proxy.py index 050c9a2b95..54820f496c 100644 --- a/misago/permissions/tests/test_user_permissions_proxy.py +++ b/misago/permissions/tests/test_user_permissions_proxy.py @@ -1,4 +1,5 @@ -from ..models import Moderator +from ..enums import CategoryPermission +from ..models import CategoryGroupPermission, Moderator from ..proxy import UserPermissionsProxy @@ -93,7 +94,7 @@ def test_user_permissions_proxy_returns_custom_moderators_secondary_member_globa assert proxy.is_global_moderator -def test_user_permissions_proxy_returns_member_global_moderator_permission( +def test_user_permissions_proxy_returns_true_for_member_global_moderator_permission( django_assert_num_queries, user, cache_versions ): Moderator.objects.create(is_global=True, user=user) @@ -103,9 +104,87 @@ def test_user_permissions_proxy_returns_member_global_moderator_permission( assert proxy.is_global_moderator -def test_user_permissions_proxy_returns_member_global_moderator_no_permission( +def test_user_permissions_proxy_returns_false_for_member_without_global_moderator_permission( django_assert_num_queries, user, cache_versions ): with django_assert_num_queries(1): proxy = UserPermissionsProxy(user, cache_versions) assert not proxy.is_global_moderator + + +def test_user_permissions_proxy_returns_false_for_member_without_global_moderator_permission( + django_assert_num_queries, user, cache_versions +): + with django_assert_num_queries(1): + proxy = UserPermissionsProxy(user, cache_versions) + assert not proxy.is_global_moderator + + +def test_user_permissions_proxy_returns_false_for_category_moderator( + django_assert_num_queries, user, cache_versions, other_category +): + Moderator.objects.create(is_global=False, user=user, categories=[other_category.id]) + + with django_assert_num_queries(1): + proxy = UserPermissionsProxy(user, cache_versions) + assert not proxy.is_global_moderator + + +def test_user_permissions_proxy_returns_list_of_moderated_categories_ids_for_local_moderator( + django_assert_num_queries, user, cache_versions, other_category +): + CategoryGroupPermission.objects.create( + category=other_category, + group=user.group, + permission=CategoryPermission.SEE, + ) + CategoryGroupPermission.objects.create( + category=other_category, + group=user.group, + permission=CategoryPermission.BROWSE, + ) + + Moderator.objects.create(is_global=False, user=user, categories=[other_category.id]) + + proxy = UserPermissionsProxy(user, cache_versions) + proxy.permissions + + with django_assert_num_queries(1): + assert proxy.categories_moderator == [other_category.id] + + +def test_user_permissions_proxy_excludes_not_browseable_categories_from_moderated_categories( + django_assert_num_queries, user, cache_versions, other_category +): + CategoryGroupPermission.objects.create( + category=other_category, + group=user.group, + permission=CategoryPermission.SEE, + ) + + Moderator.objects.create(is_global=False, user=user, categories=[other_category.id]) + + proxy = UserPermissionsProxy(user, cache_versions) + proxy.permissions + + with django_assert_num_queries(1): + assert proxy.categories_moderator == [] + + +def test_user_permissions_proxy_returns_false_global_moderator_for_anonymous_user( + django_assert_num_queries, db, anonymous_user, cache_versions +): + proxy = UserPermissionsProxy(anonymous_user, cache_versions) + + with django_assert_num_queries(0): + assert not proxy.is_global_moderator + + +def test_user_permissions_proxy_returns_no_moderated_categories_for_anonymous_user( + django_assert_num_queries, db, anonymous_user, cache_versions +): + proxy = UserPermissionsProxy(anonymous_user, cache_versions) + proxy.permissions + + with django_assert_num_queries(0): + assert not proxy.categories_moderator