mirror of
				https://forge.chapril.org/tykayn/osm-commerces
				synced 2025-10-09 17:02:46 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			217 lines
		
	
	
		
			No EOL
		
	
	
		
			7.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			217 lines
		
	
	
		
			No EOL
		
	
	
		
			7.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Tests\Entity;
 | |
| 
 | |
| use App\Entity\Place;
 | |
| use App\Entity\Stats;
 | |
| use PHPUnit\Framework\TestCase;
 | |
| 
 | |
| class StatsTest extends TestCase
 | |
| {
 | |
|     public function testComputeCompletionPercentWithPerfectPlace()
 | |
|     {
 | |
|         // Créer un objet Stats
 | |
|         $stats = new Stats();
 | |
|         $stats->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
 | |
|     }
 | |
| } 
 | 
