Aller au contenu

Tests du crafting

CFT-001 — Définitions et permissions

Prérequis : cinq rôles possédant séparément les permissions Crafting, des items et compétences existants.

  1. Créer/modifier un type et une recette multi-ingrédients dans le web admin.
  2. Tester ID invalide, item/skill/type inconnu, doublon, durée/quantité hors limites.
  3. Rejouer lecture, édition et suppression avec chaque profil incomplet et depuis F10.

Attendu : seules les opérations autorisées passent, les erreurs sont explicites, les mutations apparaissent à chaud et dans l'audit. F10 ne crée ni recette ni type.

CFT-002 — Placement personnel et groupe

Prérequis : un item d'établi, deux stockages proches, un groupe avec rangs distincts.

  1. Placer un établi personnel puis de groupe, en liant le même stockage ou deux stockages.
  2. Tester stockage distant/inaccessible, prop invalide, double validation et retrait de permission.
  3. Reconfigurer et démonter avec owner, membre autorisé/non autorisé; supprimer owner/groupe.

Attendu : un seul item est consommé et un seul prop persiste. Les contrôles serveur refusent les payloads forgés. La reprise administrative conserve la machine; un démontage valide restitue l'item, sauf décommission/suppression de type.

CFT-003 — Catalogue filtré et NUI

  1. Ouvrir un établi avec et sans compétences/blueprint.
  2. Vérifier les trois zones AR, recherche, lots, file et états vides/erreur.
  3. Sélectionner un personnage sans ouvrir d'établi et vérifier immédiatement le rendu du monde.
  4. Tester fermeture par bouton et Échap, annulation/réussite d'un placement, changement de personnage et restart medusa-crafting avant puis après ouverture.
  5. Tester résolutions usuelles et reduced motion.

Attendu : les recettes non admissibles sont invisibles. La NUI ne crée aucun backdrop noir lorsqu'elle est fermée, libère le focus et le verrou d'interaction.

Contrôle automatisé du backdrop

Exécuter :

node "fivem/resources/[local]/medusa-crafting/tests/nui-visibility.mjs"
node --check "fivem/resources/[local]/medusa-crafting/web/app.js"

Attendu : aucun color-scheme ni fond racine opaque, transparence html/body, règle [hidden] prioritaire, racine initialement masquée et appel final de l'état fermé.

CFT-004 — FIFO, autonomie et blocages

  1. Soumettre plusieurs ordres et lots à deux joueurs.
  2. Épuiser l'entrée, remplir la sortie puis supprimer/désactiver une liaison.
  3. Corriger chaque cause, déconnecter les joueurs et redémarrer API/FiveM pendant un lot.

Attendu : ordre FIFO strict, consommation par lot, reprise automatique, temps d'arrêt compté, XP par lot terminé et aucune duplication/perte.

CFT-005 — Concurrence et idempotence

  1. Envoyer deux placements/soumissions avec la même clé.
  2. Lancer deux cycles scheduler concurrents sur le même job et injecter une panne après consommation, dépôt puis XP.

Attendu : une seule machine, un seul job et un seul effet de chaque type. Le retry reprend à l'étape durable suivante.

CFT-006 — Annulation, pause et erreurs

  1. Annuler avant et pendant un lot comme auteur, owner groupe et admin.
  2. Mettre la machine en pause, relancer une system_error, puis reprendre.

Attendu : l'auteur ne peut annuler qu'avant engagement; owner/admin demandent l'arrêt après le lot courant. La pause ne démarre aucun nouveau lot et le retry ne répète aucun effet.

CFT-007 — Suppressions et compensations

  1. Bloquer un type, vérifier le drainage, puis tenter sa suppression avec un job non terminal.
  2. Supprimer successivement un ingrédient, produit, blueprint et item d'établi pendant différents stades.
  3. Saturer/supprimer le stockage de remboursement puis rediriger la compensation.

Attendu : le type reste tant qu'un job non terminal existe. Les jobs dépendants sont annulés, les composants valides sont remboursés une fois, les compensations restent visibles et redirigeables. La suppression finale retire les props sans restitution.

CFT-008 — Synchronisation et charge

  1. Modifier définitions et machines depuis le web/F10 avec plusieurs clients connectés.
  2. Charger un volume représentatif d'établis et de jobs, puis observer cadence, âge du backlog et logs.

Attendu : les versions se propagent sans redémarrage ni scintillement global. Le scheduler reste batché, les interactions sont streamées par distance et une machine fautive n'arrête pas les autres.

Automatisation

api/tests/test_crafting.py couvre validation des références, placement/consommation d'item, idempotence, traitement multi-lots et garde de suppression. Exécuter pytest, Ruff, les vérifications JavaScript et le build MkDocs strict avant livraison.