mirror of
https://github.com/ae-utbm/sith.git
synced 2025-09-23 08:33:54 +00:00
fix: N+1 query on PageListView
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
import pytest
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import Permission
|
||||
from django.test import Client
|
||||
from django.urls import reverse
|
||||
from model_bakery import baker
|
||||
from pytest_django.asserts import assertRedirects
|
||||
|
||||
from core.baker_recipes import board_user
|
||||
from core.models import Page
|
||||
from core.baker_recipes import board_user, subscriber_user
|
||||
from core.models import AnonymousUser, Page, User
|
||||
from sith.settings import SITH_GROUP_OLD_SUBSCRIBERS_ID, SITH_GROUP_SUBSCRIBERS_ID
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -24,3 +27,32 @@ def test_edit_page(client: Client):
|
||||
assertRedirects(res, reverse("core:page", kwargs={"page_name": page._full_name}))
|
||||
revision = page.revisions.last()
|
||||
assert revision.content == "Hello World"
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_viewable_by():
|
||||
# remove existing pages to prevent side effect
|
||||
Page.objects.all().delete()
|
||||
view_groups = [
|
||||
[settings.SITH_GROUP_PUBLIC_ID],
|
||||
[settings.SITH_GROUP_PUBLIC_ID, SITH_GROUP_SUBSCRIBERS_ID],
|
||||
[SITH_GROUP_SUBSCRIBERS_ID],
|
||||
[SITH_GROUP_SUBSCRIBERS_ID, SITH_GROUP_OLD_SUBSCRIBERS_ID],
|
||||
[],
|
||||
]
|
||||
pages = baker.make(Page, _quantity=len(view_groups), _bulk_create=True)
|
||||
for page, groups in zip(pages, view_groups, strict=True):
|
||||
page.view_groups.set(groups)
|
||||
|
||||
viewable = Page.objects.viewable_by(AnonymousUser()).values_list("id", flat=True)
|
||||
assert set(viewable) == {pages[0].id, pages[1].id}
|
||||
|
||||
subscriber = subscriber_user.make()
|
||||
viewable = Page.objects.viewable_by(subscriber).values_list("id", flat=True)
|
||||
assert set(viewable) == {p.id for p in pages[0:4]}
|
||||
|
||||
root_user = baker.make(
|
||||
User, user_permissions=[Permission.objects.get(codename="view_page")]
|
||||
)
|
||||
viewable = Page.objects.viewable_by(root_user).values_list("id", flat=True)
|
||||
assert set(viewable) == {p.id for p in pages}
|
||||
|
Reference in New Issue
Block a user