Issues (3627)

app/bundles/FormBundle/Tests/FormTestAbstract.php (2 issues)

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
$mockLeadField was never initialized. Although not strictly required by PHP, it is generally a good practice to add $mockLeadField = array(); before regardless.
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
$fields was never initialized. Although not strictly required by PHP, it is generally a good practice to add $fields = array(); before regardless.
Loading history...
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