306 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			306 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# Corrections Bookmarks - Tests Failed
 | 
						|
 | 
						|
## Tests échoués identifiés
 | 
						|
 | 
						|
D'après le fichier `BOOKMARKS_TEST_PLAN.md`, 3 tests ont échoué:
 | 
						|
 | 
						|
1. **Test 3**: Drag vers la racine (zone "Drop here to move to root") - FAIL
 | 
						|
2. **Test 4**: Drag entre groupes - FAIL  
 | 
						|
3. **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`:
 | 
						|
 | 
						|
```typescript
 | 
						|
// 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**:
 | 
						|
```javascript
 | 
						|
{
 | 
						|
  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:
 | 
						|
 | 
						|
```json
 | 
						|
{
 | 
						|
  "type": "file",
 | 
						|
  "ctime": 1759253065812,
 | 
						|
  "path": "groupeC"  // ❌ Pas d'extension
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
**Solution**: Ajout de l'extension `.md`:
 | 
						|
 | 
						|
```json
 | 
						|
{
 | 
						|
  "type": "file",
 | 
						|
  "ctime": 1759253065812,
 | 
						|
  "path": "groupeC.md"  // ✅ Extension ajoutée
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
**Fichier modifié**: `vault/.obsidian/bookmarks.json`
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
## Instructions de test
 | 
						|
 | 
						|
### Rebuild et relance
 | 
						|
 | 
						|
```bash
 | 
						|
# 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
 | 
						|
 | 
						|
1. Créer un groupe "Test Group"
 | 
						|
2. Ajouter un bookmark dans ce groupe
 | 
						|
3. **Ouvrir la console DevTools**
 | 
						|
4. Drag le bookmark vers la zone "Drop here to move to root"
 | 
						|
5. **Observer les logs dans la console**:
 | 
						|
   ```
 | 
						|
   Drop event: {
 | 
						|
     itemCtime: ...,
 | 
						|
     fromParent: <ctime du groupe>,
 | 
						|
     toParent: null,
 | 
						|
     newIndex: 0,
 | 
						|
     sameContainer: false
 | 
						|
   }
 | 
						|
   ```
 | 
						|
6. Vérifier que le bookmark est maintenant à la racine
 | 
						|
 | 
						|
**Résultat attendu**: ✅ Le bookmark se déplace à la racine
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
#### Test 4: Drag entre groupes
 | 
						|
 | 
						|
1. Créer 2 groupes: "Groupe A" et "Groupe B"
 | 
						|
2. Ajouter un bookmark dans Groupe A
 | 
						|
3. **Ouvrir la console DevTools**
 | 
						|
4. Drag le bookmark de Groupe A vers Groupe B
 | 
						|
5. **Observer les logs**:
 | 
						|
   ```
 | 
						|
   Child drop event: {
 | 
						|
     itemCtime: ...,
 | 
						|
     fromParent: <ctime de A>,
 | 
						|
     toParent: <ctime de B>,
 | 
						|
     toParentTitle: "Groupe B",
 | 
						|
     newIndex: 0,
 | 
						|
     sameContainer: false
 | 
						|
   }
 | 
						|
   ```
 | 
						|
6. 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
 | 
						|
 | 
						|
1. Créer Groupe A
 | 
						|
2. Créer Groupe B **dans** Groupe A
 | 
						|
3. **Ouvrir la console DevTools**
 | 
						|
4. Tenter de drag Groupe A dans Groupe B
 | 
						|
5. **Observer le warning dans la console**:
 | 
						|
   ```
 | 
						|
   Cannot move a parent into its own descendant
 | 
						|
   ```
 | 
						|
6. 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**:
 | 
						|
1. La zone "Drop here to move to root" a-t-elle l'attribut `cdkDropList` ?
 | 
						|
2. L'ID de la drop list est-il bien `"root"` ?
 | 
						|
3. Le handler `handleRootDrop()` est-il bien appelé ?
 | 
						|
 | 
						|
**Debug**:
 | 
						|
```typescript
 | 
						|
// 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**:
 | 
						|
1. Les groupes ont-ils des IDs de drop list uniques (`group-${ctime}`) ?
 | 
						|
2. Les drop lists sont-elles connectées (`cdkDropListConnectedTo`) ?
 | 
						|
3. Le handler `onChildDrop()` est-il bien appelé ?
 | 
						|
 | 
						|
**Debug**:
 | 
						|
```typescript
 | 
						|
// 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**:
 | 
						|
1. La méthode `isDescendantOf()` fonctionne-t-elle correctement ?
 | 
						|
2. Le warning apparaît-il dans la console ?
 | 
						|
3. Le document reste-t-il inchangé après la tentative ?
 | 
						|
 | 
						|
**Debug**:
 | 
						|
```typescript
 | 
						|
// 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:
 | 
						|
```json
 | 
						|
{
 | 
						|
  "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**:
 | 
						|
```json
 | 
						|
{
 | 
						|
  "type": "file",
 | 
						|
  "ctime": 1759252487676,
 | 
						|
  "path": "folder/test2.md"
 | 
						|
  // Pas de title → affichera "test2.md"
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
### 2. Groupes avec caractères spéciaux
 | 
						|
 | 
						|
**Observation**: Ligne 41:
 | 
						|
```json
 | 
						|
{
 | 
						|
  "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:
 | 
						|
1. Retirer les logs de debug (ou les mettre en mode verbose)
 | 
						|
2. Continuer avec les tests restants (6-15)
 | 
						|
3. Documenter les résultats finaux
 | 
						|
 | 
						|
Si les tests échouent encore:
 | 
						|
1. Copier les logs de la console
 | 
						|
2. Vérifier les attributs CDK dans le HTML
 | 
						|
3. Tester avec un JSON minimal (1 groupe, 1 bookmark)
 | 
						|
4. Signaler les logs et comportements observés
 | 
						|
 | 
						|
---
 | 
						|
 | 
						|
**Date**: 2025-01-30  
 | 
						|
**Version**: 2.0.1  
 | 
						|
**Statut**: Corrections appliquées, tests en attente
 |