Aller au contenu

Plan de tests immobilier et bâtiments

Préparation

Utiliser PostgreSQL migré jusqu'au head unique 0039_building_timestamps, Redis disponible, deux joueurs, deux groupes avec rangs, un Founder et des rôles portant chacune des six permissions immobilières. Préparer comptes bancaires, cash, inventaires vide/plein, garages personnels/de groupe et stockages vide/rempli.

BLD-001 — Création spatiale et overlap

  1. Créer une agence légale puis clandestine depuis F10 et /adminagencies. Depuis F10, vérifier que le panneau disparaît avant le placement, que E valide le Ped et que World Edit ne se rouvre qu'après le message de confirmation et contient immédiatement l'agence. Vérifier dans F8 la paire agency_save_received/agency_save_committed. Refaire avec Échap, avec un modèle indisponible puis avec un nom déjà utilisé : l'échec doit être visible dans le jeu et son diagnostic corrélé doit apparaître dans F9 sous IMMOBILIER.
  2. Dessiner un prisme, annuler puis recommencer ; tenter un polygone invalide et un chevauchement.
  3. Rejouer l'overlap avec ADMIN_ALLOW_OVERRIDE_BUILDING_ZONE, puis redémarrer la ressource.

Attendu : E est reçu malgré l'ouverture initiale de F10 ; succès, erreur et annulation restaurent le panneau sans double focus. Aucun succès n'est affiché avant le commit. Peds et blip légal seulement, annulation sans ligne, conflit explicite sans override, publication auditée avec override et configuration identique après restart. Sans permission, aucune action ni placement ne démarre.

BLD-002 — Catalogues et achats atomiques

  1. Ouvrir chaque agence et vérifier que seul son catalogue apparaît.
  2. Acheter légalement en banque, clandestinement en cash, gratuitement, personnellement et pour un groupe autorisé.
  3. Tester fonds insuffisants, inventaire plein, limite atteinte, mauvais compte et deux achats simultanés du même bien.

Attendu : exactement un owner, un badge maître et un reçu par succès. Tous les refus laissent solde, cash, ownership, badge et permissions inchangés. Un appel distant de l'agence est refusé.

BLD-003 — Copropriété et contrats

Inviter un joueur proche, refuser, laisser expirer, puis accepter avec différentes combinaisons de droits. Tenter les mutations avant acceptation, à distance et sans droit.

Attendu : contrat 7 jours, aucun droit anticipé, matrice appliquée séparément et mutations réservées au point de gestion. Un groupe ne peut pas recevoir une copropriété.

BLD-004 — Transfert d'ownership

Tester character→character, character→group, group→character et group→group, avec acceptation, refus, expiration, replay et garage non vide.

Attendu : aucun argent n'est déplacé ; garage non vide bloque tout. Un succès conserve les équipements/contenus, révoque anciens badges/codes/copropriétaires/grants, puis remet un unique badge actif et les permissions scoped au nouveau groupe.

BLD-005 — Badges et portes

Créer portes simple et double, émettre un badge restreint à un joueur proche, le transférer via l'inventaire, tester une porte hors scope, puis révoquer. Ajouter ensuite une nouvelle porte.

Attendu : le porteur courant ouvre uniquement le scope explicite ; la révocation prend effet sans reconnexion ; la nouvelle porte n'est pas ajoutée aux anciens badges. Une tentative distante ou depuis un autre routing bucket échoue.

BLD-006 — Codes, rate limit et relock

Configurer un code et un délai. Tester cinq codes faux, le blocage, un autre joueur, Redis coupé, un code valide, le relock et un restart pendant le délai.

Attendu : blocage cinq minutes par paire, aucun secret dans les logs, code fail-closed sans Redis, badge encore fonctionnel, état et échéance restaurés. Sans owner ou en état inactive, la porte reste verrouillée.

BLD-007 — Garages et stockages

Tester bâtiment personnel et groupe, garage personal et group, véhicules personnels/de groupe, copropriétaires et rangs avec/sans permission dynamique. Rejouer sur des garages et stockages non rattachés.

Attendu : chaque combinaison applique ownership et permission attendus sans régression des ressources autonomes. Un stockage du bâtiment fermé refuse toute ouverture/transfert.

BLD-008 — Suppression, désactivation et recovery

Désactiver/réactiver un bien, tenter de supprimer un bien possédé, un stockage rempli et un garage occupé. Lancer une recovery avec mappings incomplet, incompatible puis complet.

Attendu : désactivation conserve les données et verrouille les portes ; suppressions dangereuses sont refusées. La recovery reloge tous les véhicules et change l'ownership, ou ne modifie rien.

BLD-009 — Administration et audit

Comparer web et F10 avec chaque permission unitaire. Filtrer bâtiments et reçus, modifier une agence/un bien, rattacher un équipement et consulter le journal admin.

Attendu : navigation et actions sont masquées/refusées indépendamment. Chaque mutation contient acteur Discord, source, action, cible et timestamp ; aucun code de porte n'est enregistré.

BLD-010 — Population et streaming

Entrer dans une zone avec trafic/peds ambiants, joueurs et entités scriptées, puis parcourir plusieurs zones éloignées avec deux clients.

Attendu : densités ambiantes tombent à zéro uniquement dans le prisme ; joueurs et scripts restent. Les props, Peds, blips et interactions quittant la cellule sont nettoyés sans doublon ni interaction fantôme.

BLD-011 — NUI et contrôles

Tester clavier AZERTY, souris, manette, focus, fermeture/Échap, résolutions 1920×1080 et 1280×720, ainsi que prefers-reduced-motion.

Attendu : interface française lisible, modales applicatives uniquement, monde visible autour du panneau et aucun backdrop opaque quand la NUI est fermée.

BLD-012 — Charge

Charger 500 bâtiments aux plafonds documentés et 48 sessions. Mesurer p95 des endpoints, resmon fermé et volumes réseau lors des changements de cellule.

Attendu : p95 inférieur à 500 ms, ressource fermée au plus à 0,10 ms moyen, aucune boucle client sur toutes les entités et aucune fuite mémoire. Cette recette nécessite l'environnement de charge ; les tests statiques locaux ne la remplacent pas.

Vérifications automatisées

  • pytest api/tests/test_buildings.py : persistance agence via la route F10 jusqu'au runtime, géométrie, achat gratuit idempotent, transfert, badge et porte ;
  • node --test fivem/tests/buildings-contracts.test.mjs : position serveur, streaming, sélection et NUI ;
  • npm test sous fivem/ : syntaxe Lua, transparence et non-régressions ;
  • docker compose exec api alembic upgrade head sur PostgreSQL depuis le head précédent ;
  • docker compose build docs : navigation et liens MkDocs stricts.