3ce40a707f
Auto Tag Develop / tag (push) Successful in 7s
## Contexte Ticket Lesstime : [#49](https://lesstime.malio.fr/tasks/460) — premier ticket front du M0 (Gestion des catégories). Suit la chaîne back ERP-43..48 mergée sur develop. ## Contenu first draft (Claude Code) - Page Nuxt `/admin/categories` (`MalioDataTable` + bouton `+ Ajouter`) - Composant `<CategoryDrawer>` : modes création / consultation / édition, transition auto view → edit à la première modification, validation client miroir RG-1.02 (name requis) / RG-1.04 (longueur 2-120) / RG-1.05 (type requis), mapping erreurs 409 (doublon) et 422 (violations) - Composant `<CategoryDeleteModal>` : confirmation suppression (soft delete RG-1.12) - Types TS `Category`, `CategoryType`, `User` - i18n `admin.categories.*` ajouté dans `fr.json` - Fix latent en passant : ajout de `'categories'` à `AdminLinkSlug` du Page Object e2e (oublié lors d'ERP-47 quand l'item sidebar a été ajouté) ## Décisions marquantes - Logique `fetch` inline dans `categories.vue` (sera extraite en composables `useCategoriesAdmin` + `useCategoryForm` au ticket ERP-50 / 0.8) - Drawer dans composant séparé pour réutilisabilité - Aucun état de tableau persisté dans l'URL (règle ABSOLUE n°6) - Tous les composants formulaires sont `Malio*` (`MalioDataTable`, `MalioInputText`, `MalioSelect`, `MalioButton`, `MalioDrawer`) ## Polish à venir (Tristan) Tristan testera en navigateur et peaufinera : UX, classes Tailwind, animations, icônes, wording de toasts. Les commits de polish suivront sur la même branche. ## Tests - `npx nuxi typecheck` : net 0 nouvelle erreur (mêmes erreurs pré-existantes que sur `develop`, infrastructure auto-import) + 1 latente corrigée (AdminLinkSlug) - `make nuxt-test` : 43/43 passent (0 régression) - Tests manuels navigateur : voir cahier de test du ticket Lesstime #49 ## Note pre-commit hook Le hook a remonté un échec PHPUnit pré-existant sur `develop` (`CategoryDeleteTest::testPatchOnSoftDeletedReturns404` → 401 au lieu de 404, JWT non initialisé en test runner). Aucun PHP touché dans cette MR. Commit avec `--no-verify` autorisé par Tristan. ## Reviewer suggéré Matthieu (back ↔ front + permissions). --------- Co-authored-by: Matthieu <mtholot19@gmail.com> Reviewed-on: #22 Co-authored-by: tristan <tristan@yuno.malio.fr> Co-committed-by: tristan <tristan@yuno.malio.fr>
34 lines
979 B
TypeScript
34 lines
979 B
TypeScript
import type { Locator, Page } from '@playwright/test'
|
|
|
|
export type AdminLinkSlug = 'users' | 'roles' | 'sites' | 'categories' | '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"]')
|
|
}
|
|
}
|