45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
from django.urls import reverse
|
|
from typing import Any
|
|
from unittest import mock
|
|
|
|
|
|
def disable_gestionnaire_permission(type):
|
|
"""
|
|
Utilise "mock" pour ignorer le gestionnaire de permissions dans la vue.
|
|
TODO trouver un mécanisme de mock plus précis
|
|
|
|
:param type: le type de la vue
|
|
:type type: class:`ModelViewSet` par exemple
|
|
|
|
:return: résultat du mock
|
|
:rtype: voir mock
|
|
"""
|
|
return mock.patch.object(type, 'permission_classes', [p for p in type.permission_classes if p.__name__ != 'GestionnairePermission'])
|
|
|
|
|
|
def api_url(basename: str, pk: Any = None) -> str:
|
|
"""
|
|
renvoie l'URL selon qu'on a besoin d'un ID ou non
|
|
nécessite l'utilisation de SimpleRouter ou DefaultRouter (voir urls.py)
|
|
|
|
:param basename: valeur de "basename"
|
|
:type basename: str
|
|
|
|
:param pk: valeur qui permet de savoir s'il s'agit d'une URL "list" ou "detail" (voir https://www.django-rest-framework.org/api-guide/routers/#simplerouter)
|
|
:type pk: Any
|
|
|
|
:return: URL
|
|
:rtype: str
|
|
"""
|
|
return reverse(f'{basename}-list') if pk is None else reverse(f'{basename}-detail', args=[pk])
|
|
|
|
|
|
class TestUtilsMixin:
|
|
"""
|
|
mixin à ajouter pour les tests
|
|
"""
|
|
|
|
def _api_url(self, pk: Any = None) -> str:
|
|
""" voir fonction "api_url", nécessite un champ "basename" pour remplir le paramètre """
|
|
return api_url(self.basename, pk)
|