You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Le projet utilise des fixtures Django[^1] pour les tests.
4
+
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_.
5
+
6
+
## Générer des fixtures, cas général
7
+
8
+
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` :
9
+
10
+
```sh
11
+
make generate-fixtures
12
+
13
+
# il est conseillé de conserver dans git les fixtures à jour, et d'embarquer
14
+
# ces mises à jour dans les pull request.
15
+
git add qfdmo/fixtures qfdmd/fixtures
16
+
git commit -m "mise à jour des fixtures"
17
+
```
18
+
19
+
## Générer des fixtures pour les acteurs et propositions de service
20
+
21
+
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.
22
+
23
+
Pour ce faire, sont listées dans le `Makefile` une liste de `pk` d'acteurs (champ `identifiant_unique`).
24
+
Ces identifiants ont été récupérés à la main, depuis le frontend de la carte :
25
+
1. Faire une recherche pour la zone souhaitée
26
+
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
27
+
3. Chercher cet id dans l'admin Django : https://lvao.ademe.fr/admin/qfdmo/displayedacteur/?q=eYKxBYDMDoMXTr8iiw69Ek
28
+
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`
29
+
5. Ajouter cet identifiant dans le `Makefile` à la suite des autres, derrière le flag `--pk` dans la commande `generate-fixtures-acteurs`
30
+
31
+
6. Une fois cela fait, il faut récupérer les _primary key_ des propositions de service associées.
32
+
Cela peut-être fait depuis le shell `django` :
33
+
```sh
34
+
make shell
35
+
```
36
+
```py
37
+
# 1. importer le modèle Django
38
+
from qfdmo.models import DisplayedActeur
39
+
40
+
# 2. Stocker les pks dans une variable. Les pks peuvent être copiées-collées depuis le Makefile
7. Cette liste de `pk` peut alors être collées dans le `Makefile`
49
+
8. Les fixtures peuvent être re-générées
50
+
```sh
51
+
make generate-fixtures-acteurs
52
+
53
+
# il est conseillé de conserver dans git les fixtures à jour, et d'embarquer
54
+
# ces mises à jour dans les pull request.
55
+
git add qfdmo/fixtures
56
+
git commit -m "mise à jour des fixtures"
57
+
```
58
+
59
+
## Utiliser les fixtures
60
+
61
+
Les fixtures peuvent être utilisées de plusieurs manières :
62
+
- Dans les tests
63
+
- En local
64
+
- Dans la CI
65
+
66
+
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_.
67
+
Pour ce faire :
68
+
69
+
```sh
70
+
# ⚠️ Cette commande va supprimer les données locales, elle est donc à executer en conscience
71
+
make db-restore-for-tests
72
+
```
73
+
74
+
Dans les tests, les fixtures peuvent être importées en utilisant la fonction `callcommand` de Django :
75
+
```py
76
+
from django.core.management import call_command
77
+
call_command('loaddata', 'synonymes', 'produits')
78
+
```
79
+
80
+
Le nom des fixtures à utiliser est celui du nom du fichier `.json` de la fixture.
81
+
Django se charge de découvrir automatiquement la fixture correspondante.
0 commit comments