From e72922bc576588596a2289daf987912d2339f115 Mon Sep 17 00:00:00 2001 From: Tykayn Date: Sun, 29 Jun 2025 11:22:47 +0200 Subject: [PATCH] test mesure completion --- tests/Entity/StatsTest.php | 217 +++++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 tests/Entity/StatsTest.php diff --git a/tests/Entity/StatsTest.php b/tests/Entity/StatsTest.php new file mode 100644 index 00000000..71e1f0bb --- /dev/null +++ b/tests/Entity/StatsTest.php @@ -0,0 +1,217 @@ +setZone('12345'); + + // Créer un lieu avec une complétion parfaite (100%) + $perfectPlace = new Place(); + $perfectPlace->setName('Restaurant Test') + ->setHasAddress(true) + ->setHasWebsite(true) + ->setHasWheelchair(true) + ->setHasOpeningHours(true) + ->setSiret('12345678901234') + ->setNoteContent('Note de test'); // Les notes ne comptent pas dans la complétion + + // Ajouter le lieu aux stats + $stats->addPlace($perfectPlace); + + // Calculer le pourcentage de complétion + $completionPercent = $stats->computeCompletionPercent(); + + // Vérifier que le résultat est 100% + $this->assertEquals(100, $completionPercent); + + // Vérifier que les compteurs sont corrects + $this->assertEquals(1, $stats->getAvecAdresse()); + $this->assertEquals(1, $stats->getAvecSite()); + $this->assertEquals(1, $stats->getAvecAccessibilite()); + $this->assertEquals(1, $stats->getAvecHoraires()); + $this->assertEquals(1, $stats->getAvecSiret()); + $this->assertEquals(1, $stats->getAvecName()); + $this->assertEquals(1, $stats->getAvecNote()); + } + + public function testComputeCompletionPercentWithPartialPlace() + { + // Créer un objet Stats + $stats = new Stats(); + $stats->setZone('12345'); + + // Créer un lieu avec une complétion partielle (67% - 4 critères sur 6) + $partialPlace = new Place(); + $partialPlace->setName('Café Test') + ->setHasAddress(true) // ✓ + ->setHasWebsite(false) // ✗ + ->setHasWheelchair(true) // ✓ + ->setHasOpeningHours(false) // ✗ + ->setSiret('12345678901234') // ✓ + ->setNoteContent('Note de test'); // Les notes ne comptent pas + + // Ajouter le lieu aux stats + $stats->addPlace($partialPlace); + + // Calculer le pourcentage de complétion + $completionPercent = $stats->computeCompletionPercent(); + + // Vérifier que le résultat est 67% (4/6 * 100) + $this->assertEquals(67, $completionPercent); + + // Vérifier que les compteurs sont corrects + $this->assertEquals(1, $stats->getAvecAdresse()); + $this->assertEquals(0, $stats->getAvecSite()); + $this->assertEquals(1, $stats->getAvecAccessibilite()); + $this->assertEquals(0, $stats->getAvecHoraires()); + $this->assertEquals(1, $stats->getAvecSiret()); + $this->assertEquals(1, $stats->getAvecName()); + $this->assertEquals(1, $stats->getAvecNote()); + } + + public function testComputeCompletionPercentWithEmptyPlace() + { + // Créer un objet Stats + $stats = new Stats(); + $stats->setZone('12345'); + + // Créer un lieu avec aucune complétion (0%) + $emptyPlace = new Place(); + $emptyPlace->setName(null) + ->setHasAddress(false) + ->setHasWebsite(false) + ->setHasWheelchair(false) + ->setHasOpeningHours(false) + ->setSiret(null) + ->setNoteContent(null); + + // Ajouter le lieu aux stats + $stats->addPlace($emptyPlace); + + // Calculer le pourcentage de complétion + $completionPercent = $stats->computeCompletionPercent(); + + // Vérifier que le résultat est 0% + $this->assertEquals(0, $completionPercent); + + // Vérifier que les compteurs sont corrects + $this->assertEquals(0, $stats->getAvecAdresse()); + $this->assertEquals(0, $stats->getAvecSite()); + $this->assertEquals(0, $stats->getAvecAccessibilite()); + $this->assertEquals(0, $stats->getAvecHoraires()); + $this->assertEquals(0, $stats->getAvecSiret()); + $this->assertEquals(0, $stats->getAvecName()); + $this->assertEquals(0, $stats->getAvecNote()); + } + + public function testComputeCompletionPercentWithMultiplePlaces() + { + // Créer un objet Stats + $stats = new Stats(); + $stats->setZone('12345'); + + // Créer un lieu parfait (100%) + $perfectPlace = new Place(); + $perfectPlace->setName('Restaurant Parfait') + ->setHasAddress(true) + ->setHasWebsite(true) + ->setHasWheelchair(true) + ->setHasOpeningHours(true) + ->setSiret('12345678901234'); + + // Créer un lieu vide (0%) + $emptyPlace = new Place(); + $emptyPlace->setName(null) + ->setHasAddress(false) + ->setHasWebsite(false) + ->setHasWheelchair(false) + ->setHasOpeningHours(false) + ->setSiret(null); + + // Ajouter les lieux aux stats + $stats->addPlace($perfectPlace); + $stats->addPlace($emptyPlace); + + // Calculer le pourcentage de complétion + $completionPercent = $stats->computeCompletionPercent(); + + // Vérifier que le résultat est 50% (moyenne de 100% et 0%) + $this->assertEquals(50, $completionPercent); + + // Vérifier que les compteurs sont corrects + $this->assertEquals(1, $stats->getAvecAdresse()); + $this->assertEquals(1, $stats->getAvecSite()); + $this->assertEquals(1, $stats->getAvecAccessibilite()); + $this->assertEquals(1, $stats->getAvecHoraires()); + $this->assertEquals(1, $stats->getAvecSiret()); + $this->assertEquals(1, $stats->getAvecName()); + $this->assertEquals(0, $stats->getAvecNote()); + } + + public function testComputeCompletionPercentWithNoPlaces() + { + // Créer un objet Stats sans lieux + $stats = new Stats(); + $stats->setZone('12345'); + + // Calculer le pourcentage de complétion + $completionPercent = $stats->computeCompletionPercent(); + + // Vérifier que le résultat est 0% + $this->assertEquals(0, $completionPercent); + + // Vérifier que les compteurs sont corrects + $this->assertEquals(0, $stats->getAvecAdresse()); + $this->assertEquals(0, $stats->getAvecSite()); + $this->assertEquals(0, $stats->getAvecAccessibilite()); + $this->assertEquals(0, $stats->getAvecHoraires()); + $this->assertEquals(0, $stats->getAvecSiret()); + $this->assertEquals(0, $stats->getAvecName()); + $this->assertEquals(0, $stats->getAvecNote()); + } + + public function testNotesDoNotCountInCompletion() + { + // Créer un objet Stats + $stats = new Stats(); + $stats->setZone('12345'); + + // Créer un lieu avec seulement des notes (0% de complétion) + $placeWithNotes = new Place(); + $placeWithNotes->setName(null) + ->setHasAddress(false) + ->setHasWebsite(false) + ->setHasWheelchair(false) + ->setHasOpeningHours(false) + ->setSiret(null) + ->setNoteContent('Note importante') + ->setHasNote(true); + + // Ajouter le lieu aux stats + $stats->addPlace($placeWithNotes); + + // Calculer le pourcentage de complétion + $completionPercent = $stats->computeCompletionPercent(); + + // Vérifier que le résultat est 0% (les notes ne comptent pas) + $this->assertEquals(0, $completionPercent); + + // Vérifier que les compteurs sont corrects + $this->assertEquals(0, $stats->getAvecAdresse()); + $this->assertEquals(0, $stats->getAvecSite()); + $this->assertEquals(0, $stats->getAvecAccessibilite()); + $this->assertEquals(0, $stats->getAvecHoraires()); + $this->assertEquals(0, $stats->getAvecSiret()); + $this->assertEquals(0, $stats->getAvecName()); + $this->assertEquals(1, $stats->getAvecNote()); // Les notes sont comptées séparément + } +} \ No newline at end of file