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