# TimeTrack Pro - Checklist de Tests Manuels Ce document decrit les tests manuels a effectuer pour valider le bon fonctionnement de TimeTrack Pro. --- ## 1. Tests Base de Donnees (BDD) ### 1.1 Table tbl_Clients | Test | Action | Resultat Attendu | OK | |------|--------|------------------|-----| | CREATE | Ajouter un nouveau client | Enregistrement cree avec ID auto-incremente | [ ] | | READ | Lire la liste des clients | 4+ clients affiches | [ ] | | UPDATE | Modifier l'email d'un client | Email mis a jour | [ ] | | DELETE | Supprimer un client sans projets | Client supprime | [ ] | | FK CHECK | Supprimer un client avec projets | Erreur ou cascade selon config | [ ] | **Commandes MCP pour tester:** ```python # CREATE run_access_query(file_path, sql="INSERT INTO tbl_Clients (Nom, Email) VALUES ('Test Client', 'test@example.com')") # READ get_worksheet_data(file_path, "tbl_Clients") # UPDATE run_access_query(file_path, sql="UPDATE tbl_Clients SET Email = 'nouveau@example.com' WHERE Nom = 'Test Client'") # DELETE run_access_query(file_path, sql="DELETE FROM tbl_Clients WHERE Nom = 'Test Client'") ``` ### 1.2 Table tbl_Projets | Test | Action | Resultat Attendu | OK | |------|--------|------------------|-----| | CREATE | Ajouter un projet lie a un client | Projet cree avec FK valide | [ ] | | READ | Lire les projets d'un client | Projets filtres correctement | [ ] | | UPDATE | Modifier le taux horaire | Taux mis a jour | [ ] | | DELETE | Supprimer un projet sans temps | Projet supprime | [ ] | | FK CHECK | Ajouter projet avec ClientID inexistant | Erreur attendue | [ ] | **Commandes MCP pour tester:** ```python # CREATE run_access_query(file_path, sql="INSERT INTO tbl_Projets (ClientID, Nom, TauxHoraire) VALUES (1, 'Projet Test', 75)") # READ avec filtre get_worksheet_data(file_path, "tbl_Projets", where_clause="ClientID = 1") # UPDATE run_access_query(file_path, sql="UPDATE tbl_Projets SET TauxHoraire = 85 WHERE Nom = 'Projet Test'") # DELETE run_access_query(file_path, sql="DELETE FROM tbl_Projets WHERE Nom = 'Projet Test'") ``` ### 1.3 Table tbl_Temps | Test | Action | Resultat Attendu | OK | |------|--------|------------------|-----| | CREATE | Ajouter une entree de temps | Entree creee | [ ] | | READ | Lire les entrees par date | Filtrage correct | [ ] | | UPDATE | Modifier la duree | Duree mise a jour | [ ] | | DELETE | Supprimer une entree | Entree supprimee | [ ] | | VALIDATION | Ajouter duree negative | Erreur ou valeur positive | [ ] | **Commandes MCP pour tester:** ```python # CREATE run_access_query(file_path, sql="INSERT INTO tbl_Temps (ProjetID, Date, Duree, Description) VALUES (1, #2025-12-30#, 2.5, 'Test entree')") # READ avec filtre date get_worksheet_data(file_path, "tbl_Temps", where_clause="Date >= #2025-12-01#") # UPDATE run_access_query(file_path, sql="UPDATE tbl_Temps SET Duree = 3.0 WHERE Description = 'Test entree'") # DELETE run_access_query(file_path, sql="DELETE FROM tbl_Temps WHERE Description = 'Test entree'") ``` --- ## 2. Tests Modules VBA ### 2.1 mod_Config | Test | Verification | OK | |------|-------------|-----| | APP_NAME | Constante definie = "TimeTrack Pro" | [ ] | | APP_VERSION | Constante definie = "0.1.0" | [ ] | | DEFAULT_TAUX | Constante definie = 50 | [ ] | ### 2.2 mod_Utils | Test | Fonction | Resultat Attendu | OK | |------|----------|------------------|-----| | Format date | FormatDateFR(#01/15/2025#) | "15/01/2025" | [ ] | | Format monnaie | FormatMonnaie(1234.56) | "1 234,56 EUR" | [ ] | | Validation email | IsValidEmail("test@test.com") | True | [ ] | | Email invalide | IsValidEmail("invalid") | False | [ ] | ### 2.3 mod_Calculs | Test | Fonction | Resultat Attendu | OK | |------|----------|------------------|-----| | Total heures projet | GetTotalHeuresByProjet(1) | Nombre > 0 | [ ] | | Total heures client | GetTotalHeuresByClient(1) | Nombre > 0 | [ ] | | Montant projet | GetMontantByProjet(1) | Heures * TauxHoraire | [ ] | | Montant client | GetMontantByClient(1) | Somme projets | [ ] | ### 2.4 mod_DataAccess | Test | Fonction | Resultat Attendu | OK | |------|----------|------------------|-----| | Get client | GetClientByID(1) | Recordset valide | [ ] | | Get projet | GetProjetByID(1) | Recordset valide | [ ] | | List clients | GetAllClients() | Recordset avec 4+ items | [ ] | | List projets actifs | GetProjetsActifs() | Recordset filtre | [ ] | ### 2.5 mod_Navigation | Test | Fonction | Resultat Attendu | OK | |------|----------|------------------|-----| | Ouvrir accueil | OpenFormAccueil() | Formulaire ouvert | [ ] | | Ouvrir clients | OpenFormClients() | Formulaire ouvert | [ ] | | Fermer tout | CloseAllForms() | Tous fermes | [ ] | ### 2.6 mod_Export | Test | Fonction | Resultat Attendu | OK | |------|----------|------------------|-----| | Export Excel | ExportToExcel("tbl_Clients", path) | Fichier .xlsx cree | [ ] | | Export PDF | ExportToPDF("rpt_Recap", path) | Fichier .pdf cree | [ ] | --- ## 3. Tests d'Integration ### 3.1 Requetes Agregees | Test | Requete | Resultat Attendu | OK | |------|---------|------------------|-----| | Total global heures | SELECT SUM(Duree) FROM tbl_Temps | 58 heures | [ ] | | Total par client | qry_TotalByClient | Groupement correct | [ ] | | Total par projet | qry_TotalByProjet | Groupement correct | [ ] | | Montant total | Heures * Taux | 4732.50 EUR | [ ] | **Commandes MCP pour tester:** ```python # Total heures run_access_query(file_path, sql="SELECT SUM(Duree) AS TotalHeures FROM tbl_Temps") # Total par client run_access_query(file_path, sql=""" SELECT c.Nom, SUM(t.Duree) AS Heures, SUM(t.Duree * p.TauxHoraire) AS Montant FROM (tbl_Clients c INNER JOIN tbl_Projets p ON c.ClientID = p.ClientID) INNER JOIN tbl_Temps t ON p.ProjetID = t.ProjetID GROUP BY c.Nom """) # Total par projet run_access_query(file_path, sql=""" SELECT p.Nom, SUM(t.Duree) AS Heures, p.TauxHoraire, SUM(t.Duree * p.TauxHoraire) AS Montant FROM tbl_Projets p INNER JOIN tbl_Temps t ON p.ProjetID = t.ProjetID GROUP BY p.Nom, p.TauxHoraire """) ``` ### 3.2 Coherence des Donnees | Test | Verification | OK | |------|-------------|-----| | FK Integrite | Tous les ProjetID dans tbl_Temps existent dans tbl_Projets | [ ] | | FK Integrite | Tous les ClientID dans tbl_Projets existent dans tbl_Clients | [ ] | | Dates valides | Toutes les dates sont dans le passe ou aujourd'hui | [ ] | | Durees positives | Toutes les durees > 0 | [ ] | **Commandes MCP pour valider:** ```python # Verifier FK projets orphelins run_access_query(file_path, sql=""" SELECT t.* FROM tbl_Temps t LEFT JOIN tbl_Projets p ON t.ProjetID = p.ProjetID WHERE p.ProjetID IS NULL """) # Resultat attendu: 0 lignes # Verifier FK clients orphelins run_access_query(file_path, sql=""" SELECT p.* FROM tbl_Projets p LEFT JOIN tbl_Clients c ON p.ClientID = c.ClientID WHERE c.ClientID IS NULL """) # Resultat attendu: 0 lignes # Verifier durees invalides run_access_query(file_path, sql="SELECT * FROM tbl_Temps WHERE Duree <= 0") # Resultat attendu: 0 lignes ``` --- ## 4. Tests Formulaires (Apres Phase 5) ### 4.1 frm_Accueil | Test | Action | Resultat Attendu | OK | |------|--------|------------------|-----| | Affichage stats | Ouvrir formulaire | Stats affichees (clients, projets, heures) | [ ] | | Navigation clients | Clic bouton Clients | Ouvre frm_Clients | [ ] | | Navigation projets | Clic bouton Projets | Ouvre frm_Projets | [ ] | | Navigation saisie | Clic bouton Saisie | Ouvre frm_SaisieTemps | [ ] | ### 4.2 frm_Clients | Test | Action | Resultat Attendu | OK | |------|--------|------------------|-----| | Liste clients | Ouvrir formulaire | Tous clients affiches | [ ] | | Ajout client | Remplir + Enregistrer | Client ajoute | [ ] | | Edition client | Modifier + Enregistrer | Client modifie | [ ] | | Suppression | Supprimer client | Client supprime (si pas de projets) | [ ] | ### 4.3 frm_Projets | Test | Action | Resultat Attendu | OK | |------|--------|------------------|-----| | Liste projets | Ouvrir formulaire | Tous projets affiches | [ ] | | Filtre client | Selectionner client | Projets filtres | [ ] | | Ajout projet | Remplir + Enregistrer | Projet ajoute | [ ] | | Edition projet | Modifier taux | Projet modifie | [ ] | ### 4.4 frm_SaisieTemps | Test | Action | Resultat Attendu | OK | |------|--------|------------------|-----| | Saisie rapide | Projet + Date + Duree + Save | Entree creee en < 30s | [ ] | | Date par defaut | Ouvrir formulaire | Date = Aujourd'hui | [ ] | | Validation duree | Entrer duree negative | Erreur affichee | [ ] | ### 4.5 frm_Historique | Test | Action | Resultat Attendu | OK | |------|--------|------------------|-----| | Liste entrees | Ouvrir formulaire | Toutes entrees affichees | [ ] | | Filtre date | Selectionner periode | Entrees filtrees | [ ] | | Filtre client | Selectionner client | Entrees filtrees | [ ] | | Export | Clic Export Excel | Fichier genere | [ ] | --- ## 5. Performance | Test | Critere | Seuil | OK | |------|---------|-------|-----| | Ouverture BDD | Temps d'ouverture | < 3 secondes | [ ] | | Requete agregee | Temps d'execution | < 1 seconde | [ ] | | Saisie temps | Temps total operation | < 30 secondes | [ ] | | Export Excel | Temps de generation | < 5 secondes | [ ] | --- ## 6. Validation Finale | Critere | Verification | OK | |---------|-------------|-----| | Toutes tables creees | 3 tables presentes | [ ] | | Tous modules injectes | 6 modules presents | [ ] | | Donnees de demo | 4 clients, 6 projets, 58h | [ ] | | Montant total | 4732.50 EUR | [ ] | | Aucune erreur BDD | Pas d'erreurs SQL | [ ] | | Documentation complete | README, PLAN, CHANGELOG | [ ] | --- ## Notes - **Chemin fichier:** `C:\Users\alexi\Documents\projects\timetrack-pro\db\TimeTrackPro.accdb` - **Date de creation:** 2025-12-30 - **Version testee:** 0.1.0 - **Testeur:** _______________ --- ## Resultats | Section | Tests | Passes | Echecs | |---------|-------|--------|--------| | BDD - Clients | 5 | | | | BDD - Projets | 5 | | | | BDD - Temps | 5 | | | | VBA - Modules | 16 | | | | Integration | 8 | | | | Formulaires | 18 | | | | Performance | 4 | | | | **TOTAL** | **61** | | | **Statut global:** [ ] PASSE / [ ] ECHEC **Commentaires:** ---