feat(core) : footer sidebar — compte connecté + déconnexion inline + version
Déconnexion déplacée du menu vers le footer (compte connecté au survol + version). useLogout() appelle clearSession() (reset des stores singletons via onAuthSessionCleared) puis redirige vers /login, sans page /logout intermédiaire.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { expect, test } from '@playwright/test'
|
||||
import { LoginPage } from '../helpers/pages/LoginPage'
|
||||
import { SidebarComponent } from '../helpers/pages/SidebarComponent'
|
||||
import { getPersona } from '../_fixtures/personas'
|
||||
|
||||
/**
|
||||
@@ -53,8 +54,12 @@ test.describe('Login', () => {
|
||||
await loginPage.fillAndSubmit(superAdmin.username, superAdmin.password)
|
||||
await page.waitForURL('/')
|
||||
|
||||
// 2. Navigation vers /logout (il y a un lien "Deconnexion" dans la sidebar)
|
||||
await page.goto('/logout')
|
||||
// 2. Deconnexion via le footer de la sidebar : survol du bloc compte
|
||||
// (revele le bouton) puis clic. Le handler appelle useLogout() qui POST
|
||||
// /api/logout, reset les stores, et redirige vers /login (sans page /logout).
|
||||
const sidebar = new SidebarComponent(page)
|
||||
await sidebar.accountBlock().hover()
|
||||
await sidebar.logoutButton().click()
|
||||
await page.waitForURL(/\/login$/)
|
||||
|
||||
// 3. Le cookie BEARER doit avoir ete supprime par le firewall de logout
|
||||
|
||||
@@ -27,7 +27,21 @@ export class SidebarComponent {
|
||||
return this.page.locator('a[href="/"]').first()
|
||||
}
|
||||
|
||||
logoutLink(): Locator {
|
||||
return this.page.locator('a[href="/logout"]')
|
||||
/**
|
||||
* Bloc « compte connecte » du footer de la sidebar. Cible de survol qui
|
||||
* revele le bouton de deconnexion (la deconnexion n'est plus un item de nav
|
||||
* `/logout` mais un lien du footer, cf. default.vue + useLogout).
|
||||
*/
|
||||
accountBlock(): Locator {
|
||||
return this.page.locator('[data-test="sidebar-account"]')
|
||||
}
|
||||
|
||||
/**
|
||||
* Bouton de deconnexion du footer (revele au survol du bloc compte en mode
|
||||
* deplie, ou directement la pastille en mode replie). Selecteur par
|
||||
* `data-test` : stable au renommage/retraduction du label.
|
||||
*/
|
||||
logoutButton(): Locator {
|
||||
return this.page.locator('[data-test="sidebar-logout"]')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,7 +72,10 @@ test.describe('Sidebar visibility', () => {
|
||||
// Meme strategie que ci-dessus : ancrage semantique plutot que
|
||||
// `networkidle` pour eviter les faux timeouts en CI.
|
||||
await expect(sidebar.accountDashboardLink()).toBeVisible({ timeout: 10000 })
|
||||
await expect(sidebar.logoutLink()).toBeVisible()
|
||||
// La deconnexion vit dans le footer (rendu sans condition de permission).
|
||||
// Le bouton est revele au survol du bloc compte.
|
||||
await sidebar.accountBlock().hover()
|
||||
await expect(sidebar.logoutButton()).toBeVisible()
|
||||
})
|
||||
|
||||
test('la liste des personas dans personas.ts couvre toutes les combinaisons admin attendues', () => {
|
||||
|
||||
Reference in New Issue
Block a user