1 | <?php |
||
2 | |||
3 | /* |
||
4 | * @copyright 2016 Mautic Contributors. All rights reserved |
||
5 | * @author Mautic, Inc. |
||
6 | * |
||
7 | * @link https://mautic.org |
||
8 | * |
||
9 | * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html |
||
10 | */ |
||
11 | |||
12 | namespace Mautic\FormBundle\Tests; |
||
13 | |||
14 | use Doctrine\ORM\EntityManager; |
||
15 | use Mautic\CampaignBundle\Membership\MembershipManager; |
||
16 | use Mautic\CampaignBundle\Model\CampaignModel; |
||
17 | use Mautic\CoreBundle\Doctrine\Helper\ColumnSchemaHelper; |
||
18 | use Mautic\CoreBundle\Doctrine\Helper\TableSchemaHelper; |
||
19 | use Mautic\CoreBundle\Entity\IpAddress; |
||
20 | use Mautic\CoreBundle\Helper\IpLookupHelper; |
||
21 | use Mautic\CoreBundle\Helper\TemplatingHelper; |
||
22 | use Mautic\CoreBundle\Helper\ThemeHelper; |
||
23 | use Mautic\CoreBundle\Helper\UserHelper; |
||
24 | use Mautic\CoreBundle\Templating\Helper\DateHelper; |
||
25 | use Mautic\CoreBundle\Translation\Translator; |
||
26 | use Mautic\FormBundle\Entity\FormRepository; |
||
27 | use Mautic\FormBundle\Event\Service\FieldValueTransformer; |
||
28 | use Mautic\FormBundle\Helper\FormFieldHelper; |
||
29 | use Mautic\FormBundle\Helper\FormUploader; |
||
30 | use Mautic\FormBundle\Model\ActionModel; |
||
31 | use Mautic\FormBundle\Model\FieldModel; |
||
32 | use Mautic\FormBundle\Model\FormModel; |
||
33 | use Mautic\FormBundle\Model\SubmissionModel; |
||
34 | use Mautic\FormBundle\Validator\UploadFieldValidator; |
||
35 | use Mautic\LeadBundle\Entity\Lead; |
||
36 | use Mautic\LeadBundle\Entity\LeadRepository; |
||
37 | use Mautic\LeadBundle\Model\CompanyModel; |
||
38 | use Mautic\LeadBundle\Model\FieldModel as LeadFieldModel; |
||
39 | use Mautic\LeadBundle\Model\LeadModel; |
||
40 | use Mautic\LeadBundle\Tracker\ContactTracker; |
||
41 | use Mautic\LeadBundle\Tracker\Service\DeviceTrackingService\DeviceTrackingServiceInterface; |
||
42 | use Mautic\PageBundle\Model\PageModel; |
||
43 | use Mautic\UserBundle\Entity\User; |
||
44 | use Monolog\Logger; |
||
45 | use PHPUnit\Framework\TestCase; |
||
46 | use Symfony\Component\EventDispatcher\EventDispatcher; |
||
47 | use Symfony\Component\HttpFoundation\File\UploadedFile; |
||
48 | use Symfony\Component\HttpFoundation\RequestStack; |
||
49 | use Symfony\Component\Routing\RouterInterface; |
||
50 | use Symfony\Component\Templating\EngineInterface; |
||
51 | |||
52 | class FormTestAbstract extends TestCase |
||
53 | { |
||
54 | protected static $mockId = 123; |
||
55 | protected static $mockName = 'Mock test name'; |
||
56 | protected $mockTrackingId; |
||
57 | protected $formRepository; |
||
58 | protected $leadFieldModel; |
||
59 | |||
60 | protected function setUp(): void |
||
61 | { |
||
62 | $this->mockTrackingId = hash('sha1', uniqid(mt_rand())); |
||
63 | } |
||
64 | |||
65 | /** |
||
66 | * @return FormModel |
||
67 | */ |
||
68 | protected function getFormModel() |
||
69 | { |
||
70 | $requestStack = $this->createMock(RequestStack::class); |
||
71 | $templatingHelperMock = $this->createMock(TemplatingHelper::class); |
||
72 | $themeHelper = $this->createMock(ThemeHelper::class); |
||
73 | $formActionModel = $this->createMock(ActionModel::class); |
||
74 | $formFieldModel = $this->createMock(FieldModel::class); |
||
75 | $fieldHelper = $this->createMock(FormFieldHelper::class); |
||
76 | $dispatcher = $this->createMock(EventDispatcher::class); |
||
77 | $translator = $this->createMock(Translator::class); |
||
78 | $entityManager = $this->createMock(EntityManager::class); |
||
79 | $formUploaderMock = $this->createMock(FormUploader::class); |
||
80 | $contactTracker = $this->createMock(ContactTracker::class); |
||
81 | $this->leadFieldModel = $this->createMock(LeadFieldModel::class); |
||
82 | $this->formRepository = $this->createMock(FormRepository::class); |
||
83 | $columnSchemaHelper = $this->createMock(ColumnSchemaHelper::class); |
||
84 | $tableSchemaHelper = $this->createMock(TableSchemaHelper::class); |
||
85 | |||
86 | $contactTracker->expects($this |
||
87 | ->any()) |
||
88 | ->method('getContact') |
||
89 | ->willReturn($this |
||
90 | ->returnValue(['id' => self::$mockId, 'name' => self::$mockName]) |
||
91 | ); |
||
92 | |||
93 | $templatingHelperMock->expects($this |
||
94 | ->any()) |
||
95 | ->method('getTemplating') |
||
96 | ->willReturn($this->createMock(EngineInterface::class)); |
||
97 | |||
98 | $entityManager->expects($this |
||
99 | ->any()) |
||
100 | ->method('getRepository') |
||
101 | ->will( |
||
102 | $this->returnValueMap( |
||
103 | [ |
||
104 | ['MauticFormBundle:Form', $this->formRepository], |
||
105 | ] |
||
106 | ) |
||
107 | ); |
||
108 | |||
109 | $formModel = new FormModel( |
||
110 | $requestStack, |
||
111 | $templatingHelperMock, |
||
112 | $themeHelper, |
||
113 | $formActionModel, |
||
114 | $formFieldModel, |
||
115 | $fieldHelper, |
||
116 | $this->leadFieldModel, |
||
117 | $formUploaderMock, |
||
118 | $contactTracker, |
||
119 | $columnSchemaHelper, |
||
120 | $tableSchemaHelper |
||
121 | ); |
||
122 | |||
123 | $formModel->setDispatcher($dispatcher); |
||
124 | $formModel->setTranslator($translator); |
||
125 | $formModel->setEntityManager($entityManager); |
||
126 | |||
127 | return $formModel; |
||
128 | } |
||
129 | |||
130 | /** |
||
131 | * @return SubmissionModel |
||
132 | */ |
||
133 | protected function getSubmissionModel() |
||
134 | { |
||
135 | $ipLookupHelper = $this->createMock(IpLookupHelper::class); |
||
136 | $templatingHelperMock = $this->createMock(TemplatingHelper::class); |
||
137 | $formModel = $this->createMock(FormModel::class); |
||
138 | $pageModel = $this->createMock(PageModel::class); |
||
139 | $leadModel = $this->createMock(LeadModel::class); |
||
140 | $campaignModel = $this->createMock(CampaignModel::class); |
||
141 | $membershipManager = $this->createMock(MembershipManager::class); |
||
142 | $leadFieldModel = $this->createMock(LeadFieldModel::class); |
||
143 | $companyModel = $this->createMock(CompanyModel::class); |
||
144 | $fieldHelper = $this->createMock(FormFieldHelper::class); |
||
145 | $dispatcher = $this->createMock(EventDispatcher::class); |
||
146 | $translator = $this->createMock(Translator::class); |
||
147 | $dateHelper = $this->createMock(DateHelper::class); |
||
148 | $contactTracker = $this->createMock(ContactTracker::class); |
||
149 | $userHelper = $this->createMock(UserHelper::class); |
||
150 | $entityManager = $this->createMock(EntityManager::class); |
||
151 | $formRepository = $this->createMock(FormRepository::class); |
||
152 | $leadRepository = $this->createMock(LeadRepository::class); |
||
153 | $mockLogger = $this->createMock(Logger::class); |
||
154 | $uploadFieldValidatorMock = $this->createMock(UploadFieldValidator::class); |
||
155 | $formUploaderMock = $this->createMock(FormUploader::class); |
||
156 | $deviceTrackingService = $this->createMock(DeviceTrackingServiceInterface::class); |
||
157 | $file1Mock = $this->createMock(UploadedFile::class); |
||
158 | $lead = new Lead(); |
||
159 | $lead->setId(123); |
||
160 | |||
161 | $leadFieldModel->expects($this->any()) |
||
162 | ->method('getUniqueIdentifierFields') |
||
163 | ->willReturn(['eyJpc1B1Ymxpc2hlZCI6dHJ1ZSwiaXNVbmlxdWVJZGVudGlmZXIiOnRydWUsIm9iamVjdCI6ImxlYWQifQ==' => ['email' => 'Email']]); |
||
164 | |||
165 | $contactTracker->expects($this |
||
166 | ->any()) |
||
167 | ->method('getContact') |
||
168 | ->willReturn($lead); |
||
169 | |||
170 | $userHelper->expects($this->any()) |
||
171 | ->method('getUser') |
||
172 | ->willReturn(new User()); |
||
173 | |||
174 | $mockLeadField['email'] = [ |
||
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
Loading history...
|
|||
175 | 'label' => 'Email', |
||
176 | 'alias' => 'email', |
||
177 | 'type' => 'email', |
||
178 | 'group' => 'core', |
||
179 | 'group_label' => 'Core', |
||
180 | 'defaultValue' => '', |
||
181 | 'properties' => [], |
||
182 | ]; |
||
183 | |||
184 | $leadFieldModel->expects($this->any()) |
||
185 | ->method('getFieldListWithProperties') |
||
186 | ->willReturn($mockLeadField); |
||
187 | |||
188 | $entityManager->expects($this->any()) |
||
189 | ->method('getRepository') |
||
190 | ->will( |
||
191 | $this->returnValueMap( |
||
192 | [ |
||
193 | ['MauticLeadBundle:Lead', $leadRepository], |
||
194 | ['MauticFormBundle:Submission', $formRepository], |
||
195 | ] |
||
196 | ) |
||
197 | ); |
||
198 | |||
199 | $leadRepository->expects($this->any()) |
||
200 | ->method('getLeadsByUniqueFields') |
||
201 | ->willReturn(null); |
||
202 | |||
203 | $file1Mock->expects($this->any()) |
||
204 | ->method('getClientOriginalName') |
||
205 | ->willReturn('test.jpg'); |
||
206 | |||
207 | $uploadFieldValidatorMock->expects($this->any()) |
||
208 | ->method('processFileValidation') |
||
209 | ->willReturn($file1Mock); |
||
210 | |||
211 | $ipLookupHelper->expects($this->any()) |
||
212 | ->method('getIpAddress') |
||
213 | ->willReturn(new IpAddress()); |
||
214 | |||
215 | $submissionModel = new SubmissionModel( |
||
216 | $ipLookupHelper, |
||
217 | $templatingHelperMock, |
||
218 | $formModel, |
||
219 | $pageModel, |
||
220 | $leadModel, |
||
221 | $campaignModel, |
||
222 | $membershipManager, |
||
223 | $leadFieldModel, |
||
224 | $companyModel, |
||
225 | $fieldHelper, |
||
226 | $uploadFieldValidatorMock, |
||
227 | $formUploaderMock, |
||
228 | $deviceTrackingService, |
||
229 | new FieldValueTransformer($this->createMock(RouterInterface::class)), |
||
230 | $dateHelper, |
||
231 | $contactTracker |
||
232 | ); |
||
233 | |||
234 | $submissionModel->setDispatcher($dispatcher); |
||
235 | $submissionModel->setTranslator($translator); |
||
236 | $submissionModel->setEntityManager($entityManager); |
||
237 | $submissionModel->setUserHelper($userHelper); |
||
238 | $submissionModel->setLogger($mockLogger); |
||
239 | |||
240 | return $submissionModel; |
||
241 | } |
||
242 | |||
243 | public function getTestFormFields() |
||
244 | { |
||
245 | $fieldSession = 'mautic_'.sha1(uniqid(mt_rand(), true)); |
||
246 | $fields[$fieldSession] = |
||
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
|
|||
247 | [ |
||
248 | 'label' => 'Email', |
||
249 | 'showLabel' => 1, |
||
250 | 'saveResult' => 1, |
||
251 | 'defaultValue' => false, |
||
252 | 'alias' => 'email', |
||
253 | 'type' => 'email', |
||
254 | 'leadField' => 'email', |
||
255 | 'id' => $fieldSession, |
||
256 | ]; |
||
257 | |||
258 | $fields['file'] = |
||
259 | [ |
||
260 | 'label' => 'File', |
||
261 | 'showLabel' => 1, |
||
262 | 'saveResult' => 1, |
||
263 | 'defaultValue' => false, |
||
264 | 'alias' => 'file', |
||
265 | 'type' => 'file', |
||
266 | 'id' => 'file', |
||
267 | 'allowed_file_size' => 1, |
||
268 | 'allowed_file_extensions' => ['jpg', 'gif'], |
||
269 | ]; |
||
270 | |||
271 | return $fields; |
||
272 | } |
||
273 | } |
||
274 |