- 11 tests couvrant le login (3) et la visibilite sidebar par RBAC (8) - 6 personas seedes via la commande app:seed-e2e, miroir cote front dans frontend/tests/e2e/_fixtures/personas.ts - Page Objects (LoginPage, SidebarComponent) avec selecteurs stables par href + loginAs programmatique via cookie BEARER - Targets Makefile : seed-e2e, test-e2e, test-e2e-ui, install-e2e-deps - CLAUDE.md + README.md : workflow E2E + regle d'or "un E2E par bug prod uniquement" pour garder la suite maintenable dans la duree Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
33 lines
1.0 KiB
TypeScript
33 lines
1.0 KiB
TypeScript
import type { Locator, Page } from '@playwright/test'
|
|
|
|
/**
|
|
* Page Object du formulaire de login (/login).
|
|
*
|
|
* Selecteurs : on s'appuie sur les labels/roles accessibles (stable vs les
|
|
* changements de CSS/Tailwind). Le jour ou on veut un selecteur plus dur,
|
|
* on ajoute des `data-testid` sur login.vue.
|
|
*/
|
|
export class LoginPage {
|
|
readonly page: Page
|
|
readonly usernameInput: Locator
|
|
readonly passwordInput: Locator
|
|
readonly submitButton: Locator
|
|
|
|
constructor(page: Page) {
|
|
this.page = page
|
|
this.usernameInput = page.getByLabel("Nom d'utilisateur")
|
|
this.passwordInput = page.getByLabel('Mot de passe')
|
|
this.submitButton = page.getByRole('button', { name: 'Se connecter' })
|
|
}
|
|
|
|
async goto(): Promise<void> {
|
|
await this.page.goto('/login')
|
|
}
|
|
|
|
async fillAndSubmit(username: string, password: string): Promise<void> {
|
|
await this.usernameInput.fill(username)
|
|
await this.passwordInput.fill(password)
|
|
await this.submitButton.click()
|
|
}
|
|
}
|