feat: Semaine 13
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
# Exercice 01 - Adam GABRIEL, Louis LEULIETTE, Gauvain BOICHÉ
|
||||
|
||||
## Quel type de test faut-il écrire ?
|
||||
|
||||
### A : La fonction qui calcule la TVA renvoie-t-elle le bon montant ?
|
||||
> Test unitaire
|
||||
|
||||
### B : Le site tient-il si 800 personnes commandent en même temps ?
|
||||
> Test de charge
|
||||
|
||||
### C : Un client peut-il voir la facture d'un autre client en changeant l'URL ?
|
||||
> Test de pénétration
|
||||
|
||||
### D : Le formulaire d'inscription est-il utilisable au clavier seul ?
|
||||
> Test d'accessibilité
|
||||
|
||||
### E : Quand j'enregistre une facture, est-elle vraiment écrite en base ?
|
||||
> Test d'intégration
|
||||
|
||||
### F : Le parcours "je me connecte, je commande, je paie" fonctionne-t-il ?
|
||||
> Test end-to-end
|
||||
|
||||
### G : A partir de combien d'utilisateurs le serveur tombe-t-il ?
|
||||
> Test de stress
|
||||
|
||||
### H : Le comptable valide-t-il que la facture contient les bonnes mentions ?
|
||||
> Test validation
|
||||
@@ -0,0 +1,150 @@
|
||||
# Exercice 02 - Adam GABRIEL, Louis LEULIETTE, Gauvain BOICHÉ
|
||||
|
||||
```php
|
||||
<?php
|
||||
class Facture
|
||||
{
|
||||
private array $lignes = [];
|
||||
|
||||
public function ajouterLigne(
|
||||
string $libelle,
|
||||
float $prixHT,
|
||||
int $qte
|
||||
): void
|
||||
{
|
||||
$this->lignes[] = [
|
||||
'libelle' => $libelle,
|
||||
'prixHT' => $prixHT,
|
||||
'qte' => $qte,
|
||||
];
|
||||
// 1. Vérifier que la longueur de $ligne soit supérieure à 1
|
||||
// 2. Vérifier que $ligne["libelle"] soit de type STRING, longueur supérieure à 0 (ou 3 ou plus pour des STRING)
|
||||
// 3. Vérifier que $ligne["prixHT"] soit de type FLOAT, positif, supérieur à 0
|
||||
// 4. Vérifier que $ligne["qte"] soit de type INT, positif, supérieur à 0
|
||||
}
|
||||
|
||||
public function totalHT(): float
|
||||
{
|
||||
$total = 0;
|
||||
foreach ($this->lignes as $l) {
|
||||
|
||||
// 5. Vérifier qu'un $prixHT à 100 et $qte à 1 multipliés fassent 100
|
||||
// 6. Vérifier qu'un $prixHT à 150 et $qte à 3 multipliés fassent 450
|
||||
|
||||
$total += $l['prixHT'] * $l['qte'];
|
||||
}
|
||||
|
||||
// 7. Vérifier que $total soit supérieur à 0
|
||||
|
||||
return $total;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Tests PHPUnit
|
||||
|
||||
Ces tests couvrent les 7 vérifications indiquées par les commentaires du code ci-dessus. Générés par Claude Sonnet 5.
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class FactureTest extends TestCase
|
||||
{
|
||||
// 1. Vérifier que la longueur de $ligne soit supérieure à 1
|
||||
public function testLigneAPlusieursElements(): void
|
||||
{
|
||||
$facture = new Facture();
|
||||
$facture->ajouterLigne('Prestation', 100.0, 1);
|
||||
|
||||
$reflection = new ReflectionProperty(Facture::class, 'lignes');
|
||||
$reflection->setAccessible(true);
|
||||
$ligne = $reflection->getValue($facture)[0];
|
||||
|
||||
$this->assertGreaterThan(1, count($ligne));
|
||||
}
|
||||
|
||||
// 2. Vérifier que $ligne["libelle"] soit de type STRING, longueur >= 3
|
||||
public function testLibelleEstUneChaineValide(): void
|
||||
{
|
||||
$facture = new Facture();
|
||||
$facture->ajouterLigne('Abc', 100.0, 1);
|
||||
|
||||
$reflection = new ReflectionProperty(Facture::class, 'lignes');
|
||||
$reflection->setAccessible(true);
|
||||
$ligne = $reflection->getValue($facture)[0];
|
||||
|
||||
$this->assertIsString($ligne['libelle']);
|
||||
$this->assertGreaterThanOrEqual(3, strlen($ligne['libelle']));
|
||||
}
|
||||
|
||||
public function testLibelleTropCourtEstInvalide(): void
|
||||
{
|
||||
$facture = new Facture();
|
||||
$facture->ajouterLigne('Ab', 100.0, 1);
|
||||
|
||||
$reflection = new ReflectionProperty(Facture::class, 'lignes');
|
||||
$reflection->setAccessible(true);
|
||||
$ligne = $reflection->getValue($facture)[0];
|
||||
|
||||
$this->assertLessThan(3, strlen($ligne['libelle']));
|
||||
}
|
||||
|
||||
// 3. Vérifier que $ligne["prixHT"] soit de type FLOAT, positif, > 0
|
||||
public function testPrixHTEstUnFloatPositif(): void
|
||||
{
|
||||
$facture = new Facture();
|
||||
$facture->ajouterLigne('Prestation', 99.99, 1);
|
||||
|
||||
$reflection = new ReflectionProperty(Facture::class, 'lignes');
|
||||
$reflection->setAccessible(true);
|
||||
$ligne = $reflection->getValue($facture)[0];
|
||||
|
||||
$this->assertIsFloat($ligne['prixHT']);
|
||||
$this->assertGreaterThan(0, $ligne['prixHT']);
|
||||
}
|
||||
|
||||
// 4. Vérifier que $ligne["qte"] soit de type INT, entier positif, > 0
|
||||
public function testQteEstUnIntPositif(): void
|
||||
{
|
||||
$facture = new Facture();
|
||||
$facture->ajouterLigne('Prestation', 100.0, 5);
|
||||
|
||||
$reflection = new ReflectionProperty(Facture::class, 'lignes');
|
||||
$reflection->setAccessible(true);
|
||||
$ligne = $reflection->getValue($facture)[0];
|
||||
|
||||
$this->assertIsInt($ligne['qte']);
|
||||
$this->assertGreaterThan(0, $ligne['qte']);
|
||||
}
|
||||
|
||||
// 5. Vérifier qu'un prixHT à 100 et qte à 1 multipliés fassent 100
|
||||
public function testTotalHTAvecUneLigneSimple(): void
|
||||
{
|
||||
$facture = new Facture();
|
||||
$facture->ajouterLigne('Prestation', 100.0, 1);
|
||||
|
||||
$this->assertEqualsWithDelta(100.0, $facture->totalHT(), 0.0001);
|
||||
}
|
||||
|
||||
// 6. Vérifier qu'un prixHT à 150 et qte à 3 multipliés fassent 450
|
||||
public function testTotalHTAvecUneLigneMultiple(): void
|
||||
{
|
||||
$facture = new Facture();
|
||||
$facture->ajouterLigne('Prestation', 150.0, 3);
|
||||
|
||||
$this->assertEqualsWithDelta(450.0, $facture->totalHT(), 0.0001);
|
||||
}
|
||||
|
||||
// 7. Vérifier que $total soit supérieur à 0
|
||||
public function testTotalHTEstSuperieurAZero(): void
|
||||
{
|
||||
$facture = new Facture();
|
||||
$facture->ajouterLigne('Prestation', 100.0, 1);
|
||||
$facture->ajouterLigne('Autre prestation', 150.0, 3);
|
||||
|
||||
$this->assertGreaterThan(0, $facture->totalHT());
|
||||
}
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user