Completed
Push — ezp-30928-as_a_developer_i_wan... ( b10e65 )
by
unknown
33:52 queued 18:51
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\FieldType\FieldTypeRegistry;
11
use eZ\Publish\Core\Repository\Helper\RelationProcessor;
12
use eZ\Publish\Core\Search\Common\BackgroundIndexer\NullIndexer;
13
use PHPUnit\Framework\TestCase;
14
use eZ\Publish\Core\Repository\Repository;
15
use eZ\Publish\Core\Repository\Values\Content\Content;
16
use eZ\Publish\Core\Repository\Values\Content\VersionInfo;
17
use eZ\Publish\API\Repository\Values\Content\ContentInfo;
18
use eZ\Publish\API\Repository\Repository as APIRepository;
19
use eZ\Publish\Core\Repository\Values\User\User;
20
use eZ\Publish\Core\Repository\FieldTypeService;
21
use eZ\Publish\Core\Repository\Helper\ContentTypeDomainMapper;
22
use eZ\Publish\SPI\Persistence\Handler;
23
24
/**
25
 * Base test case for tests on services using Mock testing.
26
 */
27
abstract class Base extends TestCase
28
{
29
    /** @var \eZ\Publish\API\Repository\Repository */
30
    private $repository;
31
32
    /** @var \eZ\Publish\API\Repository\Repository|\PHPUnit\Framework\MockObject\MockObject */
33
    private $repositoryMock;
34
35
    /** @var \eZ\Publish\API\Repository\PermissionResolver|\PHPUnit\Framework\MockObject\MockObject */
36
    private $permissionResolverMock;
37
38
    /** @var \eZ\Publish\SPI\Persistence\Handler|\PHPUnit\Framework\MockObject\MockObject */
39
    private $persistenceMock;
40
41
    /**
42
     * The Content / Location / Search ... handlers for the persistence / Search / .. handler mocks.
43
     *
44
     * @var \PHPUnit\Framework\MockObject\MockObject[] Key is relative to "\eZ\Publish\SPI\"
45
     *
46
     * @see getPersistenceMockHandler()
47
     */
48
    private $spiMockHandlers = [];
49
50
    /** @var \PHPUnit\Framework\MockObject\MockObject|\eZ\Publish\Core\Repository\Helper\ContentTypeDomainMapper */
51
    private $contentTypeDomainMapperMock;
52
53
    /**
54
     * Get Real repository with mocked dependencies.
55
     *
56
     * @param array $serviceSettings If set then non shared instance of Repository is returned
57
     *
58
     * @return \eZ\Publish\API\Repository\Repository
59
     */
60
    protected function getRepository(array $serviceSettings = [])
61
    {
62
        if ($this->repository === null || !empty($serviceSettings)) {
63
            $repository = new Repository(
64
                $this->getPersistenceMock(),
65
                $this->getSPIMockHandler('Search\\Handler'),
66
                new NullIndexer(),
67
                $this->getRelationProcessorMock(),
68
                $this->getFieldTypeRegistryMock(),
69
                $serviceSettings,
70
            );
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...
71
72
            if (!empty($serviceSettings)) {
73
                return $repository;
74
            }
75
76
            $this->repository = $repository;
77
        }
78
79
        return $this->repository;
80
    }
81
82
    protected $fieldTypeServiceMock;
83
84
    /**
85
     * @return \PHPUnit\Framework\MockObject\MockObject|\eZ\Publish\API\Repository\FieldTypeService
86
     */
87
    protected function getFieldTypeServiceMock()
88
    {
89
        if (!isset($this->fieldTypeServiceMock)) {
90
            $this->fieldTypeServiceMock = $this->createMock(FieldTypeService::class);
91
        }
92
93
        return $this->fieldTypeServiceMock;
94
    }
95
96
    protected $fieldTypeRegistryMock;
97
98
    /**
99
     * @return \PHPUnit\Framework\MockObject\MockObject|\eZ\Publish\Core\FieldType\FieldTypeRegistry
100
     */
101
    protected function getFieldTypeRegistryMock()
102
    {
103
        if (!isset($this->fieldTypeRegistryMock)) {
104
            $this->fieldTypeRegistryMock = $this->createMock(FieldTypeRegistry::class);
105
        }
106
107
        return $this->fieldTypeRegistryMock;
108
    }
109
110
    /**
111
     * @return \eZ\Publish\API\Repository\Repository|\PHPUnit\Framework\MockObject\MockObject
112
     */
113
    protected function getRepositoryMock()
114
    {
115
        if (!isset($this->repositoryMock)) {
116
            $this->repositoryMock = self::createMock(APIRepository::class);
117
        }
118
119
        return $this->repositoryMock;
120
    }
121
122
    /**
123
     * @return \eZ\Publish\API\Repository\PermissionResolver|\PHPUnit\Framework\MockObject\MockObject
124
     */
125
    protected function getPermissionResolverMock()
126
    {
127
        if (!isset($this->permissionResolverMock)) {
128
            $this->permissionResolverMock = $this->createMock(PermissionResolver::class);
129
        }
130
131
        return $this->permissionResolverMock;
132
    }
133
134
    /**
135
     * @return \PHPUnit\Framework\MockObject\MockObject|\eZ\Publish\Core\Repository\Helper\ContentTypeDomainMapper
136
     */
137
    protected function getContentTypeDomainMapperMock()
138
    {
139
        if (!isset($this->contentTypeDomainMapperMock)) {
140
            $this->contentTypeDomainMapperMock = $this->createMock(ContentTypeDomainMapper::class);
141
        }
142
143
        return $this->contentTypeDomainMapperMock;
144
    }
145
146
    /**
147
     * Returns a persistence Handler mock.
148
     *
149
     * @return \eZ\Publish\SPI\Persistence\Handler|\PHPUnit\Framework\MockObject\MockObject
150
     */
151
    protected function getPersistenceMock()
152
    {
153
        if (!isset($this->persistenceMock)) {
154
            $this->persistenceMock = $this->createMock(Handler::class);
155
156
            $this->persistenceMock->expects($this->any())
157
                ->method('contentHandler')
158
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\Handler')));
159
160
            $this->persistenceMock->expects($this->any())
161
                ->method('contentTypeHandler')
162
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\Type\\Handler')));
163
164
            $this->persistenceMock->expects($this->any())
165
                ->method('contentLanguageHandler')
166
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\Language\\Handler')));
167
168
            $this->persistenceMock->expects($this->any())
169
                ->method('locationHandler')
170
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\Location\\Handler')));
171
172
            $this->persistenceMock->expects($this->any())
173
                ->method('objectStateHandler')
174
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\ObjectState\\Handler')));
175
176
            $this->persistenceMock->expects($this->any())
177
                ->method('trashHandler')
178
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\Location\\Trash\\Handler')));
179
180
            $this->persistenceMock->expects($this->any())
181
                ->method('userHandler')
182
                ->will($this->returnValue($this->getPersistenceMockHandler('User\\Handler')));
183
184
            $this->persistenceMock->expects($this->any())
185
                ->method('sectionHandler')
186
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\Section\\Handler')));
187
188
            $this->persistenceMock->expects($this->any())
189
                ->method('urlAliasHandler')
190
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\UrlAlias\\Handler')));
191
192
            $this->persistenceMock->expects($this->any())
193
                ->method('urlWildcardHandler')
194
                ->will($this->returnValue($this->getPersistenceMockHandler('Content\\UrlWildcard\\Handler')));
195
196
            $this->persistenceMock->expects($this->any())
197
                ->method('urlWildcardHandler')
198
                ->will($this->returnValue($this->getPersistenceMockHandler('URL\\Handler')));
199
        }
200
201
        return $this->persistenceMock;
202
    }
203
204
    protected function getRelationProcessorMock()
205
    {
206
        return $this->createMock(RelationProcessor::class);
207
    }
208
209
    /**
210
     * Returns a SPI Handler mock.
211
     *
212
     * @param string $handler For instance "Content\\Type\\Handler" or "Search\\Handler", must be relative to "eZ\Publish\SPI"
213
     *
214
     * @return \PHPUnit\Framework\MockObject\MockObject
215
     */
216
    protected function getSPIMockHandler($handler)
217
    {
218
        if (!isset($this->spiMockHandlers[$handler])) {
219
            $this->spiMockHandlers[$handler] = $this->getMockBuilder("eZ\\Publish\\SPI\\{$handler}")
220
                ->setMethods([])
221
                ->disableOriginalConstructor()
222
                ->setConstructorArgs([])
223
                ->getMock();
224
        }
225
226
        return $this->spiMockHandlers[$handler];
227
    }
228
229
    /**
230
     * Returns a persistence Handler mock.
231
     *
232
     * @param string $handler For instance "Content\\Type\\Handler", must be relative to "eZ\Publish\SPI\Persistence"
233
     *
234
     * @return \PHPUnit\Framework\MockObject\MockObject
235
     */
236
    protected function getPersistenceMockHandler($handler)
237
    {
238
        return $this->getSPIMockHandler("Persistence\\{$handler}");
239
    }
240
241
    /**
242
     * Returns User stub with $id as User/Content id.
243
     *
244
     * @param int $id
245
     *
246
     * @return \eZ\Publish\API\Repository\Values\User\User
247
     */
248
    protected function getStubbedUser($id)
249
    {
250
        return new User(
251
            [
252
                'content' => new Content(
253
                    [
254
                        'versionInfo' => new VersionInfo(
255
                            [
256
                                'contentInfo' => new ContentInfo(['id' => $id]),
257
                            ]
258
                        ),
259
                        'internalFields' => [],
260
                    ]
261
                ),
262
            ]
263
        );
264
    }
265
}
266