Spaces:
No application file
No application file
| namespace Mautic\FormBundle\Tests; | |
| use Doctrine\ORM\EntityManager; | |
| use Mautic\CampaignBundle\Membership\MembershipManager; | |
| use Mautic\CampaignBundle\Model\CampaignModel; | |
| use Mautic\CoreBundle\Doctrine\Helper\ColumnSchemaHelper; | |
| use Mautic\CoreBundle\Doctrine\Helper\TableSchemaHelper; | |
| use Mautic\CoreBundle\Entity\IpAddress; | |
| use Mautic\CoreBundle\Helper\CoreParametersHelper; | |
| use Mautic\CoreBundle\Helper\IpLookupHelper; | |
| use Mautic\CoreBundle\Helper\ThemeHelperInterface; | |
| use Mautic\CoreBundle\Helper\UserHelper; | |
| use Mautic\CoreBundle\Security\Permissions\CorePermissions; | |
| use Mautic\CoreBundle\Translation\Translator; | |
| use Mautic\CoreBundle\Twig\Helper\DateHelper; | |
| use Mautic\FormBundle\Collector\MappedObjectCollectorInterface; | |
| use Mautic\FormBundle\Entity\FormRepository; | |
| use Mautic\FormBundle\Entity\Submission; | |
| use Mautic\FormBundle\Entity\SubmissionRepository; | |
| use Mautic\FormBundle\Event\Service\FieldValueTransformer; | |
| use Mautic\FormBundle\Helper\FormFieldHelper; | |
| use Mautic\FormBundle\Helper\FormUploader; | |
| use Mautic\FormBundle\Model\ActionModel; | |
| use Mautic\FormBundle\Model\FieldModel; | |
| use Mautic\FormBundle\Model\FormModel; | |
| use Mautic\FormBundle\Model\SubmissionModel; | |
| use Mautic\FormBundle\Validator\UploadFieldValidator; | |
| use Mautic\LeadBundle\Deduplicate\ContactMerger; | |
| use Mautic\LeadBundle\Entity\Lead; | |
| use Mautic\LeadBundle\Entity\LeadRepository; | |
| use Mautic\LeadBundle\Helper\PrimaryCompanyHelper; | |
| use Mautic\LeadBundle\Model\CompanyModel; | |
| use Mautic\LeadBundle\Model\FieldModel as LeadFieldModel; | |
| use Mautic\LeadBundle\Model\LeadModel; | |
| use Mautic\LeadBundle\Tracker\ContactTracker; | |
| use Mautic\LeadBundle\Tracker\Service\DeviceTrackingService\DeviceTrackingServiceInterface; | |
| use Mautic\PageBundle\Model\PageModel; | |
| use Mautic\UserBundle\Entity\User; | |
| use PHPUnit\Framework\MockObject\MockObject; | |
| use PHPUnit\Framework\TestCase; | |
| use Psr\Log\LoggerInterface; | |
| use Symfony\Component\EventDispatcher\EventDispatcher; | |
| use Symfony\Component\HttpFoundation\File\UploadedFile; | |
| use Symfony\Component\HttpFoundation\RequestStack; | |
| use Symfony\Component\Routing\Generator\UrlGeneratorInterface; | |
| use Symfony\Component\Routing\RouterInterface; | |
| use Twig\Environment; | |
| /** | |
| * @deprecated since Mautic 5.0, to be removed in 6.0 with no replacement. | |
| */ | |
| class FormTestAbstract extends TestCase | |
| { | |
| protected static $mockId = 123; | |
| protected static $mockName = 'Mock test name'; | |
| protected $mockTrackingId; | |
| protected $formRepository; | |
| protected $leadFieldModel; | |
| /** | |
| * @var MockObject|LeadModel | |
| */ | |
| protected $leadModel; | |
| /** | |
| * @var MockObject|FormFieldHelper | |
| */ | |
| protected $fieldHelper; | |
| /** | |
| * @var CoreParametersHelper|MockObject | |
| */ | |
| private $coreParametersHelper; | |
| protected function setUp(): void | |
| { | |
| $this->mockTrackingId = hash('sha1', uniqid((string) mt_rand())); | |
| } | |
| /** | |
| * @return FormModel | |
| */ | |
| protected function getFormModel() | |
| { | |
| $requestStack = $this->createMock(RequestStack::class); | |
| $twigMock = $this->createMock(Environment::class); | |
| $themeHelper = $this->createMock(ThemeHelperInterface::class); | |
| $formActionModel = $this->createMock(ActionModel::class); | |
| $formFieldModel = $this->createMock(FieldModel::class); | |
| $this->leadModel = $this->createMock(LeadModel::class); | |
| $this->fieldHelper = $this->createMock(FormFieldHelper::class); | |
| $primaryCompanyHelper = $this->createMock(PrimaryCompanyHelper::class); | |
| $dispatcher = $this->createMock(EventDispatcher::class); | |
| $translator = $this->createMock(Translator::class); | |
| $entityManager = $this->createMock(EntityManager::class); | |
| $formUploaderMock = $this->createMock(FormUploader::class); | |
| $contactTracker = $this->createMock(ContactTracker::class); | |
| $this->leadFieldModel = $this->createMock(LeadFieldModel::class); | |
| $this->formRepository = $this->createMock(FormRepository::class); | |
| $columnSchemaHelper = $this->createMock(ColumnSchemaHelper::class); | |
| $tableSchemaHelper = $this->createMock(TableSchemaHelper::class); | |
| $mappedObjectCollector = $this->createMock(MappedObjectCollectorInterface::class); | |
| $contactTracker->expects($this | |
| ->any()) | |
| ->method('getContact') | |
| ->willReturn($this | |
| ->returnValue(['id' => self::$mockId, 'name' => self::$mockName]) | |
| ); | |
| $entityManager->expects($this | |
| ->any()) | |
| ->method('getRepository') | |
| ->will( | |
| $this->returnValueMap( | |
| [ | |
| [\Mautic\FormBundle\Entity\Form::class, $this->formRepository], | |
| ] | |
| ) | |
| ); | |
| $formModel = new FormModel( | |
| $requestStack, | |
| $twigMock, | |
| $themeHelper, | |
| $formActionModel, | |
| $formFieldModel, | |
| $this->fieldHelper, | |
| $primaryCompanyHelper, | |
| $this->leadFieldModel, | |
| $formUploaderMock, | |
| $contactTracker, | |
| $columnSchemaHelper, | |
| $tableSchemaHelper, | |
| $mappedObjectCollector, | |
| $entityManager, | |
| $this->createMock(CorePermissions::class), | |
| $dispatcher, | |
| $this->createMock(UrlGeneratorInterface::class), | |
| $translator, | |
| $this->createMock(UserHelper::class), | |
| $this->createMock(LoggerInterface::class), | |
| $this->createMock(CoreParametersHelper::class), | |
| ); | |
| return $formModel; | |
| } | |
| /** | |
| * @return SubmissionModel | |
| */ | |
| protected function getSubmissionModel() | |
| { | |
| $ipLookupHelper = $this->createMock(IpLookupHelper::class); | |
| $twigMock = $this->createMock(Environment::class); | |
| $formModel = $this->createMock(FormModel::class); | |
| $pageModel = $this->createMock(PageModel::class); | |
| $leadModel = $this->createMock(LeadModel::class); | |
| $campaignModel = $this->createMock(CampaignModel::class); | |
| $membershipManager = $this->createMock(MembershipManager::class); | |
| $leadFieldModel = $this->createMock(LeadFieldModel::class); | |
| $companyModel = $this->createMock(CompanyModel::class); | |
| $fieldHelper = $this->createMock(FormFieldHelper::class); | |
| $dispatcher = $this->createMock(EventDispatcher::class); | |
| $translator = $this->createMock(Translator::class); | |
| $this->coreParametersHelper = $this->createMock(CoreParametersHelper::class); | |
| $dateHelper = new DateHelper( | |
| 'F j, Y g:i a T', | |
| 'D, M d', | |
| 'F j, Y', | |
| 'g:i a', | |
| $translator, | |
| $this->coreParametersHelper | |
| ); | |
| $contactTracker = $this->createMock(ContactTracker::class); | |
| $userHelper = $this->createMock(UserHelper::class); | |
| $entityManager = $this->createMock(EntityManager::class); | |
| $formRepository = $this->createMock(SubmissionRepository::class); | |
| $leadRepository = $this->createMock(LeadRepository::class); | |
| $mockLogger = $this->createMock(LoggerInterface::class); | |
| $uploadFieldValidatorMock = $this->createMock(UploadFieldValidator::class); | |
| $formUploaderMock = $this->createMock(FormUploader::class); | |
| $deviceTrackingService = $this->createMock(DeviceTrackingServiceInterface::class); | |
| $file1Mock = $this->createMock(UploadedFile::class); | |
| $router = $this->createMock(RouterInterface::class); | |
| $contactMerger = $this->createMock(ContactMerger::class); | |
| $router->method('generate')->willReturn('absolute/path/somefile.jpg'); | |
| $lead = new Lead(); | |
| $lead->setId(123); | |
| $leadFieldModel->expects($this->any()) | |
| ->method('getUniqueIdentifierFields') | |
| ->willReturn(['eyJpc1B1Ymxpc2hlZCI6dHJ1ZSwiaXNVbmlxdWVJZGVudGlmZXIiOnRydWUsIm9iamVjdCI6ImxlYWQifQ==' => ['email' => 'Email']]); | |
| $contactTracker->expects($this | |
| ->any()) | |
| ->method('getContact') | |
| ->willReturn($lead); | |
| $userHelper->expects($this->any()) | |
| ->method('getUser') | |
| ->willReturn(new User()); | |
| $mockLeadField['email'] = [ | |
| 'label' => 'Email', | |
| 'alias' => 'email', | |
| 'type' => 'email', | |
| 'group' => 'core', | |
| 'group_label' => 'Core', | |
| 'defaultValue' => '', | |
| 'properties' => [], | |
| ]; | |
| $leadFieldModel->expects($this->any()) | |
| ->method('getFieldListWithProperties') | |
| ->willReturn($mockLeadField); | |
| $entityManager->expects($this->any()) | |
| ->method('getRepository') | |
| ->will( | |
| $this->returnValueMap( | |
| [ | |
| [Lead::class, $leadRepository], | |
| [Submission::class, $formRepository], | |
| ] | |
| ) | |
| ); | |
| $leadRepository->expects($this->any()) | |
| ->method('getLeadsByUniqueFields') | |
| ->willReturn(null); | |
| $file1Mock->expects($this->any()) | |
| ->method('getClientOriginalName') | |
| ->willReturn('test.jpg'); | |
| $uploadFieldValidatorMock->expects($this->any()) | |
| ->method('processFileValidation') | |
| ->willReturn($file1Mock); | |
| $ipLookupHelper->expects($this->any()) | |
| ->method('getIpAddress') | |
| ->willReturn(new IpAddress()); | |
| $companyModel->expects($this->any()) | |
| ->method('fetchCompanyFields') | |
| ->willReturn([]); | |
| $submissionModel = new SubmissionModel( | |
| $ipLookupHelper, | |
| $twigMock, | |
| $formModel, | |
| $pageModel, | |
| $leadModel, | |
| $campaignModel, | |
| $membershipManager, | |
| $leadFieldModel, | |
| $companyModel, | |
| $fieldHelper, | |
| $uploadFieldValidatorMock, | |
| $formUploaderMock, | |
| $deviceTrackingService, | |
| new FieldValueTransformer($router), | |
| $dateHelper, | |
| $contactTracker, | |
| $contactMerger, | |
| $entityManager, | |
| $this->createMock(CorePermissions::class), | |
| $dispatcher, | |
| $router, | |
| $translator, | |
| $userHelper, | |
| $mockLogger, | |
| $this->coreParametersHelper, | |
| ); | |
| return $submissionModel; | |
| } | |
| /** | |
| * @return array<string,array<string,mixed>> | |
| */ | |
| public function getTestFormFields(): array | |
| { | |
| $fieldSession = 'mautic_'.sha1(uniqid((string) mt_rand(), true)); | |
| $fieldSession2 = 'mautic_'.sha1(uniqid((string) mt_rand(), true)); | |
| $fields[$fieldSession] = [ | |
| 'label' => 'Email', | |
| 'showLabel' => 1, | |
| 'saveResult' => 1, | |
| 'defaultValue' => false, | |
| 'alias' => 'email', | |
| 'type' => 'email', | |
| 'leadField' => 'email', | |
| 'id' => $fieldSession, | |
| ]; | |
| $fields['file'] = [ | |
| 'label' => 'File', | |
| 'showLabel' => 1, | |
| 'saveResult' => 1, | |
| 'defaultValue' => false, | |
| 'alias' => 'file', | |
| 'type' => 'file', | |
| 'id' => 'file', | |
| 'allowed_file_size' => 1, | |
| 'allowed_file_extensions' => ['jpg', 'gif'], | |
| ]; | |
| $fields['123'] = [ | |
| 'label' => 'Parent Field', | |
| 'showLabel' => 1, | |
| 'saveResult' => 1, | |
| 'defaultValue' => false, | |
| 'alias' => 'parent', | |
| 'type' => 'select', | |
| 'id' => '123', | |
| ]; | |
| $fields['456'] = [ | |
| 'label' => 'Child', | |
| 'showLabel' => 1, | |
| 'saveResult' => 1, | |
| 'defaultValue' => false, | |
| 'alias' => 'child', | |
| 'type' => 'text', | |
| 'id' => '456', | |
| 'parent' => '123', | |
| ]; | |
| $fields[$fieldSession2] = [ | |
| 'label' => 'New Child', | |
| 'showLabel' => 1, | |
| 'saveResult' => 1, | |
| 'defaultValue' => false, | |
| 'alias' => 'new_child', | |
| 'type' => 'text', | |
| 'id' => $fieldSession2, | |
| 'parent' => '123', | |
| ]; | |
| return $fields; | |
| } | |
| } | |