Mise en place de tests utilisateurs avec playwright pour la partie angular + corrections au niveau des labels avec for et id pour cliquer dessus
Some checks failed
E2E Tests / e2e (push) Failing after 5m30s

This commit is contained in:
2026-04-25 00:25:53 +02:00
parent 2764228abf
commit 6c6bd20f0d
26 changed files with 1365 additions and 54 deletions

View File

@@ -11,8 +11,9 @@
<form [formGroup]="form" (ngSubmit)="submit()">
<div class="field">
<label>Nom de l'univers *</label>
<label for="lore-name">Nom de l'univers *</label>
<input
id="lore-name"
type="text"
formControlName="name"
placeholder="Ex: Royaume des Ombres, Cyberpunk 2157..."
@@ -21,8 +22,9 @@
</div>
<div class="field">
<label>Description</label>
<label for="lore-description">Description</label>
<textarea
id="lore-description"
formControlName="description"
placeholder="Décrivez brièvement votre univers, son ambiance, son genre..."
rows="5"

View File

@@ -9,8 +9,8 @@
<!-- Titre -->
<div class="field">
<label>Titre de la page *</label>
<input type="text" formControlName="title" placeholder="Ex: Maître Eldrin, La Cité d'Argent..." />
<label for="page-title">Titre de la page *</label>
<input id="page-title" type="text" formControlName="title" placeholder="Ex: Maître Eldrin, La Cité d'Argent..." />
</div>
<!-- Template -->
@@ -42,10 +42,10 @@
<!-- Dossier de destination -->
<div class="field">
<label>Dossier de destination *</label>
<label for="page-node">Dossier de destination *</label>
<ng-container *ngIf="nodes.length; else emptyFolders">
<select formControlName="nodeId" [attr.disabled]="preselectedNodeId ? true : null">
<select id="page-node" formControlName="nodeId">
<option value="" disabled>Sélectionnez un dossier</option>
<option *ngFor="let node of nodes" [value]="node.id">{{ node.name }}</option>
</select>

View File

@@ -88,9 +88,12 @@ export class PageCreateComponent implements OnInit, OnDestroy {
this.templates = data.templates;
this.layoutService.show(buildLoreSidebarConfig(data));
// Si nodeId fourni par l'URL, on verrouille la valeur du formulaire.
// Si nodeId fourni par l'URL, on fige la valeur ET on désactive le
// contrôle de formulaire (FormControl.disable, pas attr.disabled qui
// serait cosmétique). La valeur reste incluse dans les submits.
if (this.preselectedNodeId) {
this.form.patchValue({ nodeId: this.preselectedNodeId });
this.form.get('nodeId')?.disable();
}
this.restoreDraft();
@@ -152,7 +155,7 @@ export class PageCreateComponent implements OnInit, OnDestroy {
submit(): void {
if (!this.canSubmit) return;
const raw = this.form.value;
const raw = this.form.getRawValue();
this.pageService.create({
loreId: this.loreId,
nodeId: raw.nodeId,
@@ -206,7 +209,7 @@ export class PageCreateComponent implements OnInit, OnDestroy {
return;
}
this.wizardError = null;
const raw = this.form.value;
const raw = this.form.getRawValue();
// Le backend POST /api/pages ne prend pas `values` — on crée d'abord la
// coquille, puis on PUT immédiatement avec les valeurs extraites.
// 2 roundtrips, mais zéro modification backend nécessaire.

View File

@@ -11,20 +11,20 @@
<div class="col-left">
<div class="field">
<label>Nom du template *</label>
<input type="text" formControlName="name" placeholder="Ex: Auberge, Artefact, Monstre..." />
<label for="template-name">Nom du template *</label>
<input id="template-name" type="text" formControlName="name" placeholder="Ex: Auberge, Artefact, Monstre..." />
</div>
<div class="field">
<label>Description</label>
<textarea formControlName="description" rows="4" placeholder="À quoi sert ce template ?"></textarea>
<label for="template-description">Description</label>
<textarea id="template-description" formControlName="description" rows="4" placeholder="À quoi sert ce template ?"></textarea>
</div>
<div class="field">
<label>Dossier par défaut *</label>
<label for="template-default-node">Dossier par défaut *</label>
<ng-container *ngIf="nodes.length; else emptyFolders">
<select formControlName="defaultNodeId">
<select id="template-default-node" formControlName="defaultNodeId">
<option value="" disabled>Sélectionnez un dossier</option>
<option *ngFor="let node of nodes" [value]="node.id">{{ node.name }}</option>
</select>

View File

@@ -17,13 +17,13 @@
<div class="col-left">
<div class="field">
<label>Nom</label>
<input type="text" formControlName="name" />
<label for="template-edit-name">Nom</label>
<input id="template-edit-name" type="text" formControlName="name" />
</div>
<div class="field">
<label>Dossier par défaut</label>
<select formControlName="defaultNodeId">
<label for="template-edit-default-node">Dossier par défaut</label>
<select id="template-edit-default-node" formControlName="defaultNodeId">
<option value="">-- Aucun --</option>
<option *ngFor="let node of nodes" [value]="node.id">{{ node.name }}</option>
</select>
@@ -31,8 +31,8 @@
</div>
<div class="field">
<label>Description</label>
<textarea formControlName="description" rows="6"></textarea>
<label for="template-edit-description">Description</label>
<textarea id="template-edit-description" formControlName="description" rows="6"></textarea>
</div>
</div>