Loading index.php +3 −3 Original line number Diff line number Diff line Loading @@ -13,7 +13,7 @@ require_once 'src/controllers/pageRecette.php'; require_once 'src/controllers/pageConnexion.php'; require_once 'src/controllers/connexion.php'; try{ //try{ session_start(); // Si 'action' n'est pas défini, on charge la page d'accueil Loading Loading @@ -58,8 +58,8 @@ try{ } $controleur->executer(); } /*} catch(Exception $e){ $messageErreur = $e->getMessage(); require 'templates/erreur.php'; } No newline at end of file }*/ No newline at end of file src/model/recette.php +1 −1 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ class Recette { private string $image; private string $date_creation; private string $date_modification; private string $statut; protected string $statut; private string $idAuteur; private string $pseudoAuteur; private string $categorie; Loading src/model/recetteManager.php +100 −23 Original line number Diff line number Diff line Loading @@ -89,12 +89,12 @@ class RecetteManager extends Manager { public function getRecetteModifiee(string $id) : ?RecetteModifiee{ $requete = "SELECT REC_ID, REC_MOD_TITRE, REC_MOD_CONTENU, REC_MOD_RESUME, REC_MOD_IMAGE, REC_MOD_DATE_MODIFICATION, CUI_RECETTE_MODIFIEE.CAT_CODE CAT_CODE, UTIL_ID CAT_INTITULE, UTIL_ID, UTIL_PSEUDO, REC_DATE_CREATION FROM CUI_RECETTE_MODIFIEE JOIN CUI_RECETTE USING(REC_ID) JOIN CUI_CATEGORIE ON CUI_CATEGORIE.CAT_CODE = CUI_RECETTE_MODIFIEE.CAT_CODE JOIN CUI_UTILISATEUR USING (UTIL_ID) WHERE rec_id='1'"; WHERE REC_ID='$id'"; $resultat = self::projectionBdd($requete); if(! isset($resultat[0])) { Loading Loading @@ -131,6 +131,7 @@ class RecetteManager extends Manager { * Renvoie un certain nombre de recettes triés par ordre chronologiques. * Par exemple, appelées avec la valeur 5, cette méthode * renvoie les 5 dernières recettes. * Ne renvoie que les recettes validées. * @param int $nombre le nombre de recettes à renvoyer * @return array un tableau d'objets Recette */ Loading @@ -139,6 +140,7 @@ class RecetteManager extends Manager { "SELECT * FROM CUI_RECETTE JOIN CUI_CATEGORIE USING (CAT_CODE) JOIN CUI_UTILISATEUR USING (UTIL_ID) WHERE REC_STATUT = 'V' OR REC_STATUT = 'M' ORDER BY REC_DATE_CREATION DESC LIMIT $nombre"; $resultat = self::projectionBdd($requete); Loading Loading @@ -285,8 +287,8 @@ class RecetteManager extends Manager { REC_RESUME = ?, REC_IMAGE = ?, REC_DATE_MODIFICATION = NOW(), CAT_CODE = ?, WHERE ID = ?"; CAT_CODE = ? WHERE REC_ID = ?"; $codeCategorie = (new CategorieManager)->getCodeCategorie($recette->getCategorie()); if(is_null($codeCategorie)){ Loading Loading @@ -315,21 +317,10 @@ class RecetteManager extends Manager { $recetteModifiee = self::getRecetteModifiee($recette->getId()); if($recetteModifiee){ // Suppression des tags et des ingrédients foreach($recetteModifiee->getTags() as $tag){ $recetteModifiee->supprimerTag($tag); } foreach($recetteModifiee->getIngredients() as $ingredient){ $recetteModifiee->supprimerIngredient($ingredient); self::supprimerRecetteModifiee($recetteModifiee); } // Suppression de la recette modifiée $requete = "DELETE FROM CUI_RECETTE_MODIFIEE WHERE REC_ID = ?"; if(self::requetePrepare($requete, [$recette->getId()]) != 1){ throw new Exception("Échec de la suppression de la recette."); } } $recetteModifiee = self::getRecetteModifiee($recette->getId()); // Suppression des tags et des ingrédients foreach($recette->getTags() as $tag){ Loading @@ -347,6 +338,23 @@ class RecetteManager extends Manager { } } public function supprimerRecetteModifiee(RecetteModifiee $recetteModifiee){ // Suppression des tags et des ingrédients foreach($recetteModifiee->getTags() as $tag){ $recetteModifiee->supprimerTag($tag); } foreach($recetteModifiee->getIngredients() as $ingredient){ $recetteModifiee->supprimerIngredient($ingredient); } // Suppression de la recette modifiée $requete = "DELETE FROM CUI_RECETTE_MODIFIEE WHERE REC_ID = ?"; if(self::requetePrepare($requete, [$recetteModifiee->getId()]) != 1){ throw new Exception("Échec de la suppression de la recette modifiée."); } } /** * Soumet une recette modifiée à validation pour un administrateur. * La recette modifiée sera stocké dans une autre table en attendant d'être validé, Loading Loading @@ -376,9 +384,9 @@ class RecetteManager extends Manager { } // Changement du statut de la recette $requete = "UPDATE CUI_RECETTE SET STATUT = 'M' WHERE REC_ID = ?"; $requete = "UPDATE CUI_RECETTE SET REC_STATUT = 'M' WHERE REC_ID = ?"; if(! self::requetePrepare($requete, [$recetteModifiee->getId()])){ throw new Exception("Échec de la création de recette modifiée."); throw new Exception("Échec de la mide à jour du statut de la recette modifiée."); } // Copie des tags et ingrédients Loading @@ -400,7 +408,7 @@ class RecetteManager extends Manager { * @return void */ public function validerRecette(Recette $recette): void{ $requete = "UPDATE CUI_RECETTE SET STATUT='V' WHERE REC_ID = ?"; $requete = "UPDATE CUI_RECETTE SET REC_STATUT='V' WHERE REC_ID = ?"; if(! self::requetePrepare($requete, [$recette->getId()])){ throw new Exception("Échec de l'ajout de la validation de la recette."); } Loading @@ -410,7 +418,76 @@ class RecetteManager extends Manager { * Valide une modification de recette. * @param Recette $recette la recette à valider */ public function validerModification(RecetteModifiee $recette): void{ public function validerModification(RecetteModifiee $recetteModifiee): void{ $recette = new Recette( $recetteModifiee->getTitre(), $recetteModifiee->getContenu(), $recetteModifiee->getResume(), $recetteModifiee->getImage(), 'V', $recetteModifiee->getIdAuteur(), $recetteModifiee->getCategorie(), $recetteModifiee->getId() ); // Mise à jour des propriétés de la table Recette self::majRecette($recette); // Mise à jour des tags et ingrédients $ingredientsRecette = $recette->getIngredients(); $ingredientsModifies = $recetteModifiee->getIngredients(); $tagsRecette = $recette->getTags(); $tagsModifies = $recetteModifiee->getTags(); foreach($ingredientsModifies as $ingredientModifie){ if(! self::contientIngredient($ingredientsRecette, $ingredientModifie)){ $recette->ajouterIngredient($ingredientModifie); } } foreach($ingredientsRecette as $ingredientRecette){ if(! self::contientIngredient($ingredientsModifies, $ingredientRecette)){ $recette->supprimerIngredient($ingredientRecette); } } foreach($tagsModifies as $tagModifie){ if(! self::contientTag($tagsRecette, $tagModifie)){ $recette->ajouterTag($tagModifie); } } foreach($tagsRecette as $tagRecette){ if(! self::contientTag($tagsModifies, $tagRecette)){ $recette->supprimerTag($tagRecette); } } // Suppression de la recette modifiée, // maintenant que la recette de base est mise à jour self::supprimerRecetteModifiee($recetteModifiee); // Rendre la recette valide à nouveau self::validerRecette($recette); } private function contientIngredient(array $ingredients, Ingredient $ingredient): bool{ foreach($ingredients as $ingredientCourant){ if($ingredient->getIntitule() === $ingredientCourant->getIntitule()){ return true; } } return false; } private function contientTag(array $tags, Tag $tag): bool{ foreach($tags as $tagCourant){ if($tag->getIntitule() === $tagCourant->getIntitule()){ return true; } } return false; } } No newline at end of file src/model/recetteModifiee.php +14 −6 Original line number Diff line number Diff line Loading @@ -9,32 +9,40 @@ require_once 'src/model/ingredientManager.php'; require_once 'src/model/recette.php'; class RecetteModifiee extends Recette { public static function getInstanceFromRecette(Recette $recette): RecetteModifiee { return new RecetteModifiee($recette->getTitre(), $recette->getContenu(), $recette->getResume(), $recette->getImage(), $recette->statut, $recette->getIdAuteur(), $recette->getCategorie(), $recette->getId(), $recette->getPseudoAuteur(), $recette->getDateCreation(), $recette->getDateModification()); } /** * Renvoie tous les tags de la recette. * @return array un tableau d'objets Tag * @see Tag */ public function getTags(): array{ return (new TagManager)->getParRecetteModifiee($this->id); return (new TagManager)->getParRecetteModifiee($this->getId()); } public function ajouterTag(Tag $tag){ (new TagManager)->ajouterTagARecetteModifiee($tag, $this->id); (new TagManager)->ajouterTagARecetteModifiee($tag, $this->getId()); } public function supprimerTag(Tag $tag){ (new TagManager)->supprimerTagDeRecetteModifiee($tag, $this->id); (new TagManager)->supprimerTagDeRecetteModifiee($tag, $this->getId()); } public function getIngredients(): array{ return (new IngredientManager)->getParRecetteModifiee($this->id); return (new IngredientManager)->getParRecetteModifiee($this->getId()); } public function ajouterIngredient(Ingredient $ingredient){ (new IngredientManager)->ajouterIngredientARecetteModifiee($ingredient, $this->id); (new IngredientManager)->ajouterIngredientARecetteModifiee($ingredient, $this->getId()); } public function supprimerIngredient(Ingredient $ingredient){ (new IngredientManager)->supprimerIngredientDeRecetteModifiee($ingredient, $this->id); (new IngredientManager)->supprimerIngredientDeRecetteModifiee($ingredient, $this->getId()); } } No newline at end of file test/testsRecettes.php +59 −0 Original line number Diff line number Diff line Loading @@ -3,9 +3,12 @@ require_once 'src/lib/assertion.php'; require_once 'src/model/recette.php'; require_once 'src/model/recetteModifiee.php'; require_once 'src/model/recetteManager.php'; testRecettes(); testRecettesModifiees(); function testRecettes() { $manager = new RecetteManager(); Loading Loading @@ -36,3 +39,59 @@ function testRecettes() { assertFalse($manager->getRecette($recetteBis->getId())); } function testRecettesModifiees(){ $manager = new RecetteManager(); $idAuteur = (new UtilisateurManager)->connecter('test', 'test')->getId(); $recette = new Recette('Poulet cury', "J'ai la flemme d'écrire le contenu...", "Du poulet avec du curry (OMG)", "", "A", $idAuteur, 'Plat'); $manager->creerRecette($recette); $recetteEnBase = $manager->getRecettes()[0]; assertEquals('Poulet cury', $recetteEnBase->getTitre()); $recetteEnBase->ajouterTag(new Tag('volaille')); $recetteEnBase->ajouterIngredient(new Ingredient('poulet')); $recetteEnBase->ajouterIngredient(new Ingredient('curry')); $recetteEnBase->ajouterIngredient(new Ingredient('onions')); assertFalse($recetteEnBase->estValide()); $manager->validerRecette($recetteEnBase); $recetteEnBase = $manager->getRecette($recetteEnBase->getId()); assertTrue($recetteEnBase->estValide()); $recetteModifiee = RecetteModifiee::getInstanceFromRecette($recetteEnBase); $recetteModifiee->setTitre('Poulet curry'); $manager->soumettreModification($recetteModifiee); $recetteEnBase = $manager->getRecette($recetteEnBase->getId()); assertTrue($recetteEnBase->estValide()); assertEquals('Poulet cury', $recetteEnBase->getTitre()); //$recetteModifiee = $manager->getRecetteModifiee($recetteEnBase->getId()); // finalement, je n'aime pas trop les onions... $recetteModifiee->supprimerIngredient(new Ingredient('onions')); $manager->validerModification($recetteModifiee); $recetteEnBase = $manager->getRecette($recetteEnBase->getId()); assertEquals('Poulet curry', $recetteEnBase->getTitre()); $exception = false; try{ $recetteEnBase->supprimerIngredient(new Ingredient('onions')); $exception = true; } catch(Exception $e){} if($exception){ throw new AssertionFailedException("expected exception to be thrown"); } assertFalse($manager->getRecetteModifiee($recetteEnBase->getId())); $manager->soumettreModification(RecetteModifiee::getInstanceFromRecette($recetteEnBase)); $manager->supprimerRecette($recetteEnBase); } No newline at end of file Loading
index.php +3 −3 Original line number Diff line number Diff line Loading @@ -13,7 +13,7 @@ require_once 'src/controllers/pageRecette.php'; require_once 'src/controllers/pageConnexion.php'; require_once 'src/controllers/connexion.php'; try{ //try{ session_start(); // Si 'action' n'est pas défini, on charge la page d'accueil Loading Loading @@ -58,8 +58,8 @@ try{ } $controleur->executer(); } /*} catch(Exception $e){ $messageErreur = $e->getMessage(); require 'templates/erreur.php'; } No newline at end of file }*/ No newline at end of file
src/model/recette.php +1 −1 Original line number Diff line number Diff line Loading @@ -25,7 +25,7 @@ class Recette { private string $image; private string $date_creation; private string $date_modification; private string $statut; protected string $statut; private string $idAuteur; private string $pseudoAuteur; private string $categorie; Loading
src/model/recetteManager.php +100 −23 Original line number Diff line number Diff line Loading @@ -89,12 +89,12 @@ class RecetteManager extends Manager { public function getRecetteModifiee(string $id) : ?RecetteModifiee{ $requete = "SELECT REC_ID, REC_MOD_TITRE, REC_MOD_CONTENU, REC_MOD_RESUME, REC_MOD_IMAGE, REC_MOD_DATE_MODIFICATION, CUI_RECETTE_MODIFIEE.CAT_CODE CAT_CODE, UTIL_ID CAT_INTITULE, UTIL_ID, UTIL_PSEUDO, REC_DATE_CREATION FROM CUI_RECETTE_MODIFIEE JOIN CUI_RECETTE USING(REC_ID) JOIN CUI_CATEGORIE ON CUI_CATEGORIE.CAT_CODE = CUI_RECETTE_MODIFIEE.CAT_CODE JOIN CUI_UTILISATEUR USING (UTIL_ID) WHERE rec_id='1'"; WHERE REC_ID='$id'"; $resultat = self::projectionBdd($requete); if(! isset($resultat[0])) { Loading Loading @@ -131,6 +131,7 @@ class RecetteManager extends Manager { * Renvoie un certain nombre de recettes triés par ordre chronologiques. * Par exemple, appelées avec la valeur 5, cette méthode * renvoie les 5 dernières recettes. * Ne renvoie que les recettes validées. * @param int $nombre le nombre de recettes à renvoyer * @return array un tableau d'objets Recette */ Loading @@ -139,6 +140,7 @@ class RecetteManager extends Manager { "SELECT * FROM CUI_RECETTE JOIN CUI_CATEGORIE USING (CAT_CODE) JOIN CUI_UTILISATEUR USING (UTIL_ID) WHERE REC_STATUT = 'V' OR REC_STATUT = 'M' ORDER BY REC_DATE_CREATION DESC LIMIT $nombre"; $resultat = self::projectionBdd($requete); Loading Loading @@ -285,8 +287,8 @@ class RecetteManager extends Manager { REC_RESUME = ?, REC_IMAGE = ?, REC_DATE_MODIFICATION = NOW(), CAT_CODE = ?, WHERE ID = ?"; CAT_CODE = ? WHERE REC_ID = ?"; $codeCategorie = (new CategorieManager)->getCodeCategorie($recette->getCategorie()); if(is_null($codeCategorie)){ Loading Loading @@ -315,21 +317,10 @@ class RecetteManager extends Manager { $recetteModifiee = self::getRecetteModifiee($recette->getId()); if($recetteModifiee){ // Suppression des tags et des ingrédients foreach($recetteModifiee->getTags() as $tag){ $recetteModifiee->supprimerTag($tag); } foreach($recetteModifiee->getIngredients() as $ingredient){ $recetteModifiee->supprimerIngredient($ingredient); self::supprimerRecetteModifiee($recetteModifiee); } // Suppression de la recette modifiée $requete = "DELETE FROM CUI_RECETTE_MODIFIEE WHERE REC_ID = ?"; if(self::requetePrepare($requete, [$recette->getId()]) != 1){ throw new Exception("Échec de la suppression de la recette."); } } $recetteModifiee = self::getRecetteModifiee($recette->getId()); // Suppression des tags et des ingrédients foreach($recette->getTags() as $tag){ Loading @@ -347,6 +338,23 @@ class RecetteManager extends Manager { } } public function supprimerRecetteModifiee(RecetteModifiee $recetteModifiee){ // Suppression des tags et des ingrédients foreach($recetteModifiee->getTags() as $tag){ $recetteModifiee->supprimerTag($tag); } foreach($recetteModifiee->getIngredients() as $ingredient){ $recetteModifiee->supprimerIngredient($ingredient); } // Suppression de la recette modifiée $requete = "DELETE FROM CUI_RECETTE_MODIFIEE WHERE REC_ID = ?"; if(self::requetePrepare($requete, [$recetteModifiee->getId()]) != 1){ throw new Exception("Échec de la suppression de la recette modifiée."); } } /** * Soumet une recette modifiée à validation pour un administrateur. * La recette modifiée sera stocké dans une autre table en attendant d'être validé, Loading Loading @@ -376,9 +384,9 @@ class RecetteManager extends Manager { } // Changement du statut de la recette $requete = "UPDATE CUI_RECETTE SET STATUT = 'M' WHERE REC_ID = ?"; $requete = "UPDATE CUI_RECETTE SET REC_STATUT = 'M' WHERE REC_ID = ?"; if(! self::requetePrepare($requete, [$recetteModifiee->getId()])){ throw new Exception("Échec de la création de recette modifiée."); throw new Exception("Échec de la mide à jour du statut de la recette modifiée."); } // Copie des tags et ingrédients Loading @@ -400,7 +408,7 @@ class RecetteManager extends Manager { * @return void */ public function validerRecette(Recette $recette): void{ $requete = "UPDATE CUI_RECETTE SET STATUT='V' WHERE REC_ID = ?"; $requete = "UPDATE CUI_RECETTE SET REC_STATUT='V' WHERE REC_ID = ?"; if(! self::requetePrepare($requete, [$recette->getId()])){ throw new Exception("Échec de l'ajout de la validation de la recette."); } Loading @@ -410,7 +418,76 @@ class RecetteManager extends Manager { * Valide une modification de recette. * @param Recette $recette la recette à valider */ public function validerModification(RecetteModifiee $recette): void{ public function validerModification(RecetteModifiee $recetteModifiee): void{ $recette = new Recette( $recetteModifiee->getTitre(), $recetteModifiee->getContenu(), $recetteModifiee->getResume(), $recetteModifiee->getImage(), 'V', $recetteModifiee->getIdAuteur(), $recetteModifiee->getCategorie(), $recetteModifiee->getId() ); // Mise à jour des propriétés de la table Recette self::majRecette($recette); // Mise à jour des tags et ingrédients $ingredientsRecette = $recette->getIngredients(); $ingredientsModifies = $recetteModifiee->getIngredients(); $tagsRecette = $recette->getTags(); $tagsModifies = $recetteModifiee->getTags(); foreach($ingredientsModifies as $ingredientModifie){ if(! self::contientIngredient($ingredientsRecette, $ingredientModifie)){ $recette->ajouterIngredient($ingredientModifie); } } foreach($ingredientsRecette as $ingredientRecette){ if(! self::contientIngredient($ingredientsModifies, $ingredientRecette)){ $recette->supprimerIngredient($ingredientRecette); } } foreach($tagsModifies as $tagModifie){ if(! self::contientTag($tagsRecette, $tagModifie)){ $recette->ajouterTag($tagModifie); } } foreach($tagsRecette as $tagRecette){ if(! self::contientTag($tagsModifies, $tagRecette)){ $recette->supprimerTag($tagRecette); } } // Suppression de la recette modifiée, // maintenant que la recette de base est mise à jour self::supprimerRecetteModifiee($recetteModifiee); // Rendre la recette valide à nouveau self::validerRecette($recette); } private function contientIngredient(array $ingredients, Ingredient $ingredient): bool{ foreach($ingredients as $ingredientCourant){ if($ingredient->getIntitule() === $ingredientCourant->getIntitule()){ return true; } } return false; } private function contientTag(array $tags, Tag $tag): bool{ foreach($tags as $tagCourant){ if($tag->getIntitule() === $tagCourant->getIntitule()){ return true; } } return false; } } No newline at end of file
src/model/recetteModifiee.php +14 −6 Original line number Diff line number Diff line Loading @@ -9,32 +9,40 @@ require_once 'src/model/ingredientManager.php'; require_once 'src/model/recette.php'; class RecetteModifiee extends Recette { public static function getInstanceFromRecette(Recette $recette): RecetteModifiee { return new RecetteModifiee($recette->getTitre(), $recette->getContenu(), $recette->getResume(), $recette->getImage(), $recette->statut, $recette->getIdAuteur(), $recette->getCategorie(), $recette->getId(), $recette->getPseudoAuteur(), $recette->getDateCreation(), $recette->getDateModification()); } /** * Renvoie tous les tags de la recette. * @return array un tableau d'objets Tag * @see Tag */ public function getTags(): array{ return (new TagManager)->getParRecetteModifiee($this->id); return (new TagManager)->getParRecetteModifiee($this->getId()); } public function ajouterTag(Tag $tag){ (new TagManager)->ajouterTagARecetteModifiee($tag, $this->id); (new TagManager)->ajouterTagARecetteModifiee($tag, $this->getId()); } public function supprimerTag(Tag $tag){ (new TagManager)->supprimerTagDeRecetteModifiee($tag, $this->id); (new TagManager)->supprimerTagDeRecetteModifiee($tag, $this->getId()); } public function getIngredients(): array{ return (new IngredientManager)->getParRecetteModifiee($this->id); return (new IngredientManager)->getParRecetteModifiee($this->getId()); } public function ajouterIngredient(Ingredient $ingredient){ (new IngredientManager)->ajouterIngredientARecetteModifiee($ingredient, $this->id); (new IngredientManager)->ajouterIngredientARecetteModifiee($ingredient, $this->getId()); } public function supprimerIngredient(Ingredient $ingredient){ (new IngredientManager)->supprimerIngredientDeRecetteModifiee($ingredient, $this->id); (new IngredientManager)->supprimerIngredientDeRecetteModifiee($ingredient, $this->getId()); } } No newline at end of file
test/testsRecettes.php +59 −0 Original line number Diff line number Diff line Loading @@ -3,9 +3,12 @@ require_once 'src/lib/assertion.php'; require_once 'src/model/recette.php'; require_once 'src/model/recetteModifiee.php'; require_once 'src/model/recetteManager.php'; testRecettes(); testRecettesModifiees(); function testRecettes() { $manager = new RecetteManager(); Loading Loading @@ -36,3 +39,59 @@ function testRecettes() { assertFalse($manager->getRecette($recetteBis->getId())); } function testRecettesModifiees(){ $manager = new RecetteManager(); $idAuteur = (new UtilisateurManager)->connecter('test', 'test')->getId(); $recette = new Recette('Poulet cury', "J'ai la flemme d'écrire le contenu...", "Du poulet avec du curry (OMG)", "", "A", $idAuteur, 'Plat'); $manager->creerRecette($recette); $recetteEnBase = $manager->getRecettes()[0]; assertEquals('Poulet cury', $recetteEnBase->getTitre()); $recetteEnBase->ajouterTag(new Tag('volaille')); $recetteEnBase->ajouterIngredient(new Ingredient('poulet')); $recetteEnBase->ajouterIngredient(new Ingredient('curry')); $recetteEnBase->ajouterIngredient(new Ingredient('onions')); assertFalse($recetteEnBase->estValide()); $manager->validerRecette($recetteEnBase); $recetteEnBase = $manager->getRecette($recetteEnBase->getId()); assertTrue($recetteEnBase->estValide()); $recetteModifiee = RecetteModifiee::getInstanceFromRecette($recetteEnBase); $recetteModifiee->setTitre('Poulet curry'); $manager->soumettreModification($recetteModifiee); $recetteEnBase = $manager->getRecette($recetteEnBase->getId()); assertTrue($recetteEnBase->estValide()); assertEquals('Poulet cury', $recetteEnBase->getTitre()); //$recetteModifiee = $manager->getRecetteModifiee($recetteEnBase->getId()); // finalement, je n'aime pas trop les onions... $recetteModifiee->supprimerIngredient(new Ingredient('onions')); $manager->validerModification($recetteModifiee); $recetteEnBase = $manager->getRecette($recetteEnBase->getId()); assertEquals('Poulet curry', $recetteEnBase->getTitre()); $exception = false; try{ $recetteEnBase->supprimerIngredient(new Ingredient('onions')); $exception = true; } catch(Exception $e){} if($exception){ throw new AssertionFailedException("expected exception to be thrown"); } assertFalse($manager->getRecetteModifiee($recetteEnBase->getId())); $manager->soumettreModification(RecetteModifiee::getInstanceFromRecette($recetteEnBase)); $manager->supprimerRecette($recetteEnBase); } No newline at end of file