test(e2e) : initialise la suite Playwright (login + sidebar RBAC)
- 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>
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
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()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user