# Guide de Tests API — Postman **PFE Ali Guennari — ERP SUARL Rayhan** ## Configuration de Base **URL de base** : `http://192.168.100.33:8090` ### 1. Configurer une Variable d'Environnement Postman Dans Postman, créer un environnement "Rayhan ERP" avec : - `baseUrl` = `http://192.168.100.33:8090` - `token` = (sera rempli automatiquement) --- ## Scénario 1 : Authentification ### Se connecter (POST /api/auth/signin) ``` POST {{baseUrl}}/api/auth/signin Content-Type: application/json { "username": "admin", "password": "Rayhan2024!" } ``` **Réponse attendue (200 OK) :** ```json { "token": "eyJhbGciOiJIUzI1NiJ9...", "type": "Bearer", "id": 1, "username": "admin", "email": "admin@rayhan.tn", "roles": ["ROLE_PDG"] } ``` **Script Postman (Tests tab)** pour sauvegarder le token : ```javascript var json = pm.response.json(); pm.environment.set("token", json.token); ``` **Utilisation dans toutes les requêtes suivantes :** ``` Authorization: Bearer {{token}} ``` --- ## Scénario 2 : Référentiels ### Créer un Article (Matière Première HDPE) ``` POST {{baseUrl}}/api/articles Authorization: Bearer {{token}} Content-Type: application/json { "reference": "MP-HDPE-001", "designation": "HDPE Granulés (Polyéthylène Haute Densité)", "type": "MP", "uniteMesure": "kg", "prixUnitaire": 2.850, "stockMinimum": 500 } ``` ### Créer un Article (Produit Fini — Sac Bertel) ``` POST {{baseUrl}}/api/articles Authorization: Bearer {{token}} Content-Type: application/json { "reference": "PF-SAC-BERTEL-001", "designation": "Sac Bertel 40x60 cm", "type": "PF", "uniteMesure": "unité", "prixUnitaire": 0.085, "stockMinimum": 1000 } ``` ### Créer un Client ``` POST {{baseUrl}}/api/clients Authorization: Bearer {{token}} Content-Type: application/json { "raisonSociale": "Supermarché Maghreb Distribution", "matriculeFiscal": "123456A/A/M/000", "adresse": "Avenue Habib Bourguiba, Tataouine", "telephone": "75123456", "email": "achats@maghreb-distrib.tn", "ville": "Tataouine", "typeClient": "Grossiste", "delaiPaiement": 60 } ``` ### Créer un Fournisseur (HDPE) ``` POST {{baseUrl}}/api/fournisseurs Authorization: Bearer {{token}} Content-Type: application/json { "raisonSociale": "PLASTUNION Tunisie", "matriculeFiscal": "654321B/A/M/000", "adresse": "Zone Industrielle Sfax", "telephone": "74987654", "email": "ventes@plastunion.tn", "ville": "Sfax", "pays": "Tunisie", "categorieProduit": "Matières plastiques", "delaiLivraison": 10 } ``` --- ## Scénario 3 : Cycle d'Achat Complet ### Étape 3.1 — Créer une Commande Fournisseur ``` POST {{baseUrl}}/api/purchase-orders Authorization: Bearer {{token}} Content-Type: application/json { "fournisseur": {"id": 1}, "dateLivraisonPrevue": "2024-05-15", "notes": "Commande mensuelle HDPE", "lignes": [ { "article": {"id": 1}, "quantiteCommandee": 1000, "prixUnitaireHT": 2.850, "tauxTVA": 19.00 } ] } ``` **Réponse attendue :** commande avec `reference: "BC-2024-001"`, `statut: "CONFIRMEE"`, `totalTTC: 3391.50` ### Étape 3.2 — Réceptionner la Commande (Bon de Réception) ``` POST {{baseUrl}}/api/purchase-orders/1/receive Authorization: Bearer {{token}} Content-Type: application/json { "dateReception": "2024-05-14", "notes": "Réception conforme", "lignes": [ { "purchaseOrderLine": {"id": 1}, "article": {"id": 1}, "quantiteRecue": 1000, "observations": "Qualité OK, sacs conformes" } ] } ``` **Vérification :** `GET {{baseUrl}}/api/articles/1` → `stockActuel` doit être 1000 --- ## Scénario 4 : Production (BOM + OF) ### Étape 4.1 — Définir la Nomenclature (BOM) ``` POST {{baseUrl}}/api/production/bom Authorization: Bearer {{token}} Content-Type: application/json { "produitFini": {"id": 2}, "composant": {"id": 1}, "quantiteParUnite": 0.015, "uniteMesure": "kg" } ``` *Signification : pour produire 1 Sac Bertel, il faut 0.015 kg de HDPE* ### Étape 4.2 — Planifier un Ordre de Fabrication ``` POST {{baseUrl}}/api/production/orders/plan Authorization: Bearer {{token}} Content-Type: application/json { "produitFiniId": 2, "quantite": 10000, "datePlanifiee": "2024-05-16" } ``` **Vérification préalable :** stock HDPE (1000 kg) ≥ 10000 × 0.015 = 150 kg → OK ### Étape 4.3 — Lancer l'OF ``` POST {{baseUrl}}/api/production/orders/1/launch Authorization: Bearer {{token}} ``` **Vérification :** stock HDPE passe de 1000 à 850 kg (consommation 150 kg) ### Étape 4.4 — Terminer l'OF ``` POST {{baseUrl}}/api/production/orders/1/complete Authorization: Bearer {{token}} Content-Type: application/json { "quantiteRealisee": 9800 } ``` **Vérification :** stock Sac Bertel passe à 9800 unités --- ## Scénario 5 : Cycle de Vente ### Étape 5.1 — Créer une Commande Client ``` POST {{baseUrl}}/api/sales-orders Authorization: Bearer {{token}} Content-Type: application/json { "client": {"id": 1}, "dateLivraisonSouhaitee": "2024-05-20", "notes": "Urgent", "lignes": [ { "article": {"id": 2}, "quantiteCommandee": 5000, "prixUnitaireHT": 0.085, "tauxTVA": 19.00 } ] } ``` ### Étape 5.2 — Créer un Bon de Livraison ``` POST {{baseUrl}}/api/sales-orders/1/deliver Authorization: Bearer {{token}} Content-Type: application/json { "dateLivraison": "2024-05-20", "adresseLivraison": "Avenue Habib Bourguiba, Tataouine", "notes": "Livraison par camion", "lignes": [ { "salesOrderLine": {"id": 1}, "article": {"id": 2}, "quantiteLivree": 5000 } ] } ``` **Vérification :** stock Sac Bertel passe de 9800 à 4800 --- ## Scénario 6 : Tableau de Bord (PDG uniquement) ``` GET {{baseUrl}}/api/dashboard Authorization: Bearer {{token}} ``` **Réponse attendue :** ```json { "ventes": { "chiffreAffairesMois": 505.75, "nbCommandesMois": 1, "commandesEnCours": 0 }, "achats": { "commandesEnAttente": 0 }, "production": { "ofPlanifies": 0, "ofEnCours": 0 }, "stock": { "articlesEnAlerte": 0, "articlesEnAlerteDetails": [] } } ``` --- ## Codes d'Erreur Importants | Code | Signification | Action | |------|--------------|--------| | 401 | Non authentifié | Vérifier le token JWT | | 403 | Accès interdit | Le rôle ne permet pas cette action | | 400 | Données invalides | Vérifier le body de la requête | | 500 | Erreur serveur | Voir les logs du container | ## Commandes Docker Utiles ```bash # Voir les logs de l'API docker logs rayhan-backend -f # Accéder à MySQL directement docker exec -it rayhan-mysql mysql -u root -prayhan_erp_2024 rayhan_erp_db # Redémarrer l'API docker restart rayhan-backend ```