7.0 KiB
Corrections Bookmarks - Tests Failed
Tests échoués identifiés
D'après le fichier BOOKMARKS_TEST_PLAN.md
, 3 tests ont échoué:
- Test 3: Drag vers la racine (zone "Drop here to move to root") - FAIL
- Test 4: Drag entre groupes - FAIL
- Test 5: Détection de cycles - FAIL
Corrections appliquées
1. Correction de la logique de moveNode
Problème: Lors du réordonnancement dans le même conteneur, l'index n'était pas ajusté correctement après la suppression du node.
Solution: Ajout d'une logique d'ajustement d'index dans bookmarks.utils.ts
:
// If moving within the same parent, adjust index
let adjustedIndex = newIndex;
if (oldParentCtime === newParentCtime && oldIndex < newIndex) {
// When removing from earlier position, indices shift down
adjustedIndex = newIndex - 1;
}
Fichier modifié: src/core/bookmarks/bookmarks.utils.ts
2. Ajout de logs de debug
Problème: Difficile de diagnostiquer les problèmes de drag & drop sans visibilité.
Solution: Ajout de logs console détaillés dans:
BookmarksPanelComponent.handleDrop()
BookmarkItemComponent.onChildDrop()
Logs affichés:
{
itemCtime: number,
fromParent: number | null,
toParent: number | null,
newIndex: number,
sameContainer: boolean
}
Fichiers modifiés:
src/components/bookmarks-panel/bookmarks-panel.component.ts
src/components/bookmark-item/bookmark-item.component.ts
3. Correction du fichier JSON invalide
Problème: Le fichier vault/.obsidian/bookmarks.json
contenait un item invalide:
{
"type": "file",
"ctime": 1759253065812,
"path": "groupeC" // ❌ Pas d'extension
}
Solution: Ajout de l'extension .md
:
{
"type": "file",
"ctime": 1759253065812,
"path": "groupeC.md" // ✅ Extension ajoutée
}
Fichier modifié: vault/.obsidian/bookmarks.json
Instructions de test
Rebuild et relance
# 1. Rebuild l'application
npm run build
# 2. Relancer le serveur
node server/index.mjs
# 3. Ouvrir http://localhost:3000
# 4. Ouvrir DevTools (F12) pour voir les logs
Tests à refaire
Test 3: Drag vers la racine
- Créer un groupe "Test Group"
- Ajouter un bookmark dans ce groupe
- Ouvrir la console DevTools
- Drag le bookmark vers la zone "Drop here to move to root"
- Observer les logs dans la console:
Drop event: { itemCtime: ..., fromParent: <ctime du groupe>, toParent: null, newIndex: 0, sameContainer: false }
- Vérifier que le bookmark est maintenant à la racine
Résultat attendu: ✅ Le bookmark se déplace à la racine
Test 4: Drag entre groupes
- Créer 2 groupes: "Groupe A" et "Groupe B"
- Ajouter un bookmark dans Groupe A
- Ouvrir la console DevTools
- Drag le bookmark de Groupe A vers Groupe B
- Observer les logs:
Child drop event: { itemCtime: ..., fromParent: <ctime de A>, toParent: <ctime de B>, toParentTitle: "Groupe B", newIndex: 0, sameContainer: false }
- Vérifier que le bookmark est maintenant dans Groupe B
Résultat attendu: ✅ Le bookmark se déplace de A vers B
Test 5: Détection de cycles
- Créer Groupe A
- Créer Groupe B dans Groupe A
- Ouvrir la console DevTools
- Tenter de drag Groupe A dans Groupe B
- Observer le warning dans la console:
Cannot move a parent into its own descendant
- Vérifier que la structure reste inchangée
Résultat attendu: ✅ Le drop est bloqué avec un warning
Diagnostics supplémentaires
Si Test 3 échoue encore
Vérifier:
- La zone "Drop here to move to root" a-t-elle l'attribut
cdkDropList
? - L'ID de la drop list est-il bien
"root"
? - Le handler
handleRootDrop()
est-il bien appelé ?
Debug:
// Dans bookmarks-panel.component.ts
handleRootDrop(event: CdkDragDrop<BookmarkNode[]>): void {
console.log('ROOT DROP TRIGGERED'); // Ajoutez ce log
this.isDraggingOverRoot.set(false);
this.handleDrop(event, null);
}
Si Test 4 échoue encore
Vérifier:
- Les groupes ont-ils des IDs de drop list uniques (
group-${ctime}
) ? - Les drop lists sont-elles connectées (
cdkDropListConnectedTo
) ? - Le handler
onChildDrop()
est-il bien appelé ?
Debug:
// Dans bookmark-item.component.ts
get dropListId(): string {
const id = `group-${this.bookmark.ctime}`;
console.log('Drop list ID:', id); // Ajoutez ce log
return id;
}
Si Test 5 échoue encore
Vérifier:
- La méthode
isDescendantOf()
fonctionne-t-elle correctement ? - Le warning apparaît-il dans la console ?
- Le document reste-t-il inchangé après la tentative ?
Debug:
// Dans bookmark-item.component.ts
private isDescendantOf(ancestorCtime: number): boolean {
console.log('Checking if', ancestorCtime, 'is ancestor of', this.bookmark.ctime);
const result = /* ... logique existante ... */;
console.log('Result:', result);
return result;
}
Problèmes connus résiduels
1. Titre affiché avec path complet
Observation: Dans votre JSON, ligne 48:
{
"type": "file",
"ctime": 1759252487676,
"path": "folder/test2.md",
"title": "folder/test2.md" // ❌ Path complet dans title
}
Cause: Le title a été explicitement défini avec le path complet lors de la création.
Solution:
- Option 1: Ne pas remplir le champ "Title" lors de l'ajout → basename automatique
- Option 2: Supprimer le champ
title
du JSON pour forcer le fallback
Correction manuelle:
{
"type": "file",
"ctime": 1759252487676,
"path": "folder/test2.md"
// Pas de title → affichera "test2.md"
}
2. Groupes avec caractères spéciaux
Observation: Ligne 41:
{
"type": "group",
"ctime": 1759253098054,
"title": "groupeA\\groupeD" // Backslash dans le titre
}
Impact: Aucun problème technique, mais peut prêter à confusion (ressemble à un path).
Recommandation: Éviter les caractères \
et /
dans les titres de groupes.
Checklist de validation
Après avoir appliqué les corrections:
- Rebuild effectué (
npm run build
) - Serveur relancé (
node server/index.mjs
) - DevTools ouvert (F12)
- Test 3 refait avec logs observés
- Test 4 refait avec logs observés
- Test 5 refait avec warning observé
- Fichier JSON vérifié (pas d'items invalides)
- Tous les tests passent ✅
Prochaines étapes
Si les tests passent:
- Retirer les logs de debug (ou les mettre en mode verbose)
- Continuer avec les tests restants (6-15)
- Documenter les résultats finaux
Si les tests échouent encore:
- Copier les logs de la console
- Vérifier les attributs CDK dans le HTML
- Tester avec un JSON minimal (1 groupe, 1 bookmark)
- Signaler les logs et comportements observés
Date: 2025-01-30
Version: 2.0.1
Statut: Corrections appliquées, tests en attente