Aller au contenu

Tests des compétences

Couverture automatisée : api/tests/test_skills.py (service) et api/tests/test_skills_api.py (routes/permissions). Les scénarios ci-dessous couvrent en plus la parité multi-surface et le rendu en jeu, qui ne sont pas automatisables dans la suite Pytest.

SKL-001 — Construction de l'arbre et courbe (admin web)

Prérequis : permission ADMIN_ALLOW_EDIT_SKILLS.

  1. Créer une branche « Médical », y ajouter un nœud « Infirmier » (coût 1, permission SKILL_MEDIC_NURSE) puis « Médecin » (prérequis « Infirmier », coût 2, buff lié).
  2. Positionner les deux nœuds sur le canevas par glisser-déposer, recharger la page.
  3. Définir la courbe : niveau 1 → 0 XP → 3 points ; niveau 2 → 100 XP → 1 point.
  4. Tenter de créer le niveau 3 avec un XP requis inférieur ou égal au niveau 2 ; tenter de créer le niveau 4 sans le niveau 3 ; tenter de supprimer le niveau 1 alors que le niveau 2 existe.

Attendu : la position des nœuds est restituée identique après rechargement ; les trois tentatives de l'étape 4 sont rejetées explicitement.

SKL-009 — Création d'un nœud depuis une branche

Prérequis : permission ADMIN_ALLOW_EDIT_SKILLS, une branche vide puis une branche contenant un nœud, image admin reconstruite.

  1. Dans la branche vide, cliquer sur Nouveau nœud et vérifier que la modale s'ouvre sans erreur JavaScript.
  2. Conserver Aucun comme prérequis, saisir un nom et un coût valides puis confirmer.
  3. Créer un second nœud en choisissant le premier comme prérequis.
  4. Recharger la page et contrôler la liste ainsi que le lien sur le canevas.
  5. Recommencer puis tester Annuler, Escape, un nom d'un caractère et un coût inférieur à 1.
  6. Rejouer sans ADMIN_ALLOW_EDIT_SKILLS, puis tenter directement la requête de mutation.

Attendu : les deux créations valides sont persistées et affichées ; le select accepte Aucun et le nœud existant. Annulation, Escape et validation HTML invalide ne mutent rien. Sans permission, le bouton est absent et l'API refuse une requête forgée.

SKL-002 — Progression, déblocage et F4 (en jeu)

Prérequis : l'arbre de SKL-001, un personnage chargé avec 0 XP.

  1. Appuyer sur F4 : vérifier l'affichage XP/niveau/points et l'arbre visuel.
  2. Créditer 100 XP via /grantxp ou l'admin web ; rouvrir F4.
  3. Débloquer « Infirmier » (coût 1) sur un nœud accessible.
  4. Tenter de débloquer « Médecin » avant d'avoir assez de points ; puis créditer les points nécessaires et débloquer.

Attendu : F4 s'ouvre sans PNJ ni lieu particulier ; le niveau/les points affichés correspondent à la courbe ; le déblocage refusé (étape 4) ne modifie aucun état ; le déblocage réussi retire le coût exact.

SKL-003 — Permission de compétence lue par une ressource tierce

Prérequis : SKL-002 complété (« Infirmier » débloqué).

  1. Depuis une ressource FiveM quelconque (ou la console serveur), lire Player(source).state.medusaSkillFlags pour le joueur concerné.

Attendu : la chaîne SKILL_MEDIC_NURSE apparaît immédiatement après le déblocage, sans appel API depuis la ressource tierce.

SKL-004 — Révocation immédiate à la désactivation d'un nœud

Prérequis : un personnage connecté ayant débloqué « Médecin » (buff + permission actifs).

  1. Un administrateur désactive le nœud « Médecin » depuis l'admin web.
  2. Observer le client du joueur concerné sans qu'il ne rouvre F4 ni ne se reconnecte.

Attendu : le buff lié disparaît des buffs actifs et la permission disparaît de medusaSkillFlags immédiatement ; le solde de points du personnage ne change pas (point non remboursé) ; F4 ne montre plus « Médecin » comme débloqué.

SKL-005 — Buff partagé par deux nœuds

Prérequis : deux nœuds référençant le même buff, tous deux débloqués par un même personnage.

  1. Désactiver un seul des deux nœuds ; vérifier les buffs actifs du personnage.
  2. Désactiver le second nœud ; vérifier à nouveau.

Attendu : après l'étape 1, une instance du buff reste active (celle du nœud encore actif) ; après l'étape 2, plus aucune instance n'est active.

SKL-006 — Respec en cascade

Prérequis : une chaîne de trois nœuds (A → B → C par prérequis), tous débloqués par un personnage.

  1. Un administrateur respec le nœud A (le premier de la chaîne) depuis l'admin web ou F10.

Attendu : les trois nœuds sont retirés dans la même action, leurs coûts intégralement recrédités, et la réponse/le message affiché énumère explicitement les trois nœuds retirés.

SKL-007 — Parité web / F10 / commande pour l'octroi manuel d'XP

Prérequis : permission ADMIN_ALLOW_GRANT_XP sur un rôle de test, un personnage connecté.

  1. Créditer de l'XP depuis la fiche personnage (admin web), avec motif.
  2. Créditer de l'XP depuis le panneau F10 (bouton « Gérer les compétences »), avec motif.
  3. Créditer de l'XP via /grantxp <compte> <montant> <motif>.
  4. Retirer le rôle de test et répéter chaque surface.

Attendu : les trois surfaces créditent effectivement l'XP et produisent une entrée dans le journal d'audit admin ; sans la permission, les trois surfaces refusent l'action.

SKL-008 — Redémarrage de medusa-skills avec des joueurs connectés

Prérequis : un joueur connecté avec des permissions de compétence actives.

  1. Redémarrer la ressource medusa-skills (restart medusa-skills ou équivalent txAdmin).

Attendu : la state bag existante persiste côté client tant que le joueur reste connecté ; une resynchronisation complète a lieu peu après le redémarrage sans action du joueur.