- 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>
34 lines
964 B
TypeScript
34 lines
964 B
TypeScript
import type { Locator, Page } from '@playwright/test'
|
|
|
|
export type AdminLinkSlug = 'users' | 'roles' | 'sites' | 'audit-log'
|
|
|
|
/**
|
|
* Page Object de la sidebar (MalioSidebar), scope sur les items "admin".
|
|
*
|
|
* Strategie selecteur : `a[href=...]` plutot que le texte i18n. Le slug de
|
|
* route ne change pas quand on retraduit ou renomme une entree — c'est le
|
|
* selecteur le plus stable pour cette suite.
|
|
*
|
|
* Si un jour la sidebar change et les slugs bougent, on met a jour CE
|
|
* fichier uniquement ; les specs continuent de passer.
|
|
*/
|
|
export class SidebarComponent {
|
|
readonly page: Page
|
|
|
|
constructor(page: Page) {
|
|
this.page = page
|
|
}
|
|
|
|
adminLink(slug: AdminLinkSlug): Locator {
|
|
return this.page.locator(`a[href="/admin/${slug}"]`)
|
|
}
|
|
|
|
accountDashboardLink(): Locator {
|
|
return this.page.locator('a[href="/"]').first()
|
|
}
|
|
|
|
logoutLink(): Locator {
|
|
return this.page.locator('a[href="/logout"]')
|
|
}
|
|
}
|