mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-11-04 01:12:08 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
 | 
						|
# SPDX-License-Identifier: GPL-3.0-or-later
 | 
						|
 | 
						|
from django.contrib.auth.models import User
 | 
						|
from django.core.exceptions import FieldError
 | 
						|
from django.db.models import F, Q
 | 
						|
from django.test import TestCase
 | 
						|
from django.utils import timezone
 | 
						|
from member.models import Club, Membership
 | 
						|
from note.models import NoteUser, Note, NoteClub, NoteSpecial
 | 
						|
from wei.models import WEIMembership, WEIRegistration, WEIClub, Bus, BusTeam
 | 
						|
 | 
						|
from ..models import Permission
 | 
						|
 | 
						|
 | 
						|
class PermissionQueryTestCase(TestCase):
 | 
						|
    fixtures = ('initial', )
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def setUpTestData(cls):
 | 
						|
        user = User.objects.create(username="user")
 | 
						|
        NoteUser.objects.create(user=user)
 | 
						|
        wei = WEIClub.objects.create(
 | 
						|
            name="wei",
 | 
						|
            date_start=timezone.now().date(),
 | 
						|
            date_end=timezone.now().date(),
 | 
						|
        )
 | 
						|
        NoteClub.objects.create(club=wei)
 | 
						|
        weiregistration = WEIRegistration.objects.create(
 | 
						|
            user=user,
 | 
						|
            wei=wei,
 | 
						|
            birth_date=timezone.now().date(),
 | 
						|
        )
 | 
						|
        bus = Bus.objects.create(
 | 
						|
            name="bus",
 | 
						|
            wei=wei,
 | 
						|
        )
 | 
						|
        team = BusTeam.objects.create(
 | 
						|
            name="team",
 | 
						|
            bus=bus,
 | 
						|
            color=0xFFFFFF,
 | 
						|
        )
 | 
						|
        WEIMembership.objects.create(
 | 
						|
            user=user,
 | 
						|
            club=wei,
 | 
						|
            registration=weiregistration,
 | 
						|
            bus=bus,
 | 
						|
            team=team,
 | 
						|
        )
 | 
						|
 | 
						|
    def test_permission_queries(self):
 | 
						|
        """
 | 
						|
        Check for all permissions that the query is compilable and that the database can parse the query.
 | 
						|
        We use a random user with a random WEIClub (to use permissions for the WEI) in a random team in a random bus.
 | 
						|
        """
 | 
						|
        for perm in Permission.objects.all():
 | 
						|
            instanced = perm.about(
 | 
						|
                user=User.objects.get(),
 | 
						|
                club=WEIClub.objects.get(),
 | 
						|
                membership=Membership.objects.get(),
 | 
						|
                User=User,
 | 
						|
                Club=Club,
 | 
						|
                Membership=Membership,
 | 
						|
                Note=Note,
 | 
						|
                NoteUser=NoteUser,
 | 
						|
                NoteClub=NoteClub,
 | 
						|
                NoteSpecial=NoteSpecial,
 | 
						|
                F=F,
 | 
						|
                Q=Q,
 | 
						|
                now=timezone.now(),
 | 
						|
                today=timezone.now().date(),
 | 
						|
            )
 | 
						|
            try:
 | 
						|
                instanced.update_query()
 | 
						|
                query = instanced.query
 | 
						|
                model = perm.model.model_class()
 | 
						|
                model.objects.filter(query).all()
 | 
						|
                # print("Good query for permission", perm)
 | 
						|
            except (FieldError, AttributeError, ValueError, TypeError):
 | 
						|
                print("Query error for permission", perm)
 | 
						|
                print("Query:", perm.query)
 | 
						|
                if instanced.query:
 | 
						|
                    print("Compiled query:", instanced.query)
 | 
						|
                raise
 |