ci: run DB integration tests against an ephemeral MariaDB service #21

Merged
Corentin merged 1 commit from ci/run-db-integration-tests into dev 2026-06-16 14:19:43 +02:00
Owner

Probleme (finding HIGH de l'audit du 2026-06-16)

Le job static-tests lancait phpunit sans base ni WAKDO_DB_TESTS=1 : les 7 tests tests/Integration/*DbTest s'auto-skippaient (13 skips), et le SQL porteur de securite n'etait valide par aucun test en CI :

  • upsert atomique du throttle (login + PIN), fenetre glissante ;
  • predicat RBAC AND r.is_active = 1 ;
  • audit_log ecrit dans la meme transaction que l'effet ;
  • FK RESTRICT/CASCADE des suppressions.

Le double FakeDatabase n'execute pas le SQL -> une regression dans ces requetes passait la CI au vert. Le "188 verts / chemins critiques couverts" etait trompeur (Skipped: 13 masque par le compte global).

Correctif

  • Service MariaDB 11.4 ephemere dans static-tests.
  • Etape PHPUnit : installe php-mysql (pilote pdo_mysql, absent jusqu'ici) + mariadb-client, attend la base, applique db/migrations/*.sql puis db/seeds/*.sql, lance phpunit avec WAKDO_DB_TESTS=1 + DB_*.
  • --fail-on-skipped : un skip silencieux d'un *DbTest fait desormais echouer la CI (fin du faux vert).

Validation locale (avant push)

Recette rejouee sur une MariaDB 11.4 vierge : migrations + seeds appliques proprement (22 tables, 5 roles, 53 produits), puis :

phpunit -c phpunit.xml  ->  OK (188 tests, 525 assertions)   # 0 skip, 0 echec

(vs 188 / 448 / 13 skip sans base.)

Le support services: du runner Forgejo est valide par le run de CI de cette PR elle-meme. Identifiants MariaDB : ephemeres, CI uniquement. Pas de label auto-merge : relecture manuelle.

## Probleme (finding HIGH de l'audit du 2026-06-16) Le job `static-tests` lancait `phpunit` **sans base ni `WAKDO_DB_TESTS=1`** : les 7 tests `tests/Integration/*DbTest` s'auto-skippaient (13 skips), et le SQL porteur de securite n'etait valide par **aucun** test en CI : - upsert atomique du throttle (login + PIN), fenetre glissante ; - predicat RBAC `AND r.is_active = 1` ; - `audit_log` ecrit dans la **meme** transaction que l'effet ; - FK RESTRICT/CASCADE des suppressions. Le double `FakeDatabase` n'execute pas le SQL -> une regression dans ces requetes passait la CI au **vert**. Le "188 verts / chemins critiques couverts" etait trompeur (`Skipped: 13` masque par le compte global). ## Correctif - Service **MariaDB 11.4** ephemere dans `static-tests`. - Etape PHPUnit : installe `php-mysql` (pilote pdo_mysql, absent jusqu'ici) + `mariadb-client`, attend la base, applique `db/migrations/*.sql` puis `db/seeds/*.sql`, lance `phpunit` avec `WAKDO_DB_TESTS=1` + `DB_*`. - `--fail-on-skipped` : un skip silencieux d'un `*DbTest` fait desormais **echouer** la CI (fin du faux vert). ## Validation locale (avant push) Recette rejouee sur une MariaDB 11.4 vierge : migrations + seeds appliques proprement (22 tables, 5 roles, 53 produits), puis : ``` phpunit -c phpunit.xml -> OK (188 tests, 525 assertions) # 0 skip, 0 echec ``` (vs 188 / 448 / 13 skip sans base.) Le support `services:` du runner Forgejo est valide par le run de CI de cette PR elle-meme. Identifiants MariaDB : ephemeres, CI uniquement. Pas de label `auto-merge` : relecture manuelle.
Corentin added 1 commit 2026-06-16 12:40:28 +02:00
ci: run DB integration tests against an ephemeral MariaDB service
All checks were successful
CI / secret-scan (push) Successful in 7s
CI / php-lint (push) Successful in 17s
CI / static-tests (push) Successful in 46s
CI / secret-scan (pull_request) Successful in 8s
CI / php-lint (pull_request) Successful in 20s
CI / static-tests (pull_request) Successful in 45s
CI / auto-merge (push) Has been skipped
CI / auto-merge (pull_request) Successful in 5s
d4b02a76c6
Avant ce commit, le job static-tests lancait phpunit sans base ni
WAKDO_DB_TESTS=1 : les 7 tests d'integration tests/Integration/*DbTest
s'auto-skippaient (13 skips), et le SQL porteur de securite n'etait valide
par AUCUN test en CI -- upsert atomique du throttle (login + PIN), predicat
RBAC AND r.is_active=1, audit_log dans la meme transaction, FK RESTRICT/CASCADE.
Une regression dans ce SQL passait la CI au vert (le double FakeDatabase
n'execute pas le SQL).

Ce commit provisionne un service MariaDB 11.4 ephemere, applique le schema
(db/migrations) puis le seed (db/seeds), et lance phpunit avec WAKDO_DB_TESTS=1
+ DB_*, ajoute le pilote pdo_mysql (php-mysql) et le client mariadb. L'option
--fail-on-skipped garantit qu'un skip silencieux d'un *DbTest fait desormais
echouer la CI au lieu de la laisser verte.

Recette validee localement sur une MariaDB 11.4 vierge : migrations + seeds
appliques proprement (22 tables, 5 roles, 53 produits), phpunit = 188 tests /
525 assertions / 0 skip / 0 echec (vs 188 / 448 / 13 skip sans base).
Corentin merged commit e3d08464bb into dev 2026-06-16 14:19:43 +02:00
Corentin deleted branch ci/run-db-integration-tests 2026-06-16 14:19:43 +02:00
Sign in to join this conversation.
No reviewers
No labels
auto-merge
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: AcadeNice/corentin_wakdo#21
No description provided.