78 lines
2.9 KiB
Python
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())
|