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 :

  1. Faire une recherche pour la zone souhaitée

  2. 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

  3. Chercher cet id dans l’admin Django : https://lvao.ademe.fr/admin/qfdmo/displayedacteur/?q=eYKxBYDMDoMXTr8iiw69Ek

  4. 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 exemple ocad3e_SGS-02069

  5. Ajouter cet identifiant dans le Makefile Ă  la suite des autres, derriĂšre le flag --pk dans la commande generate-fixtures-acteurs

  6. 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]
  1. Cette liste de pk peut alors ĂȘtre collĂ©es dans le Makefile

  2. 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.