Utiliser les fixtures¶
Le projet utilise des fixtures Django[1] pour les tests. Celles-ci sont basĂ©es sur de la donnĂ©e issue de la base de production afin de tester lâapplication sur des situations de la vraie vie.
Générer des fixtures, cas général¶
Toutes les fixtures Ă lâexception des DisplayedActeur
(acteurs affichés) et DisplayedPropositionService
(proposition de service de ces acteurs) peuvent ĂȘtre gĂ©nĂ©rĂ©es Ă partir dâune commande make
:
make generate-fixtures
# il est conseillé de conserver dans git les fixtures à jour, et d'embarquer
# ces mises Ă jour dans les pull request.
git add qfdmo/fixtures qfdmd/fixtures
git commit -m "mise Ă jour des fixtures"
Générer des fixtures pour les acteurs et propositions de service¶
Le volume de donnĂ©es de la table des Acteurs Ă©tant gigantesque, les fixtures de cette table sont gĂ©nĂ©rĂ©es manuellement, lorsque le modĂšle de donnĂ©es Ă©volue et empĂȘche leur installation ou lorsquâil est nĂ©cessaire dâajouter des donnĂ©es de test pour couvrir plus exhaustivement le contexte dâutilisation rĂ©el de lâapplication.
Pour ce faire, sont listées dans le Makefile
une liste de pk
dâacteurs (champ identifiant_unique
).
Ces identifiants ont été récupérés à la main, depuis le frontend de la carte :
Faire une recherche pour la zone souhaitée
RĂ©cupĂ©rer le lien de lâacteur dans la fiche dĂ©taillĂ©e (en cliquant sur le lien de partage par exemple) â> https://lvao.ademe.fr/adresse_details/3kQK86DEWA3ZrcirdzzBez lâid est 3kQK86DEWA3ZrcirdzzBez
Chercher cet id dans lâadmin Django : https://lvao.ademe.fr/admin/qfdmo/displayedacteur/?q=eYKxBYDMDoMXTr8iiw69Ek
Récupérer le champ
identifiant_unique
: il peut ĂȘtre un uuid ou un assemblage de chaĂźnes de caractĂšres mentionnant la source, par exempleocad3e_SGS-02069
Ajouter cet identifiant dans le
Makefile
Ă la suite des autres, derriĂšre le flag--pk
dans la commandegenerate-fixtures-acteurs
Une fois cela fait, il faut rĂ©cupĂ©rer les primary key des propositions de service associĂ©es. Cela peut-ĂȘtre fait depuis le shell
django
:
make shell
# 1. importer le modĂšle Django
from qfdmo.models import DisplayedActeur
# 2. Stocker les pks dans une variable. Les pks peuvent ĂȘtre copiĂ©es-collĂ©es depuis le Makefile
pks = ["uuid-dun-acteur", "identifiant-dun-autre-acteur"]
# 3. Filtrer les acteurs par pks et en récupérer les pks de propositions de services associées
list(DisplayedActeur.objects.filter(pk__in=pks).values_list("proposition_services__pk", flat=True))
# Sortie attendue: [2163243, 2163244, 2163245, 243160, 435885, 1699381, 738371, 738372, 719100]
Cette liste de
pk
peut alors ĂȘtre collĂ©es dans leMakefile
Les fixtures peuvent ĂȘtre re-gĂ©nĂ©rĂ©es
make generate-fixtures-acteurs
# il est conseillé de conserver dans git les fixtures à jour, et d'embarquer
# ces mises Ă jour dans les pull request.
git add qfdmo/fixtures
git commit -m "mise Ă jour des fixtures"
Utiliser les fixtures¶
Les fixtures peuvent ĂȘtre utilisĂ©es de plusieurs maniĂšres :
Dans les tests
En local
Dans la CI
En local, on utilise gĂ©nĂ©ralement une base de production mais il peut ĂȘtre intĂ©ressant dâinstaller les fixtures afin dâavoir un environnement iso-CI. Pour ce faire :
# â ïž Cette commande va supprimer les donnĂ©es locales, elle est donc Ă executer en conscience
make db-restore-for-tests
Dans les tests, les fixtures peuvent ĂȘtre importĂ©es en utilisant la fonction callcommand
de Django :
from django.core.management import call_command
call_command('loaddata', 'synonymes', 'produits')
Le nom des fixtures Ă utiliser est celui du nom du fichier .json
de la fixture.
Django se charge de découvrir automatiquement la fixture correspondante.