Skip to content
Snippets Groups Projects
Commit 9d0b4f4d authored by Camille Simiand's avatar Camille Simiand
Browse files

Functional tests

parent e3c8eb91
No related branches found
No related tags found
1 merge request!59tuleap-170-capsule-groups-should-be-own-by-user
...@@ -7,33 +7,43 @@ use App\Entity\User; ...@@ -7,33 +7,43 @@ use App\Entity\User;
use Doctrine\Bundle\FixturesBundle\Fixture; use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\DataFixtures\DependentFixtureInterface; use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Doctrine\Persistence\ObjectManager; use Doctrine\Persistence\ObjectManager;
use Symfony\Contracts\Translation\TranslatorInterface;
class GroupFixtures extends Fixture implements DependentFixtureInterface class GroupFixtures extends Fixture implements DependentFixtureInterface
{ {
private TranslatorInterface $translator;
public function __construct(TranslatorInterface $translator)
{
$this->translator = $translator;
}
public function load(ObjectManager $manager): void public function load(ObjectManager $manager): void
{ {
$user_repository = $manager->getRepository(User::class); $user_repository = $manager->getRepository(User::class);
$group_author = $user_repository->findOneBy(['email' => "defaultUser@localhost.com"]); $group_author_1 = $user_repository->findOneBy(['email' => "defaultUser@localhost.com"]);
if (! $group_author instanceof User) { 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."); throw new \Exception("User does not exist.");
} }
//TODO: refacto with real group $group_pop_1 = $this->createGroup($group_author_1, "Pop", $manager);
$group_all = new Group(); $group_rock = $this->createGroup($group_author_1, "Rock", $manager);
$group_all->setName($this->translator->trans('groups.filter.no_filter'));
$group_all->setAuthor($group_author); $group_pop_2 = $this->createGroup($group_author_2, "Pop", $manager);
$manager->persist($group_all);
$author_1_capsules = $group_author_1->getCapsules();
$author_1_capsules->toArray()[0]->addGroup($group_pop_1);
$manager->flush(); $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 public function getDependencies(): array
{ {
return [ return [
......
...@@ -30,7 +30,6 @@ class CapsuleEditorControllerTest extends WebTestCase ...@@ -30,7 +30,6 @@ class CapsuleEditorControllerTest extends WebTestCase
->get('doctrine') ->get('doctrine')
->getManager(); ->getManager();
$this->user_repository = $this->object_manager->getRepository(User::class); $this->user_repository = $this->object_manager->getRepository(User::class);
$this->capsule_repository = $this->object_manager->getRepository(Capsule::class); $this->capsule_repository = $this->object_manager->getRepository(Capsule::class);
......
<?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;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment