Completed
Push — ezp-30882-thumbnail ( 274ed9...d4335b )
by
unknown
14:43
created

Base::getPersistenceMock()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 52

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 0
dl 0
loc 52
rs 9.0472
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
/**
4
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
5
 * @license For full copyright and license information view LICENSE file distributed with this source code.
6
 */
7
namespace eZ\Publish\Core\Repository\Tests\Service\Mock;
8
9
use eZ\Publish\API\Repository\PermissionResolver;
10
use eZ\Publish\Core\Repository\User\PasswordHashServiceInterface;
11
use eZ\Publish\Core\FieldType\FieldTypeRegistry;
12
use eZ\Publish\Core\Repository\Helper\RelationProcessor;
13
use eZ\Publish\Core\Search\Common\BackgroundIndexer\NullIndexer;
14
use PHPUnit\Framework\TestCase;
15
use eZ\Publish\Core\Repository\Repository;
16
use eZ\Publish\Core\Repository\Values\Content\Content;
17
use eZ\Publish\Core\Repository\Values\Content\VersionInfo;
18
use eZ\Publish\API\Repository\Values\Content\ContentInfo;
19
use eZ\Publish\API\Repository\Repository as APIRepository;
20
use eZ\Publish\Core\Repository\Values\User\User;
21
use eZ\Publish\Core\Repository\FieldTypeService;
22
use eZ\Publish\Core\Repository\Helper\ContentTypeDomainMapper;
23
use eZ\Publish\SPI\Persistence\Handler;
24
25
/**
26
 * Base test case for tests on services using Mock testing.
27
 */
28
abstract class Base extends TestCase
29
{
30
    /** @var \eZ\Publish\API\Repository\Repository */
31
    private $repository;
32
33
    /** @var \eZ\Publish\API\Repository\Repository|\PHPUnit\Framework\MockObject\MockObject */
34
    private $repositoryMock;
35
36
    /** @var \eZ\Publish\API\Repository\PermissionResolver|\PHPUnit\Framework\MockObject\MockObject */
37
    private $permissionResolverMock;
38
39
    /** @var \eZ\Publish\SPI\Persistence\Handler|\PHPUnit\Framework\MockObject\MockObject */
40
    private $persistenceMock;
41
42
    /**
43
     * The Content / Location / Search ... handlers for the persistence / Search / .. handler mocks.
44
     *
45
     * @var \PHPUnit\Framework\MockObject\MockObject[] Key is relative to "\eZ\Publish\SPI\"
46
     *
47
     * @see getPersistenceMockHandler()
48
     */
49
    private $spiMockHandlers = [];
50
51
    /** @var \PHPUnit\Framework\MockObject\MockObject|\eZ\Publish\Core\Repository\Helper\ContentTypeDomainMapper */
52
    private $contentTypeDomainMapperMock;
53
54
    /**
55
     * Get Real repository with mocked dependencies.
56
     *
57
     * @param array $serviceSettings If set then non shared instance of Repository is returned
58
     *
59
     * @return \eZ\Publish\API\Repository\Repository
60
     */
61
    protected function getRepository(array $serviceSettings = [])
62
    {
63
        if ($this->repository === null || !empty($serviceSettings)) {
64
            $repository = new Repository(
65
                $this->getPersistenceMock(),
66
                $this->getSPIMockHandler('Search\\Handler'),
67
                new NullIndexer(),
68
                $this->getRelationProcessorMock(),
69
                $this->getFieldTypeRegistryMock(),
70
                $this->createMock(PasswordHashServiceInterface::class),
71
                $serviceSettings,
72
            );
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Syntax error, unexpected ')'
Loading history...
73
74
            if (!empty($serviceSettings)) {
75
                return $repository;
76
            }
77
78
            $this->repository = $repository;
79
        }
80
81
        return $this->repository;
82
    }
83
84
    protected $fieldTypeServiceMock;
85
86
    /**
87
     * @return \PHPUnit\Framework\MockObject\MockObject|\eZ\Publish\API\Repository\FieldTypeService
88
     */
89
    protected function getFieldTypeServiceMock()
90
    {
91
        if (!isset($this->fieldTypeServiceMock)) {
92
            $this->fieldTypeServiceMock = $this->createMock(FieldTypeService::class);
93
        }
94
95
        return $this->fieldTypeServiceMock;
96
    }
97
98
    protected $fieldTypeRegistryMock;
99
100
    /**
101
     * @return \PHPUnit\Framework\MockObject\MockObject|\eZ\Publish\Core\FieldType\FieldTypeRegistry
102
     */
103
    protected function getFieldTypeRegistryMock()
104
    {
105
        if (!isset($this->fieldTypeRegistryMock)) {
106
            $this->fieldTypeRegistryMock = $this->createMock(FieldTypeRegistry::class);
107
        }
108
109
        return $this->fieldTypeRegistryMock;
110
    }
111
112
    /**
113
     * @return \eZ\Publish\API\Repository\Repository|\PHPUnit\Framework\MockObject\MockObject
114
     */
115
    protected function getRepositoryMock()
116
    {
117
        if (!isset($this->repositoryMock)) {
118
            $this->repositoryMock = self::createMock(APIRepository::class);
119
        }
120
121
        return $this->repositoryMock;
122
    }
123
124
    /**
125
     * @return \eZ\Publish\API\Repository\PermissionResolver|\PHPUnit\Framework\MockObject\MockObject
126
     */
127
    protected function getPermissionResolverMock()
128
    {
129
        if (!isset($this->permissionResolverMock)) {
130
            $this->permissionResolverMock = $this->createMock(PermissionResolver::class);
131
        }
132
133
        return $this->permissionResolverMock;
134
    }
135
136
    /**
137
     * @return \PHPUnit\Framework\MockObject\MockObject|\eZ\Publish\Core\Repository\Helper\ContentTypeDomainMapper
138
     */
139
    protected function getContentTypeDomainMapperMock()
140
    {
141
        if (!isset($this->contentTypeDomainMapperMock)) {
142
            $this->contentTypeDomainMapperMock = $this->createMock(ContentTypeDomainMapper::class);
143
        }
144
145
        return $this->contentTypeDomainMapperMock;
146
    }
147
148
    /**
149
     * Returns a persistence Handler mock.
150
     *
151
     * @return \eZ\Publish\SPI\Persistence\Handler|\PHPUnit\Framework\MockObject\MockObject
152
     */
153
    protected function getPersistenceMock()
154
    {
155
        if (!isset($this->persistenceMock)) {
156
            $this->persistenceMock = $this->createMock(Handler::class);
157
158
            $this->persistenceMock->expects($this->any())
159
                ->method('contentHandler')
160
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\Handler')));
161
162
            $this->persistenceMock->expects($this->any())
163
                ->method('contentTypeHandler')
164
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\Type\\Handler')));
165
166
            $this->persistenceMock->expects($this->any())
167
                ->method('contentLanguageHandler')
168
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\Language\\Handler')));
169
170
            $this->persistenceMock->expects($this->any())
171
                ->method('locationHandler')
172
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\Location\\Handler')));
173
174
            $this->persistenceMock->expects($this->any())
175
                ->method('objectStateHandler')
176
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\ObjectState\\Handler')));
177
178
            $this->persistenceMock->expects($this->any())
179
                ->method('trashHandler')
180
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\Location\\Trash\\Handler')));
181
182
            $this->persistenceMock->expects($this->any())
183
                ->method('userHandler')
184
                ->will($this->returnValue($this->getPersistenceMockHandler('User\\Handler')));
185
186
            $this->persistenceMock->expects($this->any())
187
                ->method('sectionHandler')
188
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\Section\\Handler')));
189
190
            $this->persistenceMock->expects($this->any())
191
                ->method('urlAliasHandler')
192
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\UrlAlias\\Handler')));
193
194
            $this->persistenceMock->expects($this->any())
195
                ->method('urlWildcardHandler')
196
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\UrlWildcard\\Handler')));
197
198
            $this->persistenceMock->expects($this->any())
199
                ->method('urlWildcardHandler')
200
                ->will($this->returnValue($this->getPersistenceMockHandler('URL\\Handler')));
201
        }
202
203
        return $this->persistenceMock;
204
    }
205
206
    protected function getRelationProcessorMock()
207
    {
208
        return $this->createMock(RelationProcessor::class);
209
    }
210
211
    /**
212
     * Returns a SPI Handler mock.
213
     *
214
     * @param string $handler For instance "Content\\Type\\Handler" or "Search\\Handler", must be relative to "eZ\Publish\SPI"
215
     *
216
     * @return \PHPUnit\Framework\MockObject\MockObject
217
     */
218
    protected function getSPIMockHandler($handler)
219
    {
220
        if (!isset($this->spiMockHandlers[$handler])) {
221
            $this->spiMockHandlers[$handler] = $this->getMockBuilder("eZ\\Publish\\SPI\\{$handler}")
222
                ->setMethods([])
223
                ->disableOriginalConstructor()
224
                ->setConstructorArgs([])
225
                ->getMock();
226
        }
227
228
        return $this->spiMockHandlers[$handler];
229
    }
230
231
    /**
232
     * Returns a persistence Handler mock.
233
     *
234
     * @param string $handler For instance "Content\\Type\\Handler", must be relative to "eZ\Publish\SPI\Persistence"
235
     *
236
     * @return \PHPUnit\Framework\MockObject\MockObject
237
     */
238
    protected function getPersistenceMockHandler($handler)
239
    {
240
        return $this->getSPIMockHandler("Persistence\\{$handler}");
241
    }
242
243
    /**
244
     * Returns User stub with $id as User/Content id.
245
     *
246
     * @param int $id
247
     *
248
     * @return \eZ\Publish\API\Repository\Values\User\User
249
     */
250
    protected function getStubbedUser($id)
251
    {
252
        return new User(
253
            [
254
                'content' => new Content(
255
                    [
256
                        'versionInfo' => new VersionInfo(
257
                            [
258
                                'contentInfo' => new ContentInfo(['id' => $id]),
259
                            ]
260
                        ),
261
                        'internalFields' => [],
262
                    ]
263
                ),
264
            ]
265
        );
266
    }
267
}
268