Skip to content

Commit 1436f28

Browse files
feat(api): add mockoon configuration
1 parent b5959e1 commit 1436f28

10 files changed

Lines changed: 1524 additions & 0 deletions

api/mockoon/README.md

Lines changed: 292 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,292 @@
1+
# Mockoon API publique partenaires
2+
3+
Ce dossier contient un mock local de l'API publique API Engagement destiné aux partenaires qui font leur recette dans un environnement deconnecte d'internet.
4+
5+
Le mock couvre uniquement les endpoints nécessaires aux tests d'intégration partenaires :
6+
7+
- `GET /v0/mission`
8+
- `GET /v0/mission/search`
9+
- `GET /v0/mission/:id`
10+
- `POST /v2/mission`
11+
- `PUT /v2/mission/:clientId`
12+
- `DELETE /v2/mission/:clientId`
13+
14+
## Objectif et limites
15+
16+
L'objectif est de fournir une API locale stable pour valider les formats de requete et de reponse, les codes HTTP principaux et quelques scenarios d'erreur.
17+
18+
Ce mock ne remplace pas l'API reelle :
19+
20+
- pas de base de donnees ;
21+
- pas de persistance entre les appels ;
22+
- pas de filtrage complet sur `GET /v0/mission` ;
23+
- pas de moderation automatique exhaustive ;
24+
- pas de coherence entre les routes v2 et v0.
25+
26+
La separation entre `/v0/mission` et `/v2/mission` est volontaire :
27+
28+
- `/v2/mission` simule les missions que le partenaire annonceur souhaite envoyer a l'API Engagement ;
29+
- `/v0/mission` expose un jeu fixe de missions exemples que le partenaire diffuseur peut ingerer ;
30+
- une mission creee en v2 n'apparaitra pas dans les resultats v0.
31+
32+
## Structure du dossier
33+
34+
```text
35+
api/mockoon/
36+
├── api-engagement-mockoon.json # Environnement Mockoon versionne
37+
├── docker-compose.mock.yml # Lancement local ou partenaire
38+
├── smoke-test.sh # Verifications rapides avec curl
39+
├── fixtures/
40+
│ ├── v0-missions.json # Donnees v0 lisibles
41+
│ ├── v0-mission-list-response.json
42+
│ ├── v0-mission-search-response.json
43+
│ └── v0-mission-paris-001-response.json
44+
└── examples/
45+
├── v2-create-mission.json
46+
└── v2-update-mission.json
47+
```
48+
49+
## Prerequis
50+
51+
Pour l'equipe API Engagement :
52+
53+
- Docker ;
54+
- Docker Compose ;
55+
- acces internet au moment de recuperer l'image `mockoon/cli:9.6.1`, sauf si elle est deja disponible localement.
56+
57+
Pour le partenaire en environnement deconnecte :
58+
59+
- Docker ;
60+
- Docker Compose ;
61+
- une archive livree par l'equipe API Engagement contenant l'image Docker exportee et ce dossier `mockoon`.
62+
63+
Aucune installation Node.js ou npm n'est requise cote partenaire.
64+
65+
## Lancement local
66+
67+
Depuis ce dossier :
68+
69+
```bash
70+
cd api/mockoon
71+
docker compose -f docker-compose.mock.yml up
72+
```
73+
74+
Le mock ecoute sur :
75+
76+
```text
77+
http://localhost:3002
78+
```
79+
80+
La cle API n'est pas verifiee fonctionnellement, mais un header d'authentification doit etre present pour simuler l'API reelle :
81+
82+
```text
83+
x-api-key: mock-api-key
84+
```
85+
86+
ou :
87+
88+
```text
89+
Authorization: Bearer mock-api-key
90+
```
91+
92+
## Exemples curl
93+
94+
Lister les missions v0 :
95+
96+
```bash
97+
curl -sS http://localhost:3002/v0/mission \
98+
-H "x-api-key: mock-api-key"
99+
```
100+
101+
Rechercher les missions v0 avec facettes :
102+
103+
```bash
104+
curl -sS http://localhost:3002/v0/mission/search \
105+
-H "x-api-key: mock-api-key"
106+
```
107+
108+
Recuperer une mission v0 connue :
109+
110+
```bash
111+
curl -sS http://localhost:3002/v0/mission/mission-paris-001 \
112+
-H "x-api-key: mock-api-key"
113+
```
114+
115+
Creer une mission v2 :
116+
117+
```bash
118+
curl -sS -X POST http://localhost:3002/v2/mission \
119+
-H "x-api-key: mock-api-key" \
120+
-H "Content-Type: application/json" \
121+
--data-binary @examples/v2-create-mission.json
122+
```
123+
124+
Modifier une mission v2 :
125+
126+
```bash
127+
curl -sS -X PUT http://localhost:3002/v2/mission/partner-mission-001 \
128+
-H "x-api-key: mock-api-key" \
129+
-H "Content-Type: application/json" \
130+
--data-binary @examples/v2-update-mission.json
131+
```
132+
133+
Supprimer une mission v2 :
134+
135+
```bash
136+
curl -sS -X DELETE http://localhost:3002/v2/mission/partner-mission-001 \
137+
-H "x-api-key: mock-api-key"
138+
```
139+
140+
## Scenarios d'erreur disponibles
141+
142+
Authentification absente :
143+
144+
```bash
145+
curl -i http://localhost:3002/v0/mission
146+
```
147+
148+
Reponse attendue : `401`, avec `{ "ok": false, "code": "UNAUTHORIZED" }`.
149+
150+
Mission v0 inconnue :
151+
152+
```bash
153+
curl -i http://localhost:3002/v0/mission/unknown-id \
154+
-H "x-api-key: mock-api-key"
155+
```
156+
157+
Reponse attendue : `404`, avec `{ "ok": false, "code": "NOT_FOUND" }`.
158+
159+
Payload v2 invalide sur creation :
160+
161+
```bash
162+
curl -i -X POST http://localhost:3002/v2/mission \
163+
-H "x-api-key: mock-api-key" \
164+
-H "Content-Type: application/json" \
165+
--data '{}'
166+
```
167+
168+
Reponse attendue : `400`, avec `{ "ok": false, "code": "INVALID_BODY" }`.
169+
170+
Doublon v2 reserve :
171+
172+
```bash
173+
curl -i -X POST http://localhost:3002/v2/mission \
174+
-H "x-api-key: mock-api-key" \
175+
-H "Content-Type: application/json" \
176+
--data '{"clientId":"duplicate-client-id","title":"Mission en doublon"}'
177+
```
178+
179+
Reponse attendue : `409`, avec `{ "ok": false, "code": "RESSOURCE_ALREADY_EXIST" }`.
180+
181+
Mission v2 inconnue documentee :
182+
183+
```bash
184+
curl -i -X PUT http://localhost:3002/v2/mission/unknown-client-id \
185+
-H "x-api-key: mock-api-key" \
186+
-H "Content-Type: application/json" \
187+
--data '{"title":"Titre"}'
188+
```
189+
190+
Reponse attendue : `404`, avec `{ "ok": false, "code": "NOT_FOUND" }`.
191+
192+
Erreur forcee sur update v2 :
193+
194+
```bash
195+
curl -i -X PUT http://localhost:3002/v2/mission/partner-mission-001 \
196+
-H "x-api-key: mock-api-key" \
197+
-H "Content-Type: application/json" \
198+
--data '{"forceError":"INVALID_BODY"}'
199+
```
200+
201+
Reponse attendue : `400`, avec `{ "ok": false, "code": "INVALID_BODY" }`.
202+
203+
## Smoke test
204+
205+
Une fois le mock lance :
206+
207+
```bash
208+
cd api/mockoon
209+
./smoke-test.sh
210+
```
211+
212+
Il est possible de cibler une autre URL :
213+
214+
```bash
215+
BASE_URL=http://localhost:3002 ./smoke-test.sh
216+
```
217+
218+
Le script verifie les endpoints principaux et echoue des qu'un code HTTP ou un fragment de reponse attendu est absent.
219+
220+
## Process de livraison offline
221+
222+
Ces commandes sont a executer par l'equipe API Engagement sur une machine qui dispose d'internet et de Docker.
223+
224+
1. Recuperer l'image Mockoon CLI pinnee :
225+
226+
```bash
227+
docker pull mockoon/cli:9.6.1
228+
```
229+
230+
2. Exporter l'image Docker :
231+
232+
```bash
233+
docker save mockoon/cli:9.6.1 -o mockoon-cli-9.6.1.tar
234+
```
235+
236+
3. Preparer une archive partenaire depuis la racine du depot :
237+
238+
```bash
239+
tar -czf api-engagement-mockoon-partenaire.tar.gz \
240+
-C api mockoon \
241+
-C .. mockoon-cli-9.6.1.tar
242+
```
243+
244+
Si la commande `tar` ci-dessus n'est pas adaptee a votre repertoire courant, l'archive doit simplement contenir :
245+
246+
- `mockoon-cli-9.6.1.tar` ;
247+
- `mockoon/api-engagement-mockoon.json` ;
248+
- `mockoon/docker-compose.mock.yml` ;
249+
- `mockoon/fixtures/` ;
250+
- `mockoon/examples/` ;
251+
- `mockoon/smoke-test.sh` ;
252+
- `mockoon/README.md`.
253+
254+
4. Transmettre `api-engagement-mockoon-partenaire.tar.gz` au partenaire via le canal convenu.
255+
256+
5. Cote partenaire, extraire l'archive :
257+
258+
```bash
259+
tar -xzf api-engagement-mockoon-partenaire.tar.gz
260+
```
261+
262+
6. Charger l'image Docker :
263+
264+
```bash
265+
docker load -i mockoon-cli-9.6.1.tar
266+
```
267+
268+
7. Lancer le mock :
269+
270+
```bash
271+
cd mockoon
272+
docker compose -f docker-compose.mock.yml up
273+
```
274+
275+
8. Dans un autre terminal, executer les smoke tests :
276+
277+
```bash
278+
./smoke-test.sh
279+
```
280+
281+
## Mise a jour des fixtures
282+
283+
Pour faire evoluer le jeu de missions expose en v0 :
284+
285+
1. modifier `fixtures/v0-missions.json` pour garder une version lisible du dataset ;
286+
2. reporter les changements dans les fichiers de reponse servis par Mockoon :
287+
- `fixtures/v0-mission-list-response.json` ;
288+
- `fixtures/v0-mission-search-response.json` ;
289+
- `fixtures/v0-mission-paris-001-response.json` si la mission de detail change ;
290+
3. lancer le mock et `./smoke-test.sh`.
291+
292+
Les reponses doivent rester alignees avec `api/docs/openapi.yaml` pour les enveloppes principales.

0 commit comments

Comments
 (0)