# 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*: ```bash su scodoc # si nécessaire cd /opt/scodoc source venv/bin/activate ``` ## Lancement interactif ```bash flask shell ``` Pour mémoire, un certains nombre de commandes en ligne facilitant la gestion de ScoDoc sont disponibles, afficher la liste avec ```bash flask --help ``` ## Tests unitaires On utilise `pytest`. Ainsi, la commande ```bash pytest tests/unit ``` lance l'ensemble des tests unitaires. Ces tests sont lancés automatiquement avant la création du paquet Debian (release). Rappelons quelques options utiles de `pytest`: `-x` permet de s'arrêter sur la première erreur, et `--pdb` lance directement le debugger sur l'erreur. Ainsi, ```bash pytest --pdb -x tests/api/test_api_departements.py ``` lancera un test en mode "interactif", utile pour les mises au point. Et pour lancer un seul test: ```bash pytest -x --pdb tests/unit/test_but_cursus.py::test_refcomp_niveaux_info ``` ### Création de la base de données pour les tests unitaires ```bash ./tools/create_database.sh SCODOC_TEST export FLASK_ENV=test flask db upgrade ``` ## Tests Selenium (web) *Ce projet est abandonné pour l'instant* (Aurélien, JMP). ## 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: ```bash /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. ### TL;DR Si votre installation de développement est bien configurée, il suffit de lancer ```bash tools/test_api.sh ``` ### Configuration du serveur pour tester l'API 1. modifier `/opt/scodoc/.env` pour indiquer ```bash FLASK_ENV=test_api FLASK_DEBUG=1 ``` 1. En tant qu'utilisateur scodoc, lancer: ```bash 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. 1. Relancer ScoDoc: ```bash flask run --host 0.0.0.0 --debug ``` Le script `tests/api/start_api_server.sh -p 5555` fait tout cela pour vous ! ### 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: ```bash 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). ```bash cd /opt/scodoc/ pytest tests/api/test_api_xxx.py # remplacer xxx par votre test ```