test mesure completion

This commit is contained in:
Tykayn 2025-06-29 11:22:47 +02:00 committed by tykayn
parent d2c0326231
commit e72922bc57

217
tests/Entity/StatsTest.php Normal file
View file

@ -0,0 +1,217 @@
<?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
}
}