Completed
Push — master ( 97e40f...89ec5c )
by André
40:26 queued 12:35
created

RepositoryTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 168
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 0
Metric Value
dl 0
loc 168
rs 10
c 0
b 0
f 0
wmc 4
lcom 1
cbo 5

4 Methods

Rating   Name   Duplication   Size   Complexity  
B testServiceMethod() 0 44 1
A serviceMethods() 0 18 1
A testAggregation() 0 50 1
B aggregatedMethods() 0 44 1
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\SignalSlot\Tests;
8
9
use eZ\Publish\Core\SignalSlot\Repository;
10
use eZ\Publish\Core\Repository\Repository as InnerRepository;
11
use eZ\Publish\Core\Repository\Values\User\User;
12
use eZ\Publish\Core\Repository\Values\Content\Location;
13
use eZ\Publish\Core\SignalSlot\ContentService;
14
use eZ\Publish\Core\SignalSlot\ContentTypeService;
15
use eZ\Publish\Core\SignalSlot\FieldTypeService;
16
use eZ\Publish\Core\SignalSlot\RoleService;
17
use eZ\Publish\Core\SignalSlot\ObjectStateService;
18
use eZ\Publish\Core\SignalSlot\URLService;
19
use eZ\Publish\Core\SignalSlot\URLWildcardService;
20
use eZ\Publish\Core\SignalSlot\URLAliasService;
21
use eZ\Publish\Core\SignalSlot\UserService;
22
use eZ\Publish\Core\SignalSlot\SearchService;
23
use eZ\Publish\Core\SignalSlot\SectionService;
24
use eZ\Publish\Core\SignalSlot\TrashService;
25
use eZ\Publish\Core\SignalSlot\LocationService;
26
use eZ\Publish\Core\SignalSlot\LanguageService;
27
use eZ\Publish\Core\SignalSlot\SignalDispatcher;
28
use PHPUnit\Framework\TestCase;
29
30
class RepositoryTest extends TestCase
31
{
32
    /**
33
     * @dataProvider serviceMethods
34
     */
35
    public function testServiceMethod($method, $class)
36
    {
37
        $innerRepositoryMock = $this->getMockBuilder(InnerRepository::class)->disableOriginalConstructor()->getMock();
38
        $signalDispatcherMock = $this->createMock(SignalDispatcher::class);
39
40
        $contentServiceMock = $this->getMockBuilder(ContentService::class)->disableOriginalConstructor()->getMock();
41
        $contentTypeServiceMock = $this->getMockBuilder(ContentTypeService::class)->disableOriginalConstructor()->getMock();
42
        $fieldTypeServiceMock = $this->getMockBuilder(FieldTypeService::class)->disableOriginalConstructor()->getMock();
43
        $roleServiceMock = $this->getMockBuilder(RoleService::class)->disableOriginalConstructor()->getMock();
44
        $objectStateServiceMock = $this->getMockBuilder(ObjectStateService::class)->disableOriginalConstructor()->getMock();
45
        $urlWildcardServiceMock = $this->getMockBuilder(URLWildcardService::class)->disableOriginalConstructor()->getMock();
46
        $urlAliasServiceMock = $this->getMockBuilder(URLAliasService::class)->disableOriginalConstructor()->getMock();
47
        $userServiceMock = $this->getMockBuilder(UserService::class)->disableOriginalConstructor()->getMock();
48
        $searchServiceMock = $this->getMockBuilder(SearchService::class)->disableOriginalConstructor()->getMock();
49
        $sectionServiceMock = $this->getMockBuilder(SectionService::class)->disableOriginalConstructor()->getMock();
50
        $trashServiceMock = $this->getMockBuilder(TrashService::class)->disableOriginalConstructor()->getMock();
51
        $locationServiceMock = $this->getMockBuilder(LocationService::class)->disableOriginalConstructor()->getMock();
52
        $languageServiceMock = $this->getMockBuilder(LanguageService::class)->disableOriginalConstructor()->getMock();
53
        $urlServiceMock = $this->getMockBuilder(URLService::class)->disableOriginalConstructor()->getMock();
54
55
        $repository = new Repository(
56
            $innerRepositoryMock,
57
            $signalDispatcherMock,
58
            $contentServiceMock,
59
            $contentTypeServiceMock,
60
            $fieldTypeServiceMock,
61
            $roleServiceMock,
62
            $objectStateServiceMock,
63
            $urlWildcardServiceMock,
64
            $urlAliasServiceMock,
65
            $userServiceMock,
66
            $searchServiceMock,
67
            $sectionServiceMock,
68
            $trashServiceMock,
69
            $locationServiceMock,
70
            $languageServiceMock,
71
            $urlServiceMock
72
        );
73
74
        $service = $repository->{$method}();
75
        $this->assertInstanceOf($class, $service);
76
        $service2 = $repository->{$method}();
77
        $this->assertTrue($service === $service2);
78
    }
79
80
    public function serviceMethods()
81
    {
82
        return [
83
            ['getContentService', ContentService::class],
84
            ['getContentLanguageService', LanguageService::class],
85
            ['getContentTypeService', ContentTypeService::class],
86
            ['getLocationService', LocationService::class],
87
            ['getTrashService', TrashService::class],
88
            ['getSectionService', SectionService::class],
89
            ['getUserService', UserService::class],
90
            ['getURLAliasService', URLAliasService::class],
91
            ['getURLWildcardService', URLWildcardService::class],
92
            ['getObjectStateService', ObjectStateService::class],
93
            ['getRoleService', RoleService::class],
94
            ['getSearchService', SearchService::class],
95
            ['getFieldTypeService', FieldTypeService::class],
96
        ];
97
    }
98
99
    /**
100
     * @dataProvider aggregatedMethods
101
     */
102
    public function testAggregation($method, $parameters, $return)
103
    {
104
        $innerRepositoryMock = $this->getMockBuilder(InnerRepository::class)->disableOriginalConstructor()->getMock();
105
        $signalDispatcherMock = $this->createMock(SignalDispatcher::class);
106
107
        $contentServiceMock = $this->getMockBuilder(ContentService::class)->disableOriginalConstructor()->getMock();
108
        $contentTypeServiceMock = $this->getMockBuilder(ContentTypeService::class)->disableOriginalConstructor()->getMock();
109
        $fieldTypeServiceMock = $this->getMockBuilder(FieldTypeService::class)->disableOriginalConstructor()->getMock();
110
        $roleServiceMock = $this->getMockBuilder(RoleService::class)->disableOriginalConstructor()->getMock();
111
        $objectStateServiceMock = $this->getMockBuilder(ObjectStateService::class)->disableOriginalConstructor()->getMock();
112
        $urlWildcardServiceMock = $this->getMockBuilder(URLWildcardService::class)->disableOriginalConstructor()->getMock();
113
        $urlAliasServiceMock = $this->getMockBuilder(URLAliasService::class)->disableOriginalConstructor()->getMock();
114
        $userServiceMock = $this->getMockBuilder(UserService::class)->disableOriginalConstructor()->getMock();
115
        $searchServiceMock = $this->getMockBuilder(SearchService::class)->disableOriginalConstructor()->getMock();
116
        $sectionServiceMock = $this->getMockBuilder(SectionService::class)->disableOriginalConstructor()->getMock();
117
        $trashServiceMock = $this->getMockBuilder(TrashService::class)->disableOriginalConstructor()->getMock();
118
        $locationServiceMock = $this->getMockBuilder(LocationService::class)->disableOriginalConstructor()->getMock();
119
        $languageServiceMock = $this->getMockBuilder(LanguageService::class)->disableOriginalConstructor()->getMock();
120
        $urlServiceMock = $this->getMockBuilder(URLService::class)->disableOriginalConstructor()->getMock();
121
122
        $innerRepositoryMock->expects($this->once())
123
            ->method($method)
124
            ->will(
125
                $this->returnValueMap([
126
                    array_merge($parameters, [$return]),
127
                ])
128
            );
129
130
        $repository = new Repository(
131
            $innerRepositoryMock,
132
            $signalDispatcherMock,
133
            $contentServiceMock,
134
            $contentTypeServiceMock,
135
            $fieldTypeServiceMock,
136
            $roleServiceMock,
137
            $objectStateServiceMock,
138
            $urlWildcardServiceMock,
139
            $urlAliasServiceMock,
140
            $userServiceMock,
141
            $searchServiceMock,
142
            $sectionServiceMock,
143
            $trashServiceMock,
144
            $locationServiceMock,
145
            $languageServiceMock,
146
            $urlServiceMock
147
        );
148
149
        $result = call_user_func_array([$repository, $method], $parameters);
150
        $this->assertTrue($result === $return);
151
    }
152
153
    public function aggregatedMethods()
154
    {
155
        $ts = 374390100;
156
        $dt = new \DateTime();
157
        $dt->setTimestamp($ts);
158
159
        return [
160
            [
161
                'getCurrentUser',
162
                [],
163
                new User(),
164
            ],
165
            [
166
                'setCurrentUser',
167
                [new User()],
168
                null,
169
            ],
170
            [
171
                'hasAccess',
172
                ['module', 'function', new User()],
173
                ['limitations'],
174
            ],
175
            [
176
                'canUser',
177
                ['module', 'function', new User(), new Location()],
178
                false,
179
            ],
180
            [
181
                'beginTransaction',
182
                [],
183
                true,
184
            ],
185
            [
186
                'commit',
187
                [],
188
                true,
189
            ],
190
            [
191
                'rollback',
192
                [],
193
                true,
194
            ],
195
        ];
196
    }
197
}
198