Skip to content
Snippets Groups Projects
Select Git revision
  • 69af1048d940ae242f9191e212025a92b92efeaa
  • main default
  • 35-cgu
  • 34-peertube-support
  • 27-add-autoplay-to-iframe
  • 33-bug-on-youtube-embed-urls
  • RC-Rekall-v1.1-fix_lpo
  • tuleap-140-go-back-to-my-capsules-page-when-i-m-on-capsule-preview-page
  • RC-Rekall-v1.2-fix10
  • RC-Rekall-v1.2-fix9
  • RC-Rekall-v1.2-fix8
  • RC-Rekall-v1.2-fix7
  • RC-Rekall-v1.2-fix6
  • RC-Rekall-v1.2-fix5
  • RC-Rekall-v1.2-fix4
  • RC-Rekall-v1.2-fix3
  • RC-Rekall-v1.2-fix2
  • RC-Rekall-v1.2-fix1
  • RC-Rekall-v1.1-fix-3
  • RC-Rekall-v1.1-fix-2
  • RC-Rekall-v1.1-fix-1
  • RC-Rekall-v1.1-delivered
  • preprod20220209-1535
23 results

CapsuleEditorControllerTest.php

Blame
  • CapsuleEditorControllerTest.php 7.36 KiB
    <?php
    
    namespace App\Tests\functional;
    
    use App\Entity\Capsule;
    use App\Entity\User;
    use App\Repository\CapsuleRepository;
    use App\Repository\UserRepository;
    use Doctrine\Persistence\ObjectManager;
    use Symfony\Bundle\FrameworkBundle\KernelBrowser;
    use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
    
    class CapsuleEditorControllerTest extends WebTestCase
    {
        private KernelBrowser $client;
        private ObjectManager $object_manager;
        private User $user_author;
        private User $editor_non_author;
        private UserRepository $user_repository; /** @phpstan-ignore-line */
        private CapsuleRepository $capsule_repository; /** @phpstan-ignore-line */
        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->setUsers();
            $this->setCapsule();
        }
    
        protected function tearDown(): void
        {
            parent::tearDown();
            self::ensureKernelShutdown();
        }
    
        public function testAuthorShouldBeAbleToDeleteACapsule(): void
        {
            $this->client->loginUser($this->user_author);
            $this->client->request('GET', '/en/capsule/delete/' . $this->capsule->getId());
    
            $this->assertResponseIsSuccessful();
        }
    
        public function testEditorNonAuthorShouldNotBeAbleToDeleteACapsule(): void
        {
            $this->client->loginUser($this->editor_non_author);
            $this->client->request('GET', '/en/capsule/delete/' . $this->capsule->getId());
    
            $this->assertResponseRedirects('/en/my_capsules', 302);
        }
    
        public function testAuthorShouldBeAbleToAddANewEditorForACapsule(): void
        {
            $uri = '/en/capsule/' . $this->capsule->getId() . '/editors';
            $this->client->loginUser($this->user_author);
            $crawler = $this->client->request('GET', $uri);
    
            $this->assertResponseIsSuccessful();
    
            $this->client->enableProfiler();
            $submit_button = $crawler->selectButton('Validate');
            $form = $submit_button->form();
            $form['capsule_editors_form[email]'] = $this->editor_non_author->getEmail();
            $this->client->submit($form);
    
            $this->assertResponseRedirects($uri, 302);
            $this->client->followRedirect();
            $this->assertResponseIsSuccessful($uri);
    
            $capsule_refreshed = $this->capsule_repository->findOneBy(['id' => $this->capsule->getId()]);
            if (! $capsule_refreshed instanceof Capsule) {
                throw new \Exception("Capsule does not exist.");
            }
    
            $editor = $this->user_repository->findOneBy(['id' => $this->editor_non_author->getId()]);
            $this->assertSame($editor, $capsule_refreshed->getEditors()->last());
        }
    
        public function testEditorShouldBeAbleToAccessTheCapsuleEditorsPage(): void
        {
            $this->capsule->addEditor($this->editor_non_author);
            $uri = '/en/capsule/' . $this->capsule->getId() . '/editors';
            $this->client->loginUser($this->editor_non_author);
    
            $this->client->request('GET', $uri);
    
            $this->assertResponseIsSuccessful();
        }
    
        public function testNonRegisteredUserAddedAsEditorShouldReceiveAnEmail(): void
        {
            $uri = '/en/capsule/' . $this->capsule->getId() . '/editors';
            $this->client->loginUser($this->user_author);
            $crawler = $this->client->request('GET', $uri);
    
            $this->assertResponseIsSuccessful();
    
            $this->client->enableProfiler();
            $submit_button = $crawler->selectButton('Validate');
            $non_registered_user_email = "non_registered_user@email.fr";
            $form = $submit_button->form();
            $form['capsule_editors_form[email]'] = $non_registered_user_email;
            $this->client->submit($form);
    
            $this->assertResponseRedirects($uri, 302);
    
            $this->assertEmailCount(1);
            $emailMessage = $this->getMailerMessage(0);
    
            if (null === $emailMessage) {
                throw new \Exception("Email message could not be found");
            }
    
            $this->assertEmailAddressContains(
                $emailMessage,
                'To',
                $non_registered_user_email
            );
    
            $this->client->followRedirect();
            $this->assertResponseIsSuccessful($uri);
        }
    
        public function testRegisteredUserShouldReceiveAnEmailWithCapsuleEditionLink(): void
        {
            $uri = '/en/capsule/' . $this->capsule->getId() . '/editors';
            $this->client->loginUser($this->user_author);
            $crawler = $this->client->request('GET', $uri);
    
            $this->assertResponseIsSuccessful();
    
            $this->client->enableProfiler();
            $submit_button = $crawler->selectButton('Validate');
            $form = $submit_button->form();
            $form['capsule_editors_form[email]'] = $this->editor_non_author->getEmail();
            $this->client->submit($form);
    
            $this->assertResponseRedirects($uri, 302);
    
            $this->assertEmailCount(1);
            $emailMessage = $this->getMailerMessage(0);
    
            if (null === $emailMessage) {
                throw new \Exception("Email message could not be found");
            }
    
            $this->assertEmailAddressContains(
                $emailMessage,
                'To',
                $this->editor_non_author->getEmail()
            );
    
            $this->client->followRedirect();
            $this->assertResponseIsSuccessful($uri);
        }
    
        public function testAlreadyAddedEditorShouldNotReceiveAnEmail(): void
        {
            $this->capsule->addEditor($this->editor_non_author);
            $this->object_manager->persist($this->capsule);
            $this->object_manager->flush();
    
            $this->assertContains($this->editor_non_author, $this->capsule->getEditors()->toArray());
            $uri = '/en/capsule/' . $this->capsule->getId() . '/editors';
            $this->client->loginUser($this->user_author);
            $crawler = $this->client->request('GET', $uri);
    
            $this->assertResponseIsSuccessful();
    
            $this->client->enableProfiler();
            $submit_button = $crawler->selectButton('Validate');
            $form = $submit_button->form();
            $form['capsule_editors_form[email]'] = $this->editor_non_author->getEmail();
            $this->client->submit($form);
    
            $this->assertEmailCount(1);
            $this->assertResponseRedirects($uri, 302);
    
            $this->client->followRedirect();
            $this->assertResponseIsSuccessful($uri);
        }
    
        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_author = $verified_user_1;
    
            $verified_user_2 = $this->user_repository
                ->findOneBy(['email' => 'defaultUser2@localhost.com']);
    
            if (! $verified_user_2 instanceof User) {
                throw new \Exception("User does not exist.");
            }
    
            $this->editor_non_author = $verified_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;
        }
    }