homelab_automation/TESTS_FRONTEND.md

307 lines
8.7 KiB
Markdown

# Tests Frontend - Filtrage des Playbooks
## Guide de Test Manuel
### Prérequis
1. L'API backend doit être démarrée
2. L'interface web doit être accessible
3. Au moins un hôte dans `role_proxmox` et un hôte hors de ce groupe
---
## Test 1 : Filtrage pour Hôte Non-Proxmox
### Objectif
Vérifier que `backup-proxmox-config` n'apparaît PAS pour un hôte hors du groupe `role_proxmox`
### Étapes
1. Ouvrir l'interface web
2. Aller dans la section "Hôtes"
3. Localiser un hôte qui n'est PAS dans `role_proxmox` (ex: `raspi.4gb.home`)
4. Cliquer sur le bouton **"Playbook"** pour cet hôte
5. Observer la liste des playbooks
### Résultat Attendu
- ✅ Message affiché : "Seuls les playbooks compatibles avec cet hôte sont affichés (X disponibles)"
- ✅ La liste contient : `bootstrap-host`, `health-check`, `vm-upgrade`, `vm-reboot`, etc.
- ❌ La liste NE contient PAS : `backup-proxmox-config`
### Capture d'Écran
![Test 1 - Avant](docs/test1_avant.png) → Devrait montrer backup-proxmox-config
![Test 1 - Après](docs/test1_apres.png) → Ne devrait PAS montrer backup-proxmox-config
---
## Test 2 : Filtrage pour Hôte Proxmox
### Objectif
Vérifier que `backup-proxmox-config` APPARAÎT pour un hôte du groupe `role_proxmox`
### Étapes
1. Ouvrir l'interface web
2. Aller dans la section "Hôtes"
3. Localiser un hôte dans `role_proxmox` (ex: `ali2v.xeon.home`)
4. Cliquer sur le bouton **"Playbook"** pour cet hôte
5. Observer la liste des playbooks
### Résultat Attendu
- ✅ Message affiché : "Seuls les playbooks compatibles avec cet hôte sont affichés (X disponibles)"
- ✅ La liste contient : `backup-proxmox-config`
- ✅ La liste contient aussi : `bootstrap-host`, `health-check`, etc.
### Vérification Supplémentaire
- Le nombre de playbooks disponibles devrait être SUPÉRIEUR au Test 1
---
## Test 3 : Filtrage pour Groupe Non-Proxmox
### Objectif
Vérifier que `backup-proxmox-config` n'apparaît PAS pour un groupe autre que `role_proxmox`
### Étapes
1. Ouvrir l'interface web
2. Aller dans la section "Groupes"
3. Sélectionner un groupe autre que `role_proxmox` (ex: `env_lab`)
4. Cliquer sur le bouton **"Playbook"** pour ce groupe
5. Observer la liste des playbooks par catégorie
### Résultat Attendu
- ✅ Message affiché : "Seuls les playbooks compatibles avec ce groupe sont affichés (X disponibles)"
- ✅ Catégorie "BACKUP" : NE contient PAS `backup-proxmox-config`
- ✅ Catégorie "MAINTENANCE" : Contient les playbooks universels
- ✅ Catégorie "MONITORING" : Contient `health-check`
---
## Test 4 : Filtrage pour Groupe Proxmox
### Objectif
Vérifier que `backup-proxmox-config` APPARAÎT pour le groupe `role_proxmox`
### Étapes
1. Ouvrir l'interface web
2. Aller dans la section "Groupes"
3. Sélectionner le groupe `role_proxmox`
4. Cliquer sur le bouton **"Playbook"** pour ce groupe
5. Observer la liste des playbooks par catégorie
### Résultat Attendu
- ✅ Message affiché : "Seuls les playbooks compatibles avec ce groupe sont affichés (X disponibles)"
- ✅ Catégorie "BACKUP" : CONTIENT `backup-proxmox-config`
- ✅ Toutes les autres catégories : Contiennent les playbooks universels
---
## Test 5 : Compteur de Playbooks
### Objectif
Vérifier que le compteur affiche le bon nombre de playbooks
### Étapes
1. Pour chaque test ci-dessus, noter le nombre affiché dans le message
2. Compter manuellement les playbooks dans la liste
3. Comparer les deux nombres
### Résultat Attendu
- ✅ Le nombre affiché correspond au nombre de playbooks dans la liste
- ✅ Le pluriel est correct ("1 disponible" vs "X disponibles")
---
## Test 6 : Tentative d'Exécution Incompatible (Protection Backend)
### Objectif
Vérifier que même si on contourne le frontend, le backend bloque l'exécution
### Étapes
1. Ouvrir la console développeur du navigateur (F12)
2. Exécuter cette commande JavaScript :
```javascript
fetch('/api/ansible/execute', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'votre-api-key'
},
body: JSON.stringify({
playbook: 'backup-proxmox-config.yml',
target: 'raspi.4gb.home'
})
})
.then(r => r.json())
.then(console.log)
```
### Résultat Attendu
- ✅ Réponse HTTP 400 (Bad Request)
- ✅ Message d'erreur :
```json
{
"detail": "Le playbook 'backup-proxmox-config.yml' (hosts: role_proxmox) n'est pas compatible avec la cible 'raspi.4gb.home'. Ce playbook ne peut être exécuté que sur: role_proxmox"
}
```
---
## Test 7 : Vérification API Directe
### Objectif
Vérifier que l'API retourne bien les playbooks filtrés
### Étapes
1. Ouvrir un terminal
2. Exécuter ces commandes curl :
```bash
# Test 1 : Playbooks pour raspi.4gb.home
curl -H "X-API-Key: votre-key" \
"http://localhost:8000/api/ansible/playbooks?target=raspi.4gb.home"
# Test 2 : Playbooks pour ali2v.xeon.home
curl -H "X-API-Key: votre-key" \
"http://localhost:8000/api/ansible/playbooks?target=ali2v.xeon.home"
# Test 3 : Playbooks pour role_proxmox
curl -H "X-API-Key: votre-key" \
"http://localhost:8000/api/ansible/playbooks?target=role_proxmox"
# Test 4 : Playbooks pour env_lab
curl -H "X-API-Key: votre-key" \
"http://localhost:8000/api/ansible/playbooks?target=env_lab"
```
### Résultat Attendu
**Test 1 (raspi.4gb.home) :**
```json
{
"playbooks": [
{"name": "bootstrap-host", "hosts": "all", ...},
{"name": "health-check", "hosts": "all", ...},
{"name": "vm-upgrade", "hosts": "all", ...}
// PAS de backup-proxmox-config
],
"filter": "raspi.4gb.home"
}
```
**Test 2 (ali2v.xeon.home) :**
```json
{
"playbooks": [
{"name": "backup-proxmox-config", "hosts": "role_proxmox", ...},
{"name": "bootstrap-host", "hosts": "all", ...},
{"name": "health-check", "hosts": "all", ...}
// backup-proxmox-config EST présent
],
"filter": "ali2v.xeon.home"
}
```
**Test 3 (role_proxmox) :**
```json
{
"playbooks": [
{"name": "backup-proxmox-config", "hosts": "role_proxmox", ...},
// + tous les playbooks avec hosts: all
],
"filter": "role_proxmox"
}
```
**Test 4 (env_lab) :**
```json
{
"playbooks": [
// Seulement les playbooks avec hosts: all
// PAS de backup-proxmox-config
],
"filter": "env_lab"
}
```
---
## Test 8 : Gestion d'Erreur
### Objectif
Vérifier que l'interface gère correctement les erreurs
### Étapes
1. Arrêter temporairement l'API backend
2. Dans l'interface, cliquer sur "Playbook" pour un hôte
3. Observer le comportement
### Résultat Attendu
- ✅ Message d'erreur affiché : "Erreur chargement playbooks: [message]"
- ✅ La modale ne s'ouvre pas ou affiche un message d'erreur
- ✅ Pas de crash de l'interface
---
## Checklist Complète
### Interface Utilisateur
- [ ] Message informatif affiché dans la modale (hôte)
- [ ] Message informatif affiché dans la modale (groupe)
- [ ] Compteur de playbooks correct
- [ ] Pluriel correct ("disponible" vs "disponibles")
- [ ] Icônes affichées correctement
### Filtrage Fonctionnel
- [ ] Hôte non-Proxmox : backup-proxmox-config absent
- [ ] Hôte Proxmox : backup-proxmox-config présent
- [ ] Groupe non-Proxmox : backup-proxmox-config absent
- [ ] Groupe Proxmox : backup-proxmox-config présent
- [ ] Groupe "all" : tous les playbooks présents
### Protection Backend
- [ ] Exécution incompatible bloquée (HTTP 400)
- [ ] Message d'erreur explicite
- [ ] API retourne les bons playbooks filtrés
### Robustesse
- [ ] Gestion d'erreur si API indisponible
- [ ] Encodage URL correct pour noms spéciaux
- [ ] Pas de crash si aucun playbook compatible
---
## Résultats Attendus Globaux
| Cible | backup-proxmox-config | Autres Playbooks |
|-------|----------------------|------------------|
| `raspi.4gb.home` | ❌ Absent | ✅ Présents |
| `ali2v.xeon.home` | ✅ Présent | ✅ Présents |
| `role_proxmox` | ✅ Présent | ✅ Présents |
| `env_lab` | ❌ Absent | ✅ Présents |
| `all` | ❌ Absent | ✅ Présents |
---
## Rapport de Test
### Date : _____________
### Testeur : _____________
| Test | Statut | Notes |
|------|--------|-------|
| Test 1 : Hôte Non-Proxmox | ⬜ Pass ⬜ Fail | |
| Test 2 : Hôte Proxmox | ⬜ Pass ⬜ Fail | |
| Test 3 : Groupe Non-Proxmox | ⬜ Pass ⬜ Fail | |
| Test 4 : Groupe Proxmox | ⬜ Pass ⬜ Fail | |
| Test 5 : Compteur | ⬜ Pass ⬜ Fail | |
| Test 6 : Protection Backend | ⬜ Pass ⬜ Fail | |
| Test 7 : API Directe | ⬜ Pass ⬜ Fail | |
| Test 8 : Gestion d'Erreur | ⬜ Pass ⬜ Fail | |
### Conclusion
⬜ Tous les tests passent - Implémentation validée
⬜ Certains tests échouent - Corrections nécessaires
### Problèmes Rencontrés
_____________________________________________
_____________________________________________
_____________________________________________