Pour lancer les tests, utilisez python manage.py test.
Une fois la série de test réalisée, vous saurez quels tests ont échoués
Les tests se trouvent dans les fichiers tests.py et correspondent aux classes héritant de rest_framework.test.APITestCase.
Pour généraliser les tests de l'API, une classe CRUDViewSetTestMixin a été créée.
Pour l'utiliser, faire hériter la classe de test de CRUDViewSetTestMixin et APITestCase (dans cet ordre), comme ceci :
class UserTypeViewSetTestCase(CRUDViewSetTestMixin, APITestCase):
model = UserType
permissions = get_permissions_from_compact({ ... })
def _get_object_attributes(self, user=None):
return { ... }3 attributs doivent être spécifiées :
model: le model correspondant à la viewpermissions: les permissions attendues (voir ici)
Pour chaque tests, nous avons 4 utilisateurs performant les requêtes :
admin: un administrateuruser: un premier utilisateur lambda, ce sera lui qui possèdera les objets si possibleother: un second utilisateur lambda, il tentera d'accèder aux objets deuserpublic: un utilisateur non connecté Chaque utilisateur représente un niveau de visibilité. Nous testons chaque action possible avec chaque niveau de visibilité afin de vérifier que nous avons bien le résultat attendu.
Les permissions sont de la forme suivante :
permissions = {
'<action>': { '<user>': <is_allowed>, ... },
...
}Avec :
<action>: l'action CRUD<user>: un des utilisateurs précédents<is_allowed>:Truesi l'utisateur peut effectuer l'action, sinonFalseLa permission de base estcore.tests.DEFAULT_CRUD_PERMISSIONS.
Comme ce format est assez lourd, le helper core.tests.get_permissions_from_compact permet l'utilisation d'un format compact de type :
permissions = get_permissions_from_compact({
'<action>': <compact>,
...
})<compact> est cette fois une chaîne de charactères, chaque lettre présente passe l'action de l'utisateur dont elle est l'initiale à True, à partir de DEFAULT_CRUD_PERMISSIONS.
Par exemple 'update': ".u.a" donne :
'update': { 'public': False, 'user': True, 'other': False, 'admin': True }Voici un exemple complet :
permissions = get_permissions_from_compact({
'list': "puoa", # Everyone can list
'retrieve': "puoa", # Everyone can retrieve
'create': "...a", # Only admin can create
'update': "...a", # Only admin can update
'delete': "...a", # Only admin can delete
})Cette classe possède 5 tests correspondant aux 5 actions possibles sur une view API CRUD :
test_list_viewtest_retrieve_viewtest_create_viewtest_update_viewtest_delete_viewLe reste des méthodes sont des helpers et peuvent être surchargés pour la plupart.