mirror of
https://github.com/ae-utbm/sith.git
synced 2025-09-23 08:33:54 +00:00
59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
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, 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
|
|
def test_edit_page(client: Client):
|
|
user = board_user.make()
|
|
page = baker.prepare(Page)
|
|
page.save(force_lock=True)
|
|
page.view_groups.add(user.groups.first())
|
|
client.force_login(user)
|
|
|
|
url = reverse("core:page_edit", kwargs={"page_name": page._full_name})
|
|
res = client.get(url)
|
|
assert res.status_code == 200
|
|
|
|
res = client.post(url, data={"content": "Hello World"})
|
|
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}
|