Skip to content

Commit

Permalink
Test moderator permissions
Browse files Browse the repository at this point in the history
  • Loading branch information
rafalp committed Jun 16, 2024
1 parent 50558f6 commit 47afbca
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 17 deletions.
28 changes: 14 additions & 14 deletions misago/permissions/tests/test_moderator_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -51,42 +51,42 @@ 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()

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()

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(
Expand Down
85 changes: 82 additions & 3 deletions misago/permissions/tests/test_user_permissions_proxy.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from ..models import Moderator
from ..enums import CategoryPermission
from ..models import CategoryGroupPermission, Moderator
from ..proxy import UserPermissionsProxy


Expand Down Expand Up @@ -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)
Expand All @@ -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

0 comments on commit 47afbca

Please sign in to comment.