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 deuser
public
: 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>
:True
si l'utisateur peut effectuer l'action, sinonFalse
La 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_view
test_retrieve_view
test_create_view
test_update_view
test_delete_view
Le reste des méthodes sont des helpers et peuvent être surchargés pour la plupart.