# Smoke Test v0.701 — Retry Transfers, Admin Dashboard & Deep Health **Objectif** : Valider toutes les fonctionnalités v0.701 et vérifier l'absence de régressions. --- ## Prérequis - [ ] Backend Go compile sans erreur (`go build ./...`) - [ ] Frontend build OK (`npm run build` dans `apps/web`) - [ ] Base de données migrée (migration 116 appliquée) - [ ] Variables d'environnement configurées : `TRANSFER_RETRY_ENABLED`, `TRANSFER_RETRY_MAX`, `TRANSFER_RETRY_INTERVAL_MIN` --- ## 1. Transfer Retry Worker (Lot R1) ### 1.1 Retry automatique - [ ] Créer un SellerTransfer avec status `failed` en DB - [ ] Démarrer le backend avec `TRANSFER_RETRY_ENABLED=true` - [ ] Le worker retente le transfert dans le délai configuré - [ ] En cas de succès : status passe à `completed`, retry_count incrémenté - [ ] En cas d'échec : retry_count incrémenté, next_retry_at calculé (backoff exponentiel) ### 1.2 Max retries - [ ] Un transfert avec retry_count >= max_retries n'est plus retenté - [ ] Status passe à `permanently_failed` ### 1.3 Backoff exponentiel - [ ] Délai entre retries augmente : base * 2^retry_count - [ ] next_retry_at est correctement calculé et stocké ### 1.4 Prometheus metrics - [ ] `veza_transfer_retry_total` est incrémenté à chaque tentative - [ ] `veza_transfer_retry_success` est incrémenté en cas de succès - [ ] `veza_transfer_retry_failures` est incrémenté en cas d'échec --- ## 2. Admin Transfers Dashboard (Lot A1) ### 2.1 Backend - [ ] `GET /admin/transfers` retourne la liste paginée (200) - [ ] Filtre par status fonctionne (`?status=failed`) - [ ] Filtre par seller_id fonctionne (`?seller_id=uuid`) - [ ] Filtre par date range fonctionne (`?from=...&to=...`) - [ ] Pagination fonctionne (`?limit=10&offset=0`) - [ ] Non-admin reçoit 403 ### 2.2 Retry manuel - [ ] `POST /admin/transfers/:id/retry` retry un transfert failed (200) - [ ] Transfer non-failed retourne erreur appropriée (400) - [ ] Transfer inexistant retourne 404 - [ ] Non-admin reçoit 403 ### 2.3 Frontend - [ ] Route `/admin/transfers` est accessible pour un admin - [ ] Table affiche : seller, order, montant net, fee, status, retry_count, date - [ ] Badge de status coloré (completed=vert, failed=rouge, permanently_failed=gris) - [ ] Bouton Retry visible uniquement sur les transferts `failed` - [ ] Clic Retry → appel API → table rafraîchie - [ ] État Loading (skeleton) visible au chargement - [ ] État Empty visible si aucun transfert --- ## 3. Deep Health Checks (Lot H1) ### 3.1 Endpoint - [ ] `GET /health/deep` retourne JSON avec status global et par service - [ ] DB healthy → ping réussi, latency_ms renseigné - [ ] Redis healthy → ping réussi, latency_ms renseigné - [ ] S3 indisponible → status `degraded` (pas unhealthy), error renseigné - [ ] DB indisponible → status `unhealthy` ### 3.2 Startup validation - [ ] JWT_SECRET vide → log fatal + exit - [ ] DATABASE_URL invalide → log fatal + exit - [ ] PLATFORM_FEE_RATE > 1 → log fatal + exit - [ ] STRIPE_CONNECT_ENABLED=true sans STRIPE_SECRET_KEY → log warning - [ ] En mode dev : warnings au lieu de fatals pour configs non-critiques ### 3.3 Prometheus - [ ] `veza_health_check_status` gauge exposé par service (1=healthy, 0=unhealthy) --- ## 4. Documentation API (Lot D1) - [ ] `docs/API_REFERENCE.md` existe et couvre les endpoints clés - [ ] Exemples curl pour auth (login, register) - [ ] Exemples curl pour marketplace (products, orders) - [ ] Exemples curl pour admin (transfers) - [ ] Exemples curl pour health (deep) - [ ] `docs/MIGRATIONS.md` inclut migration 116 --- ## 5. Flux existants (non-régressions) ### 5.1 Commerce - [ ] Création de produit marketplace fonctionne - [ ] Création de commande fonctionne - [ ] Webhook payment succeeded → licences créées + transfer déclenché ### 5.2 Seller - [ ] GET /sell/transfers retourne l'historique du vendeur (inchangé) - [ ] SellerDashboard affiche les transferts (inchangé) ### 5.3 Auth - [ ] Login/register fonctionnent - [ ] JWT refresh fonctionne ### 5.4 Backend - [ ] `go test ./...` — tous les tests passent - [ ] GET /health retourne 200 (endpoint basique inchangé) ### 5.5 Frontend - [ ] `npm run build` — build OK - [ ] Storybook : AdminTransfersView stories sans erreur --- ## 6. Documentation & Release - [ ] CHANGELOG.md mis à jour avec section v0.701 - [ ] PROJECT_STATE.md mis à jour - [ ] FEATURE_STATUS.md mis à jour - [ ] SCOPE_CONTROL.md pointe vers v0.702 (prochaine) - [ ] RETROSPECTIVE_V0701.md créé - [ ] Tag `v0.701` créé