# Tests de ScoDoc

ScoDoc est basé sur Flask, se référer à la doc de Flask pour aller plus loin.

On travaille toujours en tant qu'utilisateur `scodoc`, dans le virtualenv:

    su scodoc # si nécessaire
    cd /opt/scodoc
    source venv/bin/activate

## Lancement interactif

    flask shell

Pour mémoire, un certains nombre de commandes en ligne facilitant la gestion de 
ScoDoc sont disponibles, afficher la liste avec

    flask --help

## Tests unitaires

On utilise `pytest`. Ainsi, la commande

    pytest tests/unit

lance l'ensemble des tests unitaires.

## Tests Selenium (web)

TODO (Aurélien, JMP) *ce projet est abandonné pour l'instant*.

## Portail pour tests

Un faux portail "apogée" pour inscrire de faux étudiants avec photos. Utile pour tester les fonctions d'inscription/synchronisation, et aussi pour peupler rapidement une base de donnée.

Le code se trouve dans `tools/fakeportal/`.

Le serveur écoute par défaut sur `tcp/8678`. Il faudra paramétrer l'URL du "portail" dans les préférences du ScoDoc à tester, qui est en général sur le même hôte, donc `http://localhost:8678`.

Lancement:

    /opt/scodoc/tools/fakeportal/fakeportal.py 

## Tests de l'API ScoDoc9

L'API est [documentée ici](ScoDoc9API.md).
Des tests sont disponibles sous `scodoc/tests/api`. Le mécanisme de test est un
peu différent de celui des tests unitaire: on test un *client* de l'API. Il faut
donc un serveur, tournant sur la même machine ou sur une machine distante. Ce
serveur doit avoir été configuré avec des données de test.

### Configuration du serveur pour tester l'API

 1. modifier /opt/scodoc/.env pour indiquer 
```
    FLASK_ENV=test_api
    FLASK_DEBUG=1 
```
 2. En tant qu'utilisateur scodoc, lancer:
```
    tools/create_database.sh --drop SCODOC_TEST_API
    flask db upgrade
    flask sco-db-init --erase
    flask init-test-database
```

Ces commandes vont effacer la base `SCODOC_TEST_API` si elle existe, la
recréer, mettre à jour le schéma pour la dernière version de ScoDoc installée,
l'initialiser et la peupler de données fictives pour les tests.

 3. Relancer ScoDoc:
```
    flask run --host 0.0.0.0
```

### Configuration du client de test API
 1. Copier le fichier `scodoc/tests/api/dotenv_exemple` dans
    `scodoc/tests/api/.env`, et éditer ce fichier `.env`pour y configurer votre
    *client* de test (ne pas confondre avec `scodoc/.env` qui est la config de
    votre serveur). 
    Normalement, il est suffisant d'indiquer l'URL de votre serveur. Si le
    client de test est sur la même machine que le serveur ScoDoc, c'est simplement:
    ```
    SCODOC_URL = "http://localhost:5000/"
    ```

### Lancement des tests de l'API

Le serveur scodoc étant lancé comme expliqué ci-dessus, on utilise `pytest`sur
le client (qui peut être un autre shell de la même machine, bien sûr).

```
cd /opt/scodoc/
pytest tests/api/test_api_xxx.py # remplacer xxx par votre test
```

Rappelons quelques options utiles de `pytest`: `-x` permet de s'arrêter sur la
première erreur, et `--pdb` lance directement le débuggueur sur l'erreur.
Ainsi, 
```
pytest --pdb -x tests/api/test_api_departements.py 
```
lancera un test en mode "interactif", utile pour les mises au point.