Le commit precedent finissait teams.py en notant que le defaut venait d'une
correction appliquee a un seul endroit. Balayer les autres modules
immediatement, plutot que d'attendre qu'une passe d'audit les retrouve, a
sorti les deux derniers.
tryouts.register_player lisait int(request.form.get('player_id')) -- 500 sur
une valeur non numerique -- et verifiait le role sans regarder
is_active_account. Un compte desactive pouvait donc etre inscrit a une
selection.
users/contracts._selectable_players ne filtrait pas non plus les comptes
desactives dans sa branche non-coach : la liste de depot de contrat proposait
encore des gens partis du club. Un contrat est un document nominatif signe.
PlayerSelectionSchema porte desormais le champ, et TeamPlayerSchema en herite
en ajoutant son statut. Un schema partage est ce qui empeche le prochain
appelant d'etre oublie -- c'est precisement parce que chaque route avait le
sien, ecrit a la main, que la correction a du etre faite trois fois.
Verifie par mutation.
Co-Authored-By: Claude Opus 5 <[email protected]>
QUA-003. La suite couvrait securite, autorisation, i18n, CSP et forme des
requetes. Elle ne couvrait pas les regles pour lesquelles l application
existe : qui entre dans une selection, combien, et ce qui cesse d etre
modifiable une fois qu elle est finie.
Aucun defaut corrige ici. Ce sont les garanties que les routes tiennent
deja, consignees pour qu un remaniement ne puisse pas en laisser tomber
une en silence. Deux meritent la lecture, parce qu elles ont l air d etre
appliquees et ne le sont qu a moitie :
- le plafond de joueurs est un count() suivi d un add(). Deux inscriptions
simultanees passent toutes les deux le compte et s inserent toutes les
deux. Il n y a aucune contrainte derriere dans le schema (DB-005/006,
bloques sur Alembic). Le test enonce la regle pour une requete a la
fois, et dit que le cas concurrent n est pas couvert ;
- is_ended ferme sur end_date, avec repli sur date, et la comparaison est
un < : une selection est encore ouverte le jour meme. C est un choix, et
il est facile de l inverser par accident.
Le test du plafond a failli passer a vide : une connexion ratee laisse
elle aussi exactement une inscription. Il verifie donc que le second
joueur est bien entre, et un test temoin montre que sans plafond il
s inscrit. C est le piege consigne en vague E — un test qui remplace ou
suppose quelque chose doit verifier que ce quelque chose a eu lieu.
501 tests.