Completed
Push — EZP-31644 ( 2e0a1e...93bb44 )
by
unknown
19:12
created

Base::getPersistenceMock()   B

Complexity

Conditions 2
Paths 2

Size

Total Lines 56

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 0
dl 0
loc 56
rs 8.9599
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\Core\Repository\Helper\RelationProcessor;
10
use eZ\Publish\Core\Search\Common\BackgroundIndexer\NullIndexer;
11
use PHPUnit\Framework\TestCase;
12
use eZ\Publish\Core\Repository\Repository;
13
use eZ\Publish\Core\Repository\Values\Content\Content;
14
use eZ\Publish\Core\Repository\Values\Content\VersionInfo;
15
use eZ\Publish\API\Repository\Values\Content\ContentInfo;
16
use eZ\Publish\Core\Repository\Values\User\User;
17
18
/**
19
 * Base test case for tests on services using Mock testing.
20
 */
21
abstract class Base extends TestCase
22
{
23
    /**
24
     * @var \eZ\Publish\API\Repository\Repository
25
     */
26
    private $repository;
27
28
    /**
29
     * @var \eZ\Publish\API\Repository\Repository|\PHPUnit_Framework_MockObject_MockObject
30
     */
31
    private $repositoryMock;
32
33
    /**
34
     * @var \eZ\Publish\SPI\Persistence\Handler|\PHPUnit_Framework_MockObject_MockObject
35
     */
36
    private $persistenceMock;
37
38
    /**
39
     * The Content / Location / Search ... handlers for the persistence / Search / .. handler mocks.
40
     *
41
     * @var \PHPUnit_Framework_MockObject_MockObject[] Key is relative to "\eZ\Publish\SPI\"
42
     *
43
     * @see getPersistenceMockHandler()
44
     */
45
    private $spiMockHandlers = [];
46
47
    /**
48
     * Get Real repository with mocked dependencies.
49
     *
50
     * @param array $serviceSettings If set then non shared instance of Repository is returned
51
     *
52
     * @return \eZ\Publish\API\Repository\Repository
53
     */
54
    protected function getRepository(array $serviceSettings = [])
55
    {
56
        if ($this->repository === null || !empty($serviceSettings)) {
57
            $repository = new Repository(
58
                $this->getPersistenceMock(),
0 ignored issues
show
Bug introduced by
It seems like $this->getPersistenceMock() targeting eZ\Publish\Core\Reposito...e::getPersistenceMock() can also be of type object<PHPUnit_Framework_MockObject_MockObject>; however, eZ\Publish\Core\Reposito...pository::__construct() does only seem to accept object<eZ\Publish\SPI\Persistence\Handler>, maybe add an additional type check?

This check looks at variables that are passed out again to other methods.

If the outgoing method call has stricter type requirements than the method itself, an issue is raised.

An additional type check may prevent trouble.

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