Spaces:
No application file
No application file
| declare(strict_types=1); | |
| namespace Mautic\LeadBundle\Tests\Functional\Controller; | |
| use Mautic\CoreBundle\Helper\CoreParametersHelper; | |
| use Mautic\CoreBundle\Test\MauticMysqlTestCase; | |
| use Mautic\LeadBundle\Command\ContactScheduledExportCommand; | |
| use Mautic\LeadBundle\Entity\ContactExportScheduler; | |
| use Mautic\LeadBundle\Entity\Lead; | |
| use Mautic\UserBundle\Entity\Role; | |
| use Mautic\UserBundle\Entity\User; | |
| use PHPUnit\Framework\Assert; | |
| use Symfony\Component\HttpFoundation\Request; | |
| use Symfony\Component\Routing\Generator\UrlGeneratorInterface; | |
| class LeadControllerTest extends MauticMysqlTestCase | |
| { | |
| public const USERNAME = 'jhony'; | |
| /** | |
| * @var array<string> | |
| */ | |
| private array $filePaths = []; | |
| protected function setUp(): void | |
| { | |
| $this->configParams['contact_export_dir'] = '/tmp'; | |
| parent::setUp(); | |
| } | |
| protected function beforeTearDown(): void | |
| { | |
| foreach ($this->filePaths as $filePath) { | |
| if (file_exists($filePath)) { | |
| unlink($filePath); | |
| } | |
| } | |
| } | |
| public function testContactExportIsScheduledForCsvFileType(): void | |
| { | |
| $this->createContacts(); | |
| $this->client->request( | |
| Request::METHOD_POST, | |
| 's/contacts/batchExport', | |
| ['filetype' => 'csv'] | |
| ); | |
| Assert::assertTrue($this->client->getResponse()->isOk()); | |
| $contactExportSchedulerRows = $this->checkContactExportScheduler(1); | |
| /** @var ContactExportScheduler $contactExportScheduler */ | |
| $contactExportScheduler = $contactExportSchedulerRows[0]; | |
| $this->testSymfonyCommand(ContactScheduledExportCommand::COMMAND_NAME, ['--ids' => $contactExportScheduler->getId()]); | |
| $this->checkContactExportScheduler(0); | |
| /** @var CoreParametersHelper $coreParametersHelper */ | |
| $coreParametersHelper = static::getContainer()->get('mautic.helper.core_parameters'); | |
| $zipFileName = 'contacts_export_'.$contactExportScheduler->getScheduledDateTime() | |
| ->format('Y_m_d_H_i_s').'.zip'; | |
| $this->filePaths[] = $filePath = $coreParametersHelper->get('contact_export_dir').'/'.$zipFileName; | |
| Assert::assertFileExists($filePath); | |
| $link = $this->router->generate( | |
| 'mautic_contact_export_download', | |
| ['fileName' => basename($filePath)], | |
| UrlGeneratorInterface::ABSOLUTE_URL | |
| ); | |
| $this->client->request(Request::METHOD_GET, $link); | |
| Assert::assertTrue($this->client->getResponse()->isOk()); | |
| $notFoundLink = $this->router->generate( | |
| 'mautic_contact_export_download', | |
| ['fileName' => 'non_existing.zip'], | |
| UrlGeneratorInterface::ABSOLUTE_URL | |
| ); | |
| $this->client->request(Request::METHOD_GET, $notFoundLink); | |
| Assert::assertTrue($this->client->getResponse()->isNotFound()); | |
| } | |
| private function createContacts(): void | |
| { | |
| $contacts = []; | |
| for ($i = 1; $i <= 2; ++$i) { | |
| $contact = new Lead(); | |
| $contact | |
| ->setFirstname('ContactFirst'.$i) | |
| ->setLastname('ContactLast'.$i) | |
| ->setEmail('FirstLast'.$i.'@email.com'); | |
| $contacts[] = $contact; | |
| } | |
| $leadModel = static::getContainer()->get('mautic.lead.model.lead'); | |
| $leadModel->saveEntities($contacts); | |
| } | |
| /** | |
| * @return array<mixed> | |
| */ | |
| private function checkContactExportScheduler(int $count): array | |
| { | |
| $repo = $this->em->getRepository(ContactExportScheduler::class); | |
| $allRows = $repo->findAll(); | |
| Assert::assertCount($count, $allRows); | |
| return $allRows; | |
| } | |
| public function testAccessContactQuickAddWithPermission(): void | |
| { | |
| $this->setAdminUser(); | |
| $this->client->request(Request::METHOD_GET, '/s/contacts/quickAdd'); | |
| $this->assertResponseStatusCodeSame(200, (string) $this->client->getResponse()->getStatusCode()); | |
| } | |
| private function setAdminUser(): void | |
| { | |
| $this->loginUser('admin'); | |
| $this->client->setServerParameter('PHP_AUTH_USER', 'admin'); | |
| $this->client->setServerParameter('PHP_AUTH_PW', 'mautic'); | |
| } | |
| public function testAccessContactQuickAddWithNoPermission(): void | |
| { | |
| $this->createAndLoginUser(); | |
| $this->client->request(Request::METHOD_GET, '/s/contacts/quickAdd'); | |
| $this->assertResponseStatusCodeSame(403, (string) $this->client->getResponse()->getStatusCode()); | |
| } | |
| public function testAccessContactBatchOwnersNoPermission(): void | |
| { | |
| $this->createAndLoginUser(); | |
| $this->client->request(Request::METHOD_GET, '/s/contacts/batchOwners'); | |
| $this->assertResponseStatusCodeSame(403, (string) $this->client->getResponse()->getStatusCode()); | |
| } | |
| public function testAccessContactBatchOwnersPermission(): void | |
| { | |
| $this->setAdminUser(); | |
| $this->client->request(Request::METHOD_GET, '/s/contacts/batchOwners'); | |
| $this->assertResponseStatusCodeSame(200, (string) $this->client->getResponse()->getStatusCode()); | |
| } | |
| private function createAndLoginUser(): User | |
| { | |
| // Create non-admin role | |
| $role = $this->createRole(); | |
| // Create non-admin user | |
| $user = $this->createUser($role); | |
| $this->em->flush(); | |
| $this->em->detach($role); | |
| $this->loginUser(self::USERNAME); | |
| $this->client->setServerParameter('PHP_AUTH_USER', self::USERNAME); | |
| $this->client->setServerParameter('PHP_AUTH_PW', 'mautic'); | |
| return $user; | |
| } | |
| private function createRole(bool $isAdmin = false): Role | |
| { | |
| $role = new Role(); | |
| $role->setName('Role'); | |
| $role->setIsAdmin($isAdmin); | |
| $this->em->persist($role); | |
| return $role; | |
| } | |
| private function createUser(Role $role): User | |
| { | |
| $user = new User(); | |
| $user->setFirstName('Jhony'); | |
| $user->setLastName('Doe'); | |
| $user->setUsername(self::USERNAME); | |
| $user->setEmail('john.doe@email.com'); | |
| $encoder = self::$container->get('security.encoder_factory')->getEncoder($user); | |
| $user->setPassword($encoder->encodePassword('mautic', null)); | |
| $user->setRole($role); | |
| $this->em->persist($user); | |
| return $user; | |
| } | |
| } | |