Sandbox / client de test
L'API B2B expose deux endpoints non-versionnés permettant de provisionner un client MCM jetable pour vos tests d'intégration. Vous obtenez une ApiKey que vous pouvez utiliser comme n'importe quelle clé de production, puis vous supprimez le client à la fin de l'exécution.
Ces endpoints sont destinés aux tests automatisés et ne sont accessibles que sur les environnements de développement / staging exposant cet endpoint. Ils sont protégés par un secret partagé hors-bande (
x-test-key).
1. Endpoints
| Méthode | Chemin | Auth | Effet |
|---|---|---|---|
POST | /test | en-tête x-test-key: <secret> | Crée un nouveau client MCM, retourne sa ApiKey |
DELETE | /test/{apiKey} | en-tête x-test-key: <secret> | Supprime le client (tables associées tombent en cascade) |
Demandez le x-test-key à l'équipe MCM. Il n'est pas dans le SDK et ne doit pas être versionné.
2. Utilisation directe (HTTP)
Créer
curl -X POST https://mcm-dev.neosapiens.com/test \
-H "x-test-key: <secret-hors-bande>"
# → 200 OK
# { "apiKey": "f7a2…-e91c" }
Supprimer
curl -X DELETE "https://mcm-dev.neosapiens.com/test/f7a2…-e91c" \
-H "x-test-key: <secret-hors-bande>"
# → 200 OK
3. Utilisation depuis le SDK
Le client ITestClient est exposé par MCM.ApiProxy (mêmes conventions ErrorOr) :
public class IntegrationFixture : IAsyncLifetime
{
private string? _testApiKey;
private readonly ITestClient _testClient;
private readonly IServiceProvider _services;
public async Task InitializeAsync()
{
// 1. Créer le client jetable
_testClient.ApiKey = "<secret-x-test-key>"; // surcharge per-call
var created = await _testClient.CreateTestClient();
if (created.IsError) throw new InvalidOperationException(created.FirstError.Description);
_testApiKey = created.Value;
// 2. Reconfigurer les autres clients pour utiliser cette nouvelle clé
foreach (var client in _services.GetServices<IBaseClient>())
client.ApiKey = _testApiKey;
}
public async Task DisposeAsync()
{
if (_testApiKey is null) return;
_testClient.ApiKey = "<secret-x-test-key>";
await _testClient.DeleteTestClient(_testApiKey);
}
}
Si vous utilisez xUnit, branchez ce
IntegrationFixtureviaIClassFixture<>ouICollectionFixture<>.
4. Modèle xUnit complet
[CollectionDefinition("Mcm Sandbox")]
public class McmSandboxCollection : ICollectionFixture<IntegrationFixture> { }
[Collection("Mcm Sandbox")]
public class EmployeSyncTests
{
private readonly IntegrationFixture _fixture;
public EmployeSyncTests(IntegrationFixture fixture) => _fixture = fixture;
[Fact]
public async Task Sync_Creates_Employes()
{
var sync = _fixture.Resolve<ISyncClient>();
var result = await sync.Sync(
syndicatDtos: [/* … */],
employeDtos: [/* … */],
objetConsentementDtos: []);
result.IsError.Should().BeFalse();
result.Value.Employes.AddCount.Should().BeGreaterThan(0);
}
}
Pas besoin de nettoyer entre les tests — au démontage du fixture, DeleteTestClient retire toutes les données du client en cascade.
5. Bonnes pratiques
- Un client de test par exécution CI, pas un partagé. Les tests parallèles s'isolent ainsi sans interférence.
- Toujours nettoyer : un
DELETE /test/{apiKey}dansIAsyncLifetime.DisposeAsyncou dans un blocfinally. Sinon vous accumulez des clients orphelins en environnement de développement. - Ne réutilisez pas la clé d'un test précédent — les conditions initiales (employeurs, formulaires créés par défaut) varient au fil des migrations MCM.
- Pas d'usage en production : ces endpoints renvoient
401si lex-test-keyn'est pas connu. Sur production ils peuvent être désactivés au niveau du gateway. - Fournisseurs de courriel : par défaut, un client de test n'a aucun fournisseur configuré. Les tests d'envoi de courriel renverront
Courriel.ProvisionneurNonConfigure. Provisionnez viaICakemailClient(admin) ou créez un substitut de votre côté.
6. Limites connues
- Données initiales : un client de test démarre vide (aucun syndicat, aucun employeur, aucun formulaire). Vos tests doivent les créer.
- Webhooks : il n'est pas possible (à ce jour) de configurer une URL webhook depuis le SDK. Pour des tests E2E webhook, demandez à l'admin MCM de provisionner un client de test avec une URL ngrok stable, ou écoutez le bus interne via
IConsentementClient.GetConsentementsDepuispar interrogation périodique. - Formulaires : aucun formulaire n'est initialisé. Les tests
EnvoyerFormulairedoivent d'abord créer un formulaire — ce qui n'est pas exposé par le SDK. Simulez de votre côté. - Quotas : pas de limite serveur sur les clients de test, mais évitez d'en créer plus d'un par minute sur un même runner CI.
Voir aussi
- Configuration
- Authentification
- Dépannage / FAQ
MCM.ApiProxy.Cli— application CLI interactive, exemple complet d'usage du SDK