Completed
Push — 7.0 ( acf4a7...ccc80a )
by André
12:25
created

RepositoryTest::aggregatedMethods()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 44
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 22
nc 1
nop 0
dl 0
loc 44
rs 8.8571
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * File containing the RepositoryTest class.
5
 *
6
 * @copyright Copyright (C) eZ Systems AS. All rights reserved.
7
 * @license For full copyright and license information view LICENSE file distributed with this source code.
8
 */
9
namespace eZ\Publish\Core\SignalSlot\Tests;
10
11
use eZ\Publish\Core\SignalSlot\Repository;
12
use eZ\Publish\Core\Repository\Repository as InnerRepository;
13
use eZ\Publish\Core\Repository\Values\User\User;
14
use eZ\Publish\Core\Repository\Values\Content\Location;
15
use eZ\Publish\Core\SignalSlot\ContentService;
16
use eZ\Publish\Core\SignalSlot\ContentTypeService;
17
use eZ\Publish\Core\SignalSlot\FieldTypeService;
18
use eZ\Publish\Core\SignalSlot\RoleService;
19
use eZ\Publish\Core\SignalSlot\ObjectStateService;
20
use eZ\Publish\Core\SignalSlot\URLWildcardService;
21
use eZ\Publish\Core\SignalSlot\URLAliasService;
22
use eZ\Publish\Core\SignalSlot\UserService;
23
use eZ\Publish\Core\SignalSlot\SearchService;
24
use eZ\Publish\Core\SignalSlot\SectionService;
25
use eZ\Publish\Core\SignalSlot\TrashService;
26
use eZ\Publish\Core\SignalSlot\LocationService;
27
use eZ\Publish\Core\SignalSlot\LanguageService;
28
use eZ\Publish\Core\SignalSlot\SignalDispatcher;
29
use PHPUnit\Framework\TestCase;
30
31
class RepositoryTest extends TestCase
32
{
33
    /**
34
     * @dataProvider serviceMethods
35
     */
36
    public function testServiceMethod($method, $class)
37
    {
38
        $innerRepositoryMock = $this->getMockBuilder(InnerRepository::class)->disableOriginalConstructor()->getMock();
39
        $signalDispatcherMock = $this->createMock(SignalDispatcher::class);
40
41
        $contentServiceMock = $this->getMockBuilder(ContentService::class)->disableOriginalConstructor()->getMock();
42
        $contentTypeServiceMock = $this->getMockBuilder(ContentTypeService::class)->disableOriginalConstructor()->getMock();
43
        $fieldTypeServiceMock = $this->getMockBuilder(FieldTypeService::class)->disableOriginalConstructor()->getMock();
44
        $roleServiceMock = $this->getMockBuilder(RoleService::class)->disableOriginalConstructor()->getMock();
45
        $objectStateServiceMock = $this->getMockBuilder(ObjectStateService::class)->disableOriginalConstructor()->getMock();
46
        $urlWildcardServiceMock = $this->getMockBuilder(URLWildcardService::class)->disableOriginalConstructor()->getMock();
47
        $urlAliasServiceMock = $this->getMockBuilder(URLAliasService::class)->disableOriginalConstructor()->getMock();
48
        $userServiceMock = $this->getMockBuilder(UserService::class)->disableOriginalConstructor()->getMock();
49
        $searchServiceMock = $this->getMockBuilder(SearchService::class)->disableOriginalConstructor()->getMock();
50
        $sectionServiceMock = $this->getMockBuilder(SectionService::class)->disableOriginalConstructor()->getMock();
51
        $trashServiceMock = $this->getMockBuilder(TrashService::class)->disableOriginalConstructor()->getMock();
52
        $locationServiceMock = $this->getMockBuilder(LocationService::class)->disableOriginalConstructor()->getMock();
53
        $languageServiceMock = $this->getMockBuilder(LanguageService::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
        );
72
73
        $service = $repository->{$method}();
74
        $this->assertInstanceOf($class, $service);
75
        $service2 = $repository->{$method}();
76
        $this->assertTrue($service === $service2);
77
    }
78
79
    public function serviceMethods()
80
    {
81
        return [
82
            ['getContentService', ContentService::class],
83
            ['getContentLanguageService', LanguageService::class],
84
            ['getContentTypeService', ContentTypeService::class],
85
            ['getLocationService', LocationService::class],
86
            ['getTrashService', TrashService::class],
87
            ['getSectionService', SectionService::class],
88
            ['getUserService', UserService::class],
89
            ['getURLAliasService', URLAliasService::class],
90
            ['getURLWildcardService', URLWildcardService::class],
91
            ['getObjectStateService', ObjectStateService::class],
92
            ['getRoleService', RoleService::class],
93
            ['getSearchService', SearchService::class],
94
            ['getFieldTypeService', FieldTypeService::class],
95
        ];
96
    }
97
98
    /**
99
     * @dataProvider aggregatedMethods
100
     */
101
    public function testAggregation($method, $parameters, $return)
102
    {
103
        $innerRepositoryMock = $this->getMockBuilder(InnerRepository::class)->disableOriginalConstructor()->getMock();
104
        $signalDispatcherMock = $this->createMock(SignalDispatcher::class);
105
106
        $contentServiceMock = $this->getMockBuilder(ContentService::class)->disableOriginalConstructor()->getMock();
107
        $contentTypeServiceMock = $this->getMockBuilder(ContentTypeService::class)->disableOriginalConstructor()->getMock();
108
        $fieldTypeServiceMock = $this->getMockBuilder(FieldTypeService::class)->disableOriginalConstructor()->getMock();
109
        $roleServiceMock = $this->getMockBuilder(RoleService::class)->disableOriginalConstructor()->getMock();
110
        $objectStateServiceMock = $this->getMockBuilder(ObjectStateService::class)->disableOriginalConstructor()->getMock();
111
        $urlWildcardServiceMock = $this->getMockBuilder(URLWildcardService::class)->disableOriginalConstructor()->getMock();
112
        $urlAliasServiceMock = $this->getMockBuilder(URLAliasService::class)->disableOriginalConstructor()->getMock();
113
        $userServiceMock = $this->getMockBuilder(UserService::class)->disableOriginalConstructor()->getMock();
114
        $searchServiceMock = $this->getMockBuilder(SearchService::class)->disableOriginalConstructor()->getMock();
115
        $sectionServiceMock = $this->getMockBuilder(SectionService::class)->disableOriginalConstructor()->getMock();
116
        $trashServiceMock = $this->getMockBuilder(TrashService::class)->disableOriginalConstructor()->getMock();
117
        $locationServiceMock = $this->getMockBuilder(LocationService::class)->disableOriginalConstructor()->getMock();
118
        $languageServiceMock = $this->getMockBuilder(LanguageService::class)->disableOriginalConstructor()->getMock();
119
120
        $innerRepositoryMock->expects($this->once())
121
            ->method($method)
122
            ->will(
123
                $this->returnValueMap([
124
                    array_merge($parameters, [$return]),
125
                ])
126
            );
127
128
        $repository = new Repository(
129
            $innerRepositoryMock,
130
            $signalDispatcherMock,
131
            $contentServiceMock,
132
            $contentTypeServiceMock,
133
            $fieldTypeServiceMock,
134
            $roleServiceMock,
135
            $objectStateServiceMock,
136
            $urlWildcardServiceMock,
137
            $urlAliasServiceMock,
138
            $userServiceMock,
139
            $searchServiceMock,
140
            $sectionServiceMock,
141
            $trashServiceMock,
142
            $locationServiceMock,
143
            $languageServiceMock
144
        );
145
146
        $result = call_user_func_array([$repository, $method], $parameters);
147
        $this->assertTrue($result === $return);
148
    }
149
150
    public function aggregatedMethods()
151
    {
152
        $ts = 374390100;
153
        $dt = new \DateTime();
154
        $dt->setTimestamp($ts);
155
156
        return [
157
            [
158
                'getCurrentUser',
159
                [],
160
                new User(),
161
            ],
162
            [
163
                'setCurrentUser',
164
                [new User()],
165
                null,
166
            ],
167
            [
168
                'hasAccess',
169
                ['module', 'function', new User()],
170
                ['limitations'],
171
            ],
172
            [
173
                'canUser',
174
                ['module', 'function', new User(), new Location()],
175
                false,
176
            ],
177
            [
178
                'beginTransaction',
179
                [],
180
                true,
181
            ],
182
            [
183
                'commit',
184
                [],
185
                true,
186
            ],
187
            [
188
                'rollback',
189
                [],
190
                true,
191
            ],
192
        ];
193
    }
194
}
195