Sélectionner une page

How‑to : Tests, sécurité, rollback et documentation

Nous finalisons l’ALM avec des tests couvrants, la sécurité appliquée partout, un plan de retour et une documentation durable.

Tests unitaires C# (xUnit) — exemple

Le test vérifie un calcul sans dépendances externes.

using Xunit;

public class MarginTests
{
    [Theory]
    [InlineData(1000, 800, 0.2)]
    [InlineData(0, 0, 0)]
    public void Computes_MarginRate(decimal revenue, decimal cost, decimal expected)
    {
        var margin = revenue - cost;
        var rate = revenue == 0 ? 0 : margin / revenue;
        Assert.Equal(expected, rate);
    }
}

Test d’intégration API (PowerShell)

Un test simple valide la route et le schéma.

param([string]$EnvUrl, [string]$Token)
$body = @{ opportunityid = [guid]::Empty; applydiscount = $false } | ConvertTo-Json
$r = Invoke-RestMethod -Uri "$EnvUrl/api/data/v9.2/mar_custom_CalculateOpportunityMargin" -Method Post -Headers @{ Authorization = "Bearer $Token"; 'Content-Type' = 'application/json' } -Body $body
if ($null -eq $r.marginamount -or $null -eq $r.marginrate) { throw 'Contract mismatch' }

Sécurité : DLP, RBAC, secrets

Les contrôles s’appliquent tout au long du cycle.

  • DLP : bloquer connecteurs non approuvés.
  • RBAC Dataverse : rôle d’exécution pour l’API uniquement.
  • Secrets : Key Vault et Variable Groups, aucune valeur en clair.

Rollback contrôlé

Nous définissons un retour rapide et documenté.

  • Conserver N‑1 de la solution managed.
  • Script de retour :

pac solution import --path artifacts/Marlk_SalesCore_N-1.zip --publish-changes true --force-overwrite true
  • Si le schéma change, fournir scripts data fix.

Documentation : modèle README solution

Chaque solution embarque une documentation standardisée.

# Marlk_SalesCore

## Objectif
Expose des Custom APIs pour le domaine Sales.

## Contrats API
- mar_custom_CalculateOpportunityMargin(opportunityid: guid, applydiscount: bool) -> { marginamount: money, marginrate: decimal }

## Sécurité
- Rôle: Marlk.CustomApi.Executor

## Déploiement
- Pipelines: build.yml, release.yml
- Variables: pp-customapi-<env>

## Observabilité
- App Insights: resourceName, workspace