diff --git a/src/DataFixtures/GroupFixtures.php b/src/DataFixtures/GroupFixtures.php index 129f6bad594691f87496dce50214689cf6ba4866..a6f02c4d850d3658aadb14dab3259ecfb24b1c17 100644 --- a/src/DataFixtures/GroupFixtures.php +++ b/src/DataFixtures/GroupFixtures.php @@ -7,33 +7,43 @@ use App\Entity\User; use Doctrine\Bundle\FixturesBundle\Fixture; use Doctrine\Common\DataFixtures\DependentFixtureInterface; use Doctrine\Persistence\ObjectManager; -use Symfony\Contracts\Translation\TranslatorInterface; class GroupFixtures extends Fixture implements DependentFixtureInterface { - private TranslatorInterface $translator; - - public function __construct(TranslatorInterface $translator) - { - $this->translator = $translator; - } - public function load(ObjectManager $manager): void { $user_repository = $manager->getRepository(User::class); - $group_author = $user_repository->findOneBy(['email' => "defaultUser@localhost.com"]); - if (! $group_author instanceof User) { + $group_author_1 = $user_repository->findOneBy(['email' => "defaultUser@localhost.com"]); + if (! $group_author_1 instanceof User) { + throw new \Exception("User does not exist."); + } + + $group_author_2 = $user_repository->findOneBy(['email' => "defaultUser2@localhost.com"]); + if (! $group_author_2 instanceof User) { throw new \Exception("User does not exist."); } - //TODO: refacto with real group - $group_all = new Group(); - $group_all->setName($this->translator->trans('groups.filter.no_filter')); - $group_all->setAuthor($group_author); - $manager->persist($group_all); + $group_pop_1 = $this->createGroup($group_author_1, "Pop", $manager); + $group_rock = $this->createGroup($group_author_1, "Rock", $manager); + + $group_pop_2 = $this->createGroup($group_author_2, "Pop", $manager); + + $author_1_capsules = $group_author_1->getCapsules(); + $author_1_capsules->toArray()[0]->addGroup($group_pop_1); + $manager->flush(); } + private function createGroup(User $author, string $group_name, ObjectManager $manager): Group + { + $group = new Group(); + $group->setName($group_name); + $group->setAuthor($author); + $manager->persist($group); + + return $group; + } + public function getDependencies(): array { return [ diff --git a/tests/functional/CapsuleEditorControllerTest.php b/tests/functional/CapsuleEditorControllerTest.php index 2be2f65302c2b9a781fe24ccd080fe31dbc97f08..b843c959b01bad2f5dfb185151ae14d236f3eab4 100644 --- a/tests/functional/CapsuleEditorControllerTest.php +++ b/tests/functional/CapsuleEditorControllerTest.php @@ -30,7 +30,6 @@ class CapsuleEditorControllerTest extends WebTestCase ->get('doctrine') ->getManager(); - $this->user_repository = $this->object_manager->getRepository(User::class); $this->capsule_repository = $this->object_manager->getRepository(Capsule::class); diff --git a/tests/functional/CapsuleGroupControllerTest.php b/tests/functional/CapsuleGroupControllerTest.php new file mode 100644 index 0000000000000000000000000000000000000000..601fca565e6e59d62c91addbfa2b454f80804c64 --- /dev/null +++ b/tests/functional/CapsuleGroupControllerTest.php @@ -0,0 +1,143 @@ +<?php + +namespace App\Tests\functional; + +use App\Entity\Capsule; +use App\Entity\Group; +use App\Entity\User; +use App\Repository\CapsuleRepository; +use App\Repository\GroupRepository; +use App\Repository\UserRepository; +use Doctrine\Persistence\ObjectManager; +use Symfony\Bundle\FrameworkBundle\KernelBrowser; +use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; + +class CapsuleGroupControllerTest extends WebTestCase +{ + private KernelBrowser $client; + private ObjectManager $object_manager; + private UserRepository $user_repository; /** @phpstan-ignore-line */ + private CapsuleRepository $capsule_repository; /** @phpstan-ignore-line */ + private GroupRepository $group_repository; + private User $user_1; + private User $user_2; + private Group $group_pop_own_by_user_1; + private Group $group_rock_own_by_user_1; + private Capsule $capsule; + + protected function setUp(): void + { + self::ensureKernelShutdown(); + + $this->client = static::createClient(); + + $this->object_manager = $this->client->getContainer() + ->get('doctrine') + ->getManager(); + + $this->user_repository = $this->object_manager->getRepository(User::class); + $this->capsule_repository = $this->object_manager->getRepository(Capsule::class); + $this->group_repository = $this->object_manager->getRepository(Group::class); + + $this->setUsers(); + $this->setCapsule(); + $this->setCapsuleGroupPop(); + $this->setCapsuleGroupRock(); + } + + protected function tearDown(): void + { + parent::tearDown(); + self::ensureKernelShutdown(); + } + + public function testUserShouldNotBeAbleToCreateACapsuleGroupWithExistingGroupName(): void + { + $this->client->loginUser($this->user_1); + $uri = '/capsule/' . $this->capsule->getId() . '/groups/create'; + $crawler = $this->client->request('GET', $uri); + $this->assertResponseIsSuccessful(); + + $this->client->enableProfiler(); + $submit_button = $crawler->selectButton('Create a new group'); + $form = $submit_button->form(); + $this->assertContains($this->group_pop_own_by_user_1, $this->user_1->getGroups()->toArray()); + + $form['create_capsule_groups_form[name]'] = $this->group_pop_own_by_user_1->getName(); + $this->client->submit($form); + + $this->assertFalse($this->client->getResponse()->isRedirect()); + } + + public function testUserShouldBeAbleToCreateACapsuleGroupWithTheSameGroupNameUsedByAnotherUser(): void + { + $this->client->loginUser($this->user_2); + $uri = '/capsule/' . $this->capsule->getId() . '/groups/create'; + $crawler = $this->client->request('GET', $uri); + $this->assertResponseIsSuccessful(); + + $this->client->enableProfiler(); + $submit_button = $crawler->selectButton('Create a new group'); + $form = $submit_button->form(); + $this->assertContains($this->group_pop_own_by_user_1, $this->user_1->getGroups()->toArray()); + + $form['create_capsule_groups_form[name]'] = $this->group_rock_own_by_user_1->getName(); + $this->client->submit($form); + + $this->assertTrue($this->client->getResponse()->isRedirect()); + } + + private function setUsers(): void + { + $verified_user_1 = $this->user_repository + ->findOneBy(['email' => 'defaultUser@localhost.com']); + + if (! $verified_user_1 instanceof User) { + throw new \Exception("User does not exist."); + } + + $this->user_1 = $verified_user_1; + + $user_2 = $this->user_repository + ->findOneBy(['email' => 'defaultUser2@localhost.com']); + + if (! $user_2 instanceof User) { + throw new \Exception("User does not exist."); + } + + $this->user_2 = $user_2; + } + + private function setCapsule(): void + { + $capsule = $this->capsule_repository->findOneBy(['name' => 'Pomme']); + + if (! $capsule instanceof Capsule) { + throw new \Exception("Capsule does not exist."); + } + + $this->capsule = $capsule; + } + + private function setCapsuleGroupPop(): void + { + $group_pop = $this->group_repository->findOneBy(['name' => 'Pop', 'author' => $this->user_1]); + + if (! $group_pop instanceof Group) { + throw new \Exception("Group does not exist."); + } + + $this->group_pop_own_by_user_1 = $group_pop; + } + + private function setCapsuleGroupRock(): void + { + $group_rock = $this->group_repository->findOneBy(['name' => 'Rock', 'author' => $this->user_1]); + + if (! $group_rock instanceof Group) { + throw new \Exception("Group does not exist."); + } + + $this->group_rock_own_by_user_1 = $group_rock; + } +}