# Sandbox et clients de test

> L’association jumelle avec des membres synthétiques dans tous les états, les clients de test et la réinitialisation.

URL: https://developers.vimine.network/fr/guides/sandbox/

Chaque association peut avoir une **sandbox** : une association jumelle avec la même identité visuelle, les mêmes types
d’adhésion et le même statuto, peuplée de membres synthétiques. Vous y développez et testez sans toucher aux données
réelles, et sans avoir besoin d’aucune approbation.

Chaque développeur invité par la plateforme en a aussi **une à lui**, qui n'appartient à aucune association : il la
crée, l'ouvre, la régénère et la supprime depuis *Paramètres du compte › Développeur*, et y enregistre ses clients de
test.

## La créer

Depuis la console **Développeurs** : le bouton *Créer la sandbox*, ou enregistrez un client dans l’environnement
**Test** — la sandbox est créée à la demande. La personne qui la crée en devient dirigeante : depuis le sélecteur
d’association, elle peut y entrer et utiliser le back-office sur les données synthétiques (approuver une demande,
suspendre une carte, …).

## Les membres synthétiques

Six comptes, un par état, avec l’e-mail `<state>@<slug>-sandbox.sandbox.invalid` et **un mot de passe commun**,
affiché une fois à la création et à chaque réinitialisation :

| E-mail | État | Ce qu’il représente |
|---|---|---|
| `attivo@…` | actif | carte valable, statuto accepté — `verdict: valid` |
| `in-attesa@…` | en attente | demande pas encore approuvée |
| `sospeso@…` | suspendu | |
| `revocato@…` | révoqué | |
| `scaduto@…` | actif mais expiré | `verdict: expired` |
| `statuto-da-accettare@…` | actif, statuto non accepté | `verdict: statuto_required` |

Ils se connectent depuis la page de connexion habituelle de Vimine, vous pouvez donc essayer **Se connecter avec
Vimine** de bout en bout : clic sur votre site → connexion en tant que `attivo@…` → consentement → callback → API.

:::tip
Pour essayer la demande d’adhésion (`membership:request`) par quelqu’un qui **n’est pas encore membre**, connectez-vous
avec un compte qui n’a pas de carte dans cette sandbox, par exemple un compte personnel à vous : le consentement aux
autorisations d’adhésion est permis aussi aux non-membres.
:::

## Les personnes créées par vos tests

Quiconque adhère depuis la page d'adhésion de la sandbox, et quiconque un client de test nomme avec `/v1/signup` ou
`/v1/enroll`, devient une personne **synthétique** de la sandbox : l'adresse saisie est remplacée par une adresse de
son domaine (`api-…@<slug>-sandbox.sandbox.invalid`, toujours la même pour la même adresse), que la page affiche à la
fin de l'adhésion. Aucun vrai compte n'est créé ni touché, et aucun e-mail ne part.

Ces comptes ne valent **que dans la sandbox** : ils s'y connectent avec le mot de passe choisi, mais ne peuvent ni
adhérer à une vraie association, ni entrer dans une autre, ni autoriser un client autre qu'un client de test de leur
sandbox (`sandbox_account`).

## Clients de test

Un client de l’environnement Test (`vms_test_…` pour les confidentiels) est lié à la sandbox, apparaît dans la console
de l’association réelle, est **actif immédiatement** et émet des jetons avec `mode: "test"`. Il ne peut pas toucher à
l’association réelle. Les e-mails de la sandbox ne sont pas envoyés.

Pour passer en production, enregistrez un second client dans l’environnement **Production** (avec les mêmes redirect
URI `https`) et, une fois qu’il est activé, changez `clientId` dans votre configuration : le code reste le même.

## Réinitialisation

*Régénérer les données et les identifiants* depuis la console, ou avec un client de test :

```js title="Node"
import { VimineServer } from '@vimine/sdk/server';

const vimineServer = new VimineServer({ clientId: 'vmc_…', clientSecret: 'vms_test_…' });
await vimineServer.sandbox.members();                      // GET  /v1/sandbox
const { password } = await vimineServer.sandbox.reset();   // POST /v1/sandbox/reset — les membres repartent de zéro, nouveau mot de passe
```

La réinitialisation recrée les six membres synthétiques (consentements et sessions compris) et change leur mot de
passe ; les personnes créées par vos tests sont supprimées ; les clients et la sandbox restent. Ces endpoints veulent
le jeton d'un client de test confidentiel (`client_credentials`), pas HTTP Basic ; un client de production reçoit
`403`.

## La supprimer

*Supprimer la sandbox* dans la console **Développeurs** (le conseil, ou l'opérateur de la plateforme) la supprime
immédiatement, avec ses membres synthétiques, les personnes créées par vos tests, les données et les clients de test,
qui cessent de fonctionner. Vous pouvez en créer une nouvelle quand vous voulez.
