roosterwijs/backend/core/tests/test_permissions.py
bes-r c845588e5e
Some checks failed
CI / backend (push) Has been cancelled
CI / frontend (push) Has been cancelled
Add roles modules audit logging and CI
2026-07-04 23:01:06 +02:00

78 lines
2.9 KiB
Python

from datetime import date, time
from django.contrib.auth import get_user_model
from django.test import TestCase
from rest_framework.test import APIClient
from core.models import Activiteit, Groep, Schooljaar, Tijdslot
from modules.accounts.models import Gebruikersprofiel
from plugins.models import AuditEvent, ModuleState
User = get_user_model()
class RolePermissionTests(TestCase):
def setUp(self):
self.client = APIClient()
self.schooljaar = Schooljaar.objects.create(
naam="2026-2027",
start_datum=date(2026, 8, 1),
eind_datum=date(2027, 7, 31),
)
self.groep = Groep.objects.create(naam="Groep A")
self.tijdslot = Tijdslot.objects.create(
naam="Blok 1",
dag=0,
start_tijd=time(8, 30),
eind_tijd=time(9, 15),
volgorde=1,
)
self.activiteit = Activiteit.objects.create(naam="Rekenen")
def user_met_rol(self, username, rol, is_staff=False):
user = User.objects.create_user(username=username, password="SterkWachtwoord123!", is_staff=is_staff)
Gebruikersprofiel.objects.create(user=user, rol=rol)
return user
def test_roostermaker_mag_roosterblok_maken_maar_geen_persoon(self):
user = self.user_met_rol("roostermaker", "roostermaker")
self.client.force_authenticate(user=user)
rooster_response = self.client.post(
"/api/roosterblokken/",
{
"schooljaar": self.schooljaar.id,
"tijdslot": self.tijdslot.id,
"activiteit": self.activiteit.id,
"groep": self.groep.id,
"begeleiders": [],
},
format="json",
)
self.assertEqual(rooster_response.status_code, 201, rooster_response.data)
persoon_response = self.client.post(
"/api/personen/",
{"voornaam": "Ada", "achternaam": "Lovelace", "rol": "leerling"},
format="json",
)
self.assertEqual(persoon_response.status_code, 403)
def test_module_gating_blokkeert_uitgeschakelde_importexport(self):
user = self.user_met_rol("beheer", "beheerder", is_staff=True)
self.client.force_authenticate(user=user)
ModuleState.objects.update_or_create(key="importexport", defaults={"enabled": False})
response = self.client.get("/api/export/personen/")
self.assertEqual(response.status_code, 403)
def test_audit_event_wordt_opgeslagen_bij_mutatie(self):
user = self.user_met_rol("beheer", "beheerder", is_staff=True)
self.client.force_authenticate(user=user)
response = self.client.post("/api/groepen/", {"naam": "Auditgroep"}, format="json")
self.assertEqual(response.status_code, 201, response.data)
self.assertTrue(AuditEvent.objects.filter(actor="beheer", action="create", target__startswith="Groep:").exists())