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 } }