From b7a750604a54c75b431ddd988de9eeb1e826f880 Mon Sep 17 00:00:00 2001 From: bastien ollier Date: Fri, 7 Jun 2024 15:54:49 +0200 Subject: [PATCH] update form --- src/Controller/PostController.php | 60 ++++++--- src/Controller/SpeciesController.php | 69 ++++++++-- src/Form/PostType.php | 7 +- src/Form/SpeciesType.php | 3 +- templates/post/_delete_form.html.twig | 4 + templates/post/_form.html.twig | 4 + templates/post/edit.html.twig | 10 +- templates/post/index.html.twig | 46 ++++++- templates/post/new.html.twig | 11 ++ templates/post/post.html.twig | 3 - templates/post/show.html.twig | 46 +++++++ templates/species/_delete_form.html.twig | 4 + templates/species/_form.html.twig | 4 + templates/species/edit.html.twig | 13 ++ templates/species/index.html.twig | 39 ++++++ templates/species/new.html.twig | 11 ++ templates/species/show.html.twig | 34 +++++ templates/species/species.html.twig | 3 - tests/Controller/PostControllerTest.php | 142 +++++++++++++++++++++ tests/Controller/SpeciesControllerTest.php | 124 ++++++++++++++++++ 20 files changed, 581 insertions(+), 56 deletions(-) create mode 100644 templates/post/_delete_form.html.twig create mode 100644 templates/post/_form.html.twig create mode 100644 templates/post/new.html.twig delete mode 100644 templates/post/post.html.twig create mode 100644 templates/post/show.html.twig create mode 100644 templates/species/_delete_form.html.twig create mode 100644 templates/species/_form.html.twig create mode 100644 templates/species/edit.html.twig create mode 100644 templates/species/index.html.twig create mode 100644 templates/species/new.html.twig create mode 100644 templates/species/show.html.twig delete mode 100644 templates/species/species.html.twig create mode 100644 tests/Controller/PostControllerTest.php create mode 100644 tests/Controller/SpeciesControllerTest.php diff --git a/src/Controller/PostController.php b/src/Controller/PostController.php index 79dbc44..484a494 100644 --- a/src/Controller/PostController.php +++ b/src/Controller/PostController.php @@ -2,66 +2,86 @@ namespace App\Controller; +use App\Entity\Post; +use App\Form\PostType; use App\Repository\PostRepository; +use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; -use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; -use App\Entity\Post; -use App\Form\PostType; -use Doctrine\ORM\EntityManagerInterface; +use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Http\Attribute\IsGranted; +#[Route('/post')] class PostController extends AbstractController { - #[Route('/', name: 'app_posts')] - public function index(PostRepository $repository): Response + #[Route('/', name: 'app_post_index', methods: ['GET'])] + public function index(PostRepository $postRepository): Response { - $posts = $repository->findAll(); return $this->render('post/index.html.twig', [ - 'posts' => $posts, + 'posts' => $postRepository->findAll(), ]); } - #[Route('/posts/add', name: 'app_add_posts')] + #[Route('/new', name: 'app_post_new', methods: ['GET', 'POST'])] #[IsGranted('ROLE_USER', message: 'You must be logged in to access this page.')] public function new(Request $request, EntityManagerInterface $entityManager): Response { $post = new Post(); - $form = $this->createForm(PostType::class, $post); - $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { - $post = $form->getData(); - $post->setPublicationDate(new \DateTimeImmutable("now")); - $entityManager->persist($post); $entityManager->flush(); - return $this->redirectToRoute('app_add_posts'); + return $this->redirectToRoute('app_post_index', [], Response::HTTP_SEE_OTHER); } - return $this->render('post/post.html.twig', [ + return $this->render('post/new.html.twig', [ + 'post' => $post, 'form' => $form, ]); } - #[Route('/posts/edit/{id}', name: 'app_edit_post')] + #[Route('/{id}', name: 'app_post_show', methods: ['GET'])] + public function show(Post $post): Response + { + return $this->render('post/show.html.twig', [ + 'post' => $post, + ]); + } + + #[Route('/{id}/edit', name: 'app_post_edit', methods: ['GET', 'POST'])] #[IsGranted('ROLE_USER', message: 'You must be logged in to access this page.')] - public function edit(Request $request, EntityManagerInterface $entityManager, Post $post): Response + public function edit(Request $request, Post $post, EntityManagerInterface $entityManager): Response { $form = $this->createForm(PostType::class, $post); $form->handleRequest($request); + if ($form->isSubmitted() && $form->isValid()) { + $entityManager->flush(); if ($form->isSubmitted() && $form->isValid()) { $entityManager->flush(); - return $this->redirectToRoute('app_posts'); + return $this->redirectToRoute('app_post_index', [], Response::HTTP_SEE_OTHER); } return $this->render('post/edit.html.twig', [ - 'form' => $form->createView(), + 'post' => $post, + 'form' => $form, ]); } + + #[Route('/{id}', name: 'app_post_delete', methods: ['POST'])] + #[IsGranted('ROLE_USER', message: 'You must be logged in to access this page.')] + public function delete(Request $request, Post $post, EntityManagerInterface $entityManager): Response + { + if ($this->isCsrfTokenValid('delete'.$post->getId(), $request->getPayload()->get('_token'))) { + $entityManager->remove($post); + $entityManager->flush(); + } + + return $this->redirectToRoute('app_post_index', [], Response::HTTP_SEE_OTHER); + } } diff --git a/src/Controller/SpeciesController.php b/src/Controller/SpeciesController.php index 4a2b7c2..4e5d4cf 100644 --- a/src/Controller/SpeciesController.php +++ b/src/Controller/SpeciesController.php @@ -2,37 +2,84 @@ namespace App\Controller; -use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; use App\Entity\Species; use App\Form\SpeciesType; +use App\Repository\SpeciesRepository; use Doctrine\ORM\EntityManagerInterface; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Http\Attribute\IsGranted; +#[Route('/species')] class SpeciesController extends AbstractController { - #[Route('/species/add', name: 'app_add_species')] + #[Route('/', name: 'app_species_index', methods: ['GET'])] + public function index(SpeciesRepository $speciesRepository): Response + { + return $this->render('species/index.html.twig', [ + 'species' => $speciesRepository->findAll(), + ]); + } + + #[Route('/new', name: 'app_species_new', methods: ['GET', 'POST'])] #[IsGranted('ROLE_USER', message: 'You must be logged in to access this page.')] public function new(Request $request, EntityManagerInterface $entityManager): Response { $species = new Species(); $form = $this->createForm(SpeciesType::class, $species); - $form->handleRequest($request); - if ($form->isSubmitted() && $form->isValid()) { - $species = $form->getData(); - + if ($form->isSubmitted() && $form->isValid()) { $entityManager->persist($species); $entityManager->flush(); - return $this->redirectToRoute('app_add_species'); + return $this->redirectToRoute('app_species_index', [], Response::HTTP_SEE_OTHER); } - return $this->render('species/species.html.twig', [ - 'form' => $form->createView(), + return $this->render('species/new.html.twig', [ + 'species' => $species, + 'form' => $form, ]); } + + #[Route('/{id}', name: 'app_species_show', methods: ['GET'])] + public function show(Species $species): Response + { + return $this->render('species/show.html.twig', [ + 'species' => $species, + ]); + } + + #[Route('/{id}/edit', name: 'app_species_edit', methods: ['GET', 'POST'])] + #[IsGranted('ROLE_USER', message: 'You must be logged in to access this page.')] + public function edit(Request $request, Species $species, EntityManagerInterface $entityManager): Response + { + $form = $this->createForm(SpeciesType::class, $species); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $entityManager->flush(); + + return $this->redirectToRoute('app_species_index', [], Response::HTTP_SEE_OTHER); + } + + return $this->render('species/edit.html.twig', [ + 'species' => $species, + 'form' => $form, + ]); + } + + #[Route('/{id}', name: 'app_species_delete', methods: ['POST'])] + #[IsGranted('ROLE_USER', message: 'You must be logged in to access this page.')] + public function delete(Request $request, Species $species, EntityManagerInterface $entityManager): Response + { + if ($this->isCsrfTokenValid('delete'.$species->getId(), $request->getPayload()->get('_token'))) { + $entityManager->remove($species); + $entityManager->flush(); + } + + return $this->redirectToRoute('app_species_index', [], Response::HTTP_SEE_OTHER); + } } diff --git a/src/Form/PostType.php b/src/Form/PostType.php index ceaff2c..bea7e6f 100644 --- a/src/Form/PostType.php +++ b/src/Form/PostType.php @@ -6,19 +6,16 @@ use App\Entity\Post; use App\Entity\Species; use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Component\Form\AbstractType; -use Symfony\Component\Form\Extension\Core\Type\DateTimeType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; -use Symfony\Component\Form\Extension\Core\Type\SubmitType; class PostType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { $builder - ->add('foundDate', DateTimeType::class, [ + ->add('foundDate', null, [ 'widget' => 'single_text', - 'empty_data' => null, ]) ->add('latitude') ->add('longitude') @@ -28,7 +25,7 @@ class PostType extends AbstractType 'class' => Species::class, 'choice_label' => 'scientific_name', ]) - ->add('save', SubmitType::class, ['label' => 'Create Post']); + ; } diff --git a/src/Form/SpeciesType.php b/src/Form/SpeciesType.php index 0d6cab9..ae3b919 100644 --- a/src/Form/SpeciesType.php +++ b/src/Form/SpeciesType.php @@ -6,7 +6,6 @@ use App\Entity\Species; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; -use Symfony\Component\Form\Extension\Core\Type\SubmitType; class SpeciesType extends AbstractType { @@ -16,7 +15,7 @@ class SpeciesType extends AbstractType ->add('scientific_name') ->add('vernacular_name') ->add('region') - ->add('save', SubmitType::class, ['label' => 'Create Species']); + ; } public function configureOptions(OptionsResolver $resolver): void diff --git a/templates/post/_delete_form.html.twig b/templates/post/_delete_form.html.twig new file mode 100644 index 0000000..1223c9b --- /dev/null +++ b/templates/post/_delete_form.html.twig @@ -0,0 +1,4 @@ +
+ + +
diff --git a/templates/post/_form.html.twig b/templates/post/_form.html.twig new file mode 100644 index 0000000..bf20b98 --- /dev/null +++ b/templates/post/_form.html.twig @@ -0,0 +1,4 @@ +{{ form_start(form) }} + {{ form_widget(form) }} + +{{ form_end(form) }} diff --git a/templates/post/edit.html.twig b/templates/post/edit.html.twig index 1c8e0bb..16b6b5f 100644 --- a/templates/post/edit.html.twig +++ b/templates/post/edit.html.twig @@ -5,11 +5,9 @@ {% block body %}

Edit Post

- {{ form_start(form) }} - {{ form_widget(form) }} + {{ include('post/_form.html.twig', {'button_label': 'Update'}) }} - - {{ form_end(form) }} + back to list - Back to posts -{% endblock %} \ No newline at end of file + {{ include('post/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/post/index.html.twig b/templates/post/index.html.twig index 94f3756..49ca738 100644 --- a/templates/post/index.html.twig +++ b/templates/post/index.html.twig @@ -1,11 +1,45 @@ {% extends 'base.html.twig' %} -{% block title %}Posts!{% endblock %} +{% block title %}Post index{% endblock %} {% block body %} -{% for post in posts %} -
- #{{ post.id }} trouvé le {{ post.foundDate | date("d/m/Y \\à H \\h") }} -
-{% endfor %} +

Post index

+ + + + + + + + + + + + + + + + {% for post in posts %} + + + + + + + + + + + {% else %} + + + + {% endfor %} + +
IdFoundDatePublicationDateLatitudeLongitudeAltitudeCommentaryactions
{{ post.id }}{{ post.foundDate ? post.foundDate|date('Y-m-d H:i:s') : '' }}{{ post.publicationDate ? post.publicationDate|date('Y-m-d H:i:s') : '' }}{{ post.latitude }}{{ post.longitude }}{{ post.altitude }}{{ post.commentary }} + show + edit +
no records found
+ + Create new {% endblock %} diff --git a/templates/post/new.html.twig b/templates/post/new.html.twig new file mode 100644 index 0000000..b8bc236 --- /dev/null +++ b/templates/post/new.html.twig @@ -0,0 +1,11 @@ +{% extends 'base.html.twig' %} + +{% block title %}New Post{% endblock %} + +{% block body %} +

Create new Post

+ + {{ include('post/_form.html.twig') }} + + back to list +{% endblock %} diff --git a/templates/post/post.html.twig b/templates/post/post.html.twig deleted file mode 100644 index 2727393..0000000 --- a/templates/post/post.html.twig +++ /dev/null @@ -1,3 +0,0 @@ -{{ form_start(form, {'attr': {'novalidate': 'novalidate'}}) }} - {{ form_widget(form) }} -{{ form_end(form) }} diff --git a/templates/post/show.html.twig b/templates/post/show.html.twig new file mode 100644 index 0000000..a332dba --- /dev/null +++ b/templates/post/show.html.twig @@ -0,0 +1,46 @@ +{% extends 'base.html.twig' %} + +{% block title %}Post{% endblock %} + +{% block body %} +

Post

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Id{{ post.id }}
FoundDate{{ post.foundDate ? post.foundDate|date('Y-m-d H:i:s') : '' }}
PublicationDate{{ post.publicationDate ? post.publicationDate|date('Y-m-d H:i:s') : '' }}
Latitude{{ post.latitude }}
Longitude{{ post.longitude }}
Altitude{{ post.altitude }}
Commentary{{ post.commentary }}
+ + back to list + + edit + + {{ include('post/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/species/_delete_form.html.twig b/templates/species/_delete_form.html.twig new file mode 100644 index 0000000..9e7c05a --- /dev/null +++ b/templates/species/_delete_form.html.twig @@ -0,0 +1,4 @@ +
+ + +
diff --git a/templates/species/_form.html.twig b/templates/species/_form.html.twig new file mode 100644 index 0000000..bf20b98 --- /dev/null +++ b/templates/species/_form.html.twig @@ -0,0 +1,4 @@ +{{ form_start(form) }} + {{ form_widget(form) }} + +{{ form_end(form) }} diff --git a/templates/species/edit.html.twig b/templates/species/edit.html.twig new file mode 100644 index 0000000..8e4401b --- /dev/null +++ b/templates/species/edit.html.twig @@ -0,0 +1,13 @@ +{% extends 'base.html.twig' %} + +{% block title %}Edit Species{% endblock %} + +{% block body %} +

Edit Species

+ + {{ include('species/_form.html.twig', {'button_label': 'Update'}) }} + + back to list + + {{ include('species/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/species/index.html.twig b/templates/species/index.html.twig new file mode 100644 index 0000000..39c0d06 --- /dev/null +++ b/templates/species/index.html.twig @@ -0,0 +1,39 @@ +{% extends 'base.html.twig' %} + +{% block title %}Species index{% endblock %} + +{% block body %} +

Species index

+ + + + + + + + + + + + + {% for species in species %} + + + + + + + + {% else %} + + + + {% endfor %} + +
IdScientific_nameVernacular_nameRegionactions
{{ species.id }}{{ species.scientificName }}{{ species.vernacularName }}{{ species.region }} + show + edit +
no records found
+ + Create new +{% endblock %} diff --git a/templates/species/new.html.twig b/templates/species/new.html.twig new file mode 100644 index 0000000..8e58597 --- /dev/null +++ b/templates/species/new.html.twig @@ -0,0 +1,11 @@ +{% extends 'base.html.twig' %} + +{% block title %}New Species{% endblock %} + +{% block body %} +

Create new Species

+ + {{ include('species/_form.html.twig') }} + + back to list +{% endblock %} diff --git a/templates/species/show.html.twig b/templates/species/show.html.twig new file mode 100644 index 0000000..d0b5a78 --- /dev/null +++ b/templates/species/show.html.twig @@ -0,0 +1,34 @@ +{% extends 'base.html.twig' %} + +{% block title %}Species{% endblock %} + +{% block body %} +

Species

+ + + + + + + + + + + + + + + + + + + + +
Id{{ species.id }}
Scientific_name{{ species.scientificName }}
Vernacular_name{{ species.vernacularName }}
Region{{ species.region }}
+ + back to list + + edit + + {{ include('species/_delete_form.html.twig') }} +{% endblock %} diff --git a/templates/species/species.html.twig b/templates/species/species.html.twig deleted file mode 100644 index 2727393..0000000 --- a/templates/species/species.html.twig +++ /dev/null @@ -1,3 +0,0 @@ -{{ form_start(form, {'attr': {'novalidate': 'novalidate'}}) }} - {{ form_widget(form) }} -{{ form_end(form) }} diff --git a/tests/Controller/PostControllerTest.php b/tests/Controller/PostControllerTest.php new file mode 100644 index 0000000..a94c010 --- /dev/null +++ b/tests/Controller/PostControllerTest.php @@ -0,0 +1,142 @@ +client = static::createClient(); + $this->manager = static::getContainer()->get('doctrine')->getManager(); + $this->repository = $this->manager->getRepository(Post::class); + + foreach ($this->repository->findAll() as $object) { + $this->manager->remove($object); + } + + $this->manager->flush(); + } + + public function testIndex(): void + { + $crawler = $this->client->request('GET', $this->path); + + self::assertResponseStatusCodeSame(200); + self::assertPageTitleContains('Post index'); + + // Use the $crawler to perform additional assertions e.g. + // self::assertSame('Some text on the page', $crawler->filter('.p')->first()); + } + + public function testNew(): void + { + $this->markTestIncomplete(); + $this->client->request('GET', sprintf('%snew', $this->path)); + + self::assertResponseStatusCodeSame(200); + + $this->client->submitForm('Save', [ + 'post[foundDate]' => 'Testing', + 'post[latitude]' => 'Testing', + 'post[longitude]' => 'Testing', + 'post[altitude]' => 'Testing', + 'post[commentary]' => 'Testing', + 'post[species]' => 'Testing', + ]); + + self::assertResponseRedirects($this->path); + + self::assertSame(1, $this->repository->count([])); + } + + public function testShow(): void + { + $this->markTestIncomplete(); + $fixture = new Post(); + $fixture->setFoundDate('My Title'); + $fixture->setLatitude('My Title'); + $fixture->setLongitude('My Title'); + $fixture->setAltitude('My Title'); + $fixture->setCommentary('My Title'); + $fixture->setSpecies('My Title'); + + $this->manager->persist($fixture); + $this->manager->flush(); + + $this->client->request('GET', sprintf('%s%s', $this->path, $fixture->getId())); + + self::assertResponseStatusCodeSame(200); + self::assertPageTitleContains('Post'); + + // Use assertions to check that the properties are properly displayed. + } + + public function testEdit(): void + { + $this->markTestIncomplete(); + $fixture = new Post(); + $fixture->setFoundDate('Value'); + $fixture->setLatitude('Value'); + $fixture->setLongitude('Value'); + $fixture->setAltitude('Value'); + $fixture->setCommentary('Value'); + $fixture->setSpecies('Value'); + + $this->manager->persist($fixture); + $this->manager->flush(); + + $this->client->request('GET', sprintf('%s%s/edit', $this->path, $fixture->getId())); + + $this->client->submitForm('Update', [ + 'post[foundDate]' => 'Something New', + 'post[latitude]' => 'Something New', + 'post[longitude]' => 'Something New', + 'post[altitude]' => 'Something New', + 'post[commentary]' => 'Something New', + 'post[species]' => 'Something New', + ]); + + self::assertResponseRedirects('/post/'); + + $fixture = $this->repository->findAll(); + + self::assertSame('Something New', $fixture[0]->getFoundDate()); + self::assertSame('Something New', $fixture[0]->getLatitude()); + self::assertSame('Something New', $fixture[0]->getLongitude()); + self::assertSame('Something New', $fixture[0]->getAltitude()); + self::assertSame('Something New', $fixture[0]->getCommentary()); + self::assertSame('Something New', $fixture[0]->getSpecies()); + } + + public function testRemove(): void + { + $this->markTestIncomplete(); + $fixture = new Post(); + $fixture->setFoundDate('Value'); + $fixture->setLatitude('Value'); + $fixture->setLongitude('Value'); + $fixture->setAltitude('Value'); + $fixture->setCommentary('Value'); + $fixture->setSpecies('Value'); + + $this->manager->persist($fixture); + $this->manager->flush(); + + $this->client->request('GET', sprintf('%s%s', $this->path, $fixture->getId())); + $this->client->submitForm('Delete'); + + self::assertResponseRedirects('/post/'); + self::assertSame(0, $this->repository->count([])); + } +} diff --git a/tests/Controller/SpeciesControllerTest.php b/tests/Controller/SpeciesControllerTest.php new file mode 100644 index 0000000..ef3289e --- /dev/null +++ b/tests/Controller/SpeciesControllerTest.php @@ -0,0 +1,124 @@ +client = static::createClient(); + $this->manager = static::getContainer()->get('doctrine')->getManager(); + $this->repository = $this->manager->getRepository(Species::class); + + foreach ($this->repository->findAll() as $object) { + $this->manager->remove($object); + } + + $this->manager->flush(); + } + + public function testIndex(): void + { + $crawler = $this->client->request('GET', $this->path); + + self::assertResponseStatusCodeSame(200); + self::assertPageTitleContains('Species index'); + + // Use the $crawler to perform additional assertions e.g. + // self::assertSame('Some text on the page', $crawler->filter('.p')->first()); + } + + public function testNew(): void + { + $this->markTestIncomplete(); + $this->client->request('GET', sprintf('%snew', $this->path)); + + self::assertResponseStatusCodeSame(200); + + $this->client->submitForm('Save', [ + 'species[scientific_name]' => 'Testing', + 'species[vernacular_name]' => 'Testing', + 'species[region]' => 'Testing', + ]); + + self::assertResponseRedirects($this->path); + + self::assertSame(1, $this->repository->count([])); + } + + public function testShow(): void + { + $this->markTestIncomplete(); + $fixture = new Species(); + $fixture->setScientific_name('My Title'); + $fixture->setVernacular_name('My Title'); + $fixture->setRegion('My Title'); + + $this->manager->persist($fixture); + $this->manager->flush(); + + $this->client->request('GET', sprintf('%s%s', $this->path, $fixture->getId())); + + self::assertResponseStatusCodeSame(200); + self::assertPageTitleContains('Species'); + + // Use assertions to check that the properties are properly displayed. + } + + public function testEdit(): void + { + $this->markTestIncomplete(); + $fixture = new Species(); + $fixture->setScientific_name('Value'); + $fixture->setVernacular_name('Value'); + $fixture->setRegion('Value'); + + $this->manager->persist($fixture); + $this->manager->flush(); + + $this->client->request('GET', sprintf('%s%s/edit', $this->path, $fixture->getId())); + + $this->client->submitForm('Update', [ + 'species[scientific_name]' => 'Something New', + 'species[vernacular_name]' => 'Something New', + 'species[region]' => 'Something New', + ]); + + self::assertResponseRedirects('/species/'); + + $fixture = $this->repository->findAll(); + + self::assertSame('Something New', $fixture[0]->getScientific_name()); + self::assertSame('Something New', $fixture[0]->getVernacular_name()); + self::assertSame('Something New', $fixture[0]->getRegion()); + } + + public function testRemove(): void + { + $this->markTestIncomplete(); + $fixture = new Species(); + $fixture->setScientific_name('Value'); + $fixture->setVernacular_name('Value'); + $fixture->setRegion('Value'); + + $this->manager->persist($fixture); + $this->manager->flush(); + + $this->client->request('GET', sprintf('%s%s', $this->path, $fixture->getId())); + $this->client->submitForm('Delete'); + + self::assertResponseRedirects('/species/'); + self::assertSame(0, $this->repository->count([])); + } +}