Extract screenIds from feature files automatically

- Add screenIds extraction to parse-features.ts based on step patterns
- Update ParsedFeature type to include screenIds field
- Remove manual screenIds from user story definitions in index.ts
- Compute screenIds by looking up parsed features at runtime

Feature files are now the single source of truth for screen-to-story
linking. Run `bun run features:parse` to update after modifying features.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Sylvain Duchesne
2026-01-19 10:00:11 +01:00
parent 9cc916e8bc
commit ed61c7081f
7 changed files with 1065 additions and 902 deletions
+26 -26
View File
@@ -19,7 +19,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 4,
"failed": 0,
"skipped": 1,
"lastRun": "2026-01-18T18:01:45.485Z",
"lastRun": "2026-01-18T20:32:26.120Z",
"scenarios": [
{
"name": "Accéder à la création d'événement",
@@ -49,7 +49,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 3,
"failed": 0,
"skipped": 1,
"lastRun": "2026-01-18T18:01:45.485Z",
"lastRun": "2026-01-18T20:32:26.120Z",
"scenarios": [
{
"name": "Accéder aux détails d'un événement terminé",
@@ -75,7 +75,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 0,
"failed": 0,
"skipped": 5,
"lastRun": "2026-01-18T18:01:45.485Z",
"lastRun": "2026-01-18T20:32:26.120Z",
"scenarios": [
{
"name": "Voir les commentaires existants",
@@ -105,7 +105,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 2,
"failed": 0,
"skipped": 3,
"lastRun": "2026-01-18T18:01:45.485Z",
"lastRun": "2026-01-18T20:32:26.120Z",
"scenarios": [
{
"name": "Consulter un événement avant inscription",
@@ -135,7 +135,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 0,
"failed": 0,
"skipped": 4,
"lastRun": "2026-01-18T18:01:45.485Z",
"lastRun": "2026-01-18T20:32:26.120Z",
"scenarios": [
{
"name": "Consulter un macro-événement",
@@ -161,7 +161,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 2,
"failed": 0,
"skipped": 4,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.120Z",
"scenarios": [
{
"name": "Accéder aux points de rencontre",
@@ -195,7 +195,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 0,
"failed": 0,
"skipped": 5,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Partager un événement auquel je participe",
@@ -225,7 +225,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 1,
"failed": 0,
"skipped": 4,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Configurer les notifications de nouveaux participants",
@@ -255,7 +255,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 1,
"failed": 0,
"skipped": 4,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Voir les événements à venir sur l'accueil",
@@ -285,7 +285,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 4,
"failed": 0,
"skipped": 1,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Accéder au profil d'un participant",
@@ -315,7 +315,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 2,
"failed": 0,
"skipped": 4,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Accéder à la liste des événements depuis le profil",
@@ -349,7 +349,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 3,
"failed": 0,
"skipped": 1,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Accéder à la liste des inscrits",
@@ -375,7 +375,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 3,
"failed": 0,
"skipped": 2,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Accéder à mon profil",
@@ -405,7 +405,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 2,
"failed": 0,
"skipped": 3,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Accéder aux paramètres de profil",
@@ -435,7 +435,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 0,
"failed": 0,
"skipped": 5,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Accéder au partage de profil",
@@ -465,7 +465,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 2,
"failed": 0,
"skipped": 3,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Accéder au partage depuis le profil",
@@ -495,7 +495,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 2,
"failed": 0,
"skipped": 2,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Accéder aux paramètres de notification",
@@ -521,7 +521,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 1,
"failed": 0,
"skipped": 3,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Accéder aux paramètres de notification",
@@ -547,7 +547,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 2,
"failed": 0,
"skipped": 2,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Accéder à la création d'événement",
@@ -573,7 +573,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 2,
"failed": 0,
"skipped": 2,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Accéder au profil pour voir la photo",
@@ -599,7 +599,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 1,
"failed": 0,
"skipped": 3,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Accéder aux détails d'un événement terminé",
@@ -625,7 +625,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 0,
"failed": 0,
"skipped": 4,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Accéder au bilan consolidé",
@@ -651,7 +651,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 1,
"failed": 0,
"skipped": 4,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Accéder à la création d'atelier",
@@ -681,7 +681,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 0,
"failed": 0,
"skipped": 4,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Accéder à la zone de notes personnelles",
@@ -707,7 +707,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 0,
"failed": 0,
"skipped": 4,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Voir les commentaires existants d'un atelier",
@@ -733,7 +733,7 @@ const rawResults: RawFeatureTestStatus[] = [
"passed": 2,
"failed": 0,
"skipped": 2,
"lastRun": "2026-01-18T18:01:45.486Z",
"lastRun": "2026-01-18T20:32:26.121Z",
"scenarios": [
{
"name": "Rechercher un événement public existant",