# Sandbox e client di test

> L'associazione gemella con soci sintetici in ogni stato, i client di test e il reset.

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

Ogni associazione può avere una **sandbox**: un'associazione gemella con la stessa grafica, gli stessi tipi di
tessera e lo stesso statuto, popolata di soci sintetici. Ci sviluppi e provi senza toccare dati reali, e senza
bisogno di approvazioni.

Ogni sviluppatore invitato dalla piattaforma ne ha anche **una sua**, che non appartiene a nessuna associazione:
la crea, la apre, la rigenera e la elimina da *Impostazioni account › Sviluppatore*, e lì dentro registra i client di
test.

## Crearla

Dalla console **Sviluppatori**: pulsante *Crea sandbox*, oppure registra un client in ambiente **Test** — la
sandbox viene creata al bisogno. Chi la crea ne diventa direttore: dal selettore di associazione può entrarci e
usare il gestionale sui dati sintetici (approvare una richiesta, sospendere una tessera, …).

## I soci sintetici

Sei account, uno per stato, con e-mail `<stato>@<slug>-sandbox.sandbox.invalid` e **una password condivisa**,
mostrata una sola volta alla creazione e a ogni reset:

| E-mail | Stato | Cosa rappresenta |
|---|---|---|
| `attivo@…` | attiva | tessera valida, statuto accettato — `verdict: valid` |
| `in-attesa@…` | in attesa | richiesta non ancora approvata |
| `sospeso@…` | sospesa | |
| `revocato@…` | revocata | |
| `scaduto@…` | attiva ma scaduta | `verdict: expired` |
| `statuto-da-accettare@…` | attiva, statuto non accettato | `verdict: statuto_required` |

Accedono dalla normale pagina di login di Vimine, quindi puoi provare **Accedi con Vimine** dall'inizio
alla fine: click sul tuo sito → accesso come `attivo@…` → consenso → callback → API.

:::tip
Per provare la richiesta di tesseramento (`membership:request`) da parte di chi **non è ancora socio**, accedi
con un account che non abbia una tessera in quella sandbox, per esempio un tuo account personale: il consenso
ai permessi di iscrizione è ammesso anche ai non soci.
:::

## Le persone create dalle prove

Chi si iscrive dalla pagina di iscrizione della sandbox, e chi un client di test nomina con `/v1/signup` o
`/v1/enroll`, diventa una persona **sintetica** della sandbox: l'indirizzo scritto è sostituito da uno del suo
dominio (`api-…@<slug>-sandbox.sandbox.invalid`, sempre lo stesso per lo stesso indirizzo), che la pagina mostra a
fine iscrizione. Nessun account reale viene creato o toccato, e nessuna e-mail parte.

Questi account valgono **solo nella sandbox**: vi accedono con la password scelta, ma non possono iscriversi a
un'associazione reale, entrare in un'altra associazione né autorizzare un client che non sia un client di test
della loro sandbox (`sandbox_account`).

## I client di test

Un client in ambiente Test (`vms_test_…` per i riservati) è legato alla sandbox, compare nella console
dell'associazione reale, è **attivo subito** ed emette token con `mode: "test"`. Non può toccare l'associazione
reale. Le e-mail della sandbox non vengono inviate.

Per passare in produzione registra un secondo client in ambiente **Produzione** (con gli stessi redirect URI
`https`) e, quando viene attivato, cambia `clientId` nella tua configurazione: il codice resta identico.

## Reset

*Rigenera dati e credenziali* dalla console, oppure con un client di 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 — i soci ripartono da zero, nuova password
```

Il reset ricrea i sei soci sintetici (consensi e sessioni comprese) e cambia la loro password; le persone create
dalle prove vengono eliminate; i client e la sandbox restano. Questi endpoint vogliono il token di un client di test
riservato (`client_credentials`), non HTTP Basic; un client di produzione riceve `403`.

## Eliminarla

*Elimina sandbox* nella console **Sviluppatori** (il direttivo, o l'operatore della piattaforma) la cancella subito,
con i soci sintetici, le persone create dalle prove, i dati e i client di test, che smettono di funzionare. Puoi
crearne una nuova quando vuoi.
