Aller au contenu principal

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éthodeCheminAuthEffet
POST/testen-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 IntegrationFixture via IClassFixture<> ou ICollectionFixture<>.


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} dans IAsyncLifetime.DisposeAsync ou dans un bloc finally. 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 401 si le x-test-key n'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 via ICakemailClient (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.GetConsentementsDepuis par interrogation périodique.
  • Formulaires : aucun formulaire n'est initialisé. Les tests EnvoyerFormulaire doivent 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