---
# System prepended metadata

title: Tests unitaires models/routes (LoopbackModelTester)

---

Tests unitaires models/routes (LoopbackModelTester)
==

Documentation de tests unitaires en générale: ![Unit test](./unit-test.md)

Nommage 
==

En règle générale le nom du test doit comporter la déscription de **l'unité** de travail ensuite le pattern 'should' (résultat attendu) et optionnelement, 'when' qui décrit un scénario/context.

**Pattern à suivre sur loopbackModelTester**
```
[Model] route: functionnal name (expect results) when context
```

## Détail
| Composant | Description |
| -------- | -------- |
| Model     | Nom du model  |
| route| Nom de la route (items, getCurrentUser, login ...) |
| functionnal name | Description d'un point de vue fonctionnel, le résultat attendu mais pour **l'utilisateur de l'API** |
|expect results| Résultats en terme technique, ce qui prouve que le test passe |
|context | Paramètres, environnement, contraintes nécessaires pour effectuer ce test|


## Exemples
```
[User] login: admin authenticated with success (http status should be 200)
[Zindic] getGraphData: absence of color (couleur should be equal GRIS) when date is invalid
[Item] items: items has comments (items should have comments array)
```

## Patterns de 'expect results'
Exemples :+1: 

- should be (type string, array ...)
- should be equal (égalité pour une propriété d'objet)
- shoud have/property

Types de test sur les routes
==

3 types de tests sur les réponses des routes:

- Etats des réponses
- Structure de données
- Valeur de données

## Etats des réponses 
Vérification de: 
- Accès, authorisations aux ressources
- Erreurs client/serveur 

Exemple:
```=
[User] login: admin authenticated with success (http status should be equal 200)
```
```json=
 "expect": {
    "statusCode": 401
  }
```

On test l'authentification et donc une réponse http de 200

## Structure de données
Vérification de: 
- Présence/absence d'une propriété dans le body de la réponse
- Type d'une propriété [X] (array, object, number ...)

Exemple:
```=
[Item] items: items has comments (items should have comments array)
```
```json=
"expect": {
   "properties": {
      "response[0].comments": {
        "type": "array"
      }
   }
}
```
## Valeur de données
Vérification de:
- Valeur d'une propriété

Exemple:
```=
[Zindic] getGraphData: absence of color (couleur should be equal GRIS) when date is invalid
```
```json=
"expect": {
  "properties": {
    "couleur": {
      "value": "GRIS"
    }
  }
}
```