# Scénarios de test en espèces

Payez, faites expirer, refusez ou suspendez un code espèces de test, et voyez comment votre intégration réagit à chaque issue.

Un code espèces de test ne peut pas être payé chez un agent. À la place, vous décidez de ce qui lui
arrive, à l’un de ces trois endroits :

* **Simuler le paiement** et les autres boutons de la page du bon que voit votre client, en mode
  test ;
* la carte **Assistants de test** sur la page du paiement dans le tableau de bord, en mode test ;
* l’[API des assistants de test](https://pay-docs.adpromax.com/fr/sandbox/test-helpers), pour les tests automatisés : `pay`,
  `expire`, `refuse` et `suspend` sur la tentative du paiement.

L’issue atteint le paiement comme en production : par une vérification de statut sur le réseau
simulé, puis la machine à états, les événements et votre webhook. Après une action simulée, la
vérification a lieu tout de suite, si bien que le résultat arrive en quelques secondes.

## Les scénarios

- **Payé** (`pay`): Le paiement réussit : `payment_intent.succeeded`.

- **Payé d’un autre montant** (`pay` avec un `amount` différent): Rien n’est crédité : le paiement reste en `processing` avec un `review` (`amount_mismatch`), et vous recevez `review.opened`.

- **Expiré** (`expire`): La tentative finit `expired` ; le paiement revient à `requires_payment_method` avec `voucher_expired`.

- **Payé après expiration** (`expire`, puis `pay`): Rien n’est crédité : un `review` (`paid_after_end`) et `review.opened`.

- **Refusé par le réseau** (`refuse`): La tentative échoue avec `voucher_refused` ; le paiement revient à `requires_payment_method`.

- **Suspendu, puis payé** (`suspend`, puis `pay`): Le paiement attend pendant la suspension, puis réussit.

- **Moins de 100 MAD** (Un paiement en espèces de 50,00 MAD (`5000`)): Refusé avec `amount_too_small`, comme en production.

## Le montant à payer

Un bon donne deux montants : votre `amount`, et l’`amount_to_pay` que votre client remet, qui ajoute
un petit droit de timbre (en mode test, 0,25 MAD : `15000` devient `15025`). Votre client paie ce
droit ; il n’est pas pris sur votre `amount`. Affichez `amount_to_pay` tel que le bon le donne.

Pour essayer **Payé d’un autre montant**, passez un `amount` nettement différent de celui du
paiement, par exemple la moitié. Sans `amount`, `pay` paie le bon en entier.

## Ce que chaque scénario enseigne

* **Expiré** : la plupart des codes impayés finissent ainsi. Libérez la commande ou le stock, et
  laissez votre client obtenir un nouveau code.
* **Payé d’un autre montant** et **Payé après expiration** : de l’argent peut arriver sans
  correspondre au paiement. AdProMaxPay ne crédite rien de lui-même et une personne examine le cas ;
  votre code attend `succeeded`, qui peut ne jamais venir pour ce paiement.
* **Suspendu** : un code peut être en attente un moment sur le réseau. Votre code n’a rien à faire
  qu’attendre.

Les scénarios carte sont dans [Cartes de test](https://pay-docs.adpromax.com/fr/sandbox/test-cards). Ce qui change pour les espèces
en production est dans [Bac à sable et production : les différences](https://pay-docs.adpromax.com/fr/sandbox/differences).
