Files
Forge-Engine/tests/test_object_new_without_fields.py
T
williamandClaude Sonnet 5 6cf4fdbe72 Corrige la création d'objet sans champ : le panneau rechargeait la page sans rien créer
Bug rapporté : le panneau "+ Nouvel objet" du tableau de bord "recharge la
page sans créer d'objet". Cause : object_new exigeait "name AND fields"
pour créer quoi que ce soit — or le formulaire du panneau permet de taper
le nom et de cliquer directement "Créer l'objet" SANS avoir cliqué au
préalable "+ Ajouter un champ" (les champs se posent typiquement APRÈS,
depuis le panneau "Modifier un objet", workflow déjà supporté). Sans champ
soumis, la condition échouait, la route redirigeait silencieusement vers
le tableau de bord SANS créer l'objet ET sans le moindre message d'erreur
— vécu comme "un rechargement qui ne fait rien".

create_definition(fields=[]) fonctionne déjà très bien (crée juste une
table avec id/created_at, sans colonne "métier") : retiré l'exigence d'au
moins un champ, ne reste que "name" non vide.

Nouveau test (tests/test_object_new_without_fields.py), confirmé en échec
sur l'ancien code (git stash) puis au vert avec le correctif.
131 tests au vert au total.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-27 19:03:29 +02:00

28 lines
1.3 KiB
Python

"""Régression : le panneau "+ Nouvel objet" du tableau de bord (game_dashboard.html)
soumet le formulaire dès qu'on tape un nom et clique "Créer l'objet",
SANS avoir forcément cliqué "+ Ajouter un champ" au moins une fois avant
(les champs se posent typiquement APRÈS, depuis le panneau "Modifier un
objet"). routes/objects/object_new.py exigeait pourtant au moins un champ
pour créer quoi que ce soit ("if name and fields"), sans le moindre
message d'erreur en cas d'échec — juste un aller-retour silencieux vers le
tableau de bord, vécu comme "le panneau recharge la page sans créer
d'objet"."""
import db
def test_object_created_with_a_name_but_no_field(client, game):
resp = client.post(f"/game/{game}/objects/new", data={"object_name": "Compteur"}, follow_redirects=False)
assert resp.status_code == 302
assert "/objects/" in resp.headers["Location"]
definitions = db.list_definitions(game)
assert len(definitions) == 1
assert definitions[0]["name"] == "Compteur"
assert db.get_definition(game, definitions[0]["id"])["fields"] == []
def test_object_not_created_without_a_name(client, game):
resp = client.post(f"/game/{game}/objects/new", data={"object_name": " "}, follow_redirects=False)
assert resp.status_code == 302
assert db.list_definitions(game) == []