Completed
Push — master ( 1de9b7...830752 )
by Kristof
38:46 queued 24:09
created

Security/Acl/Permission/PermissionAdminTest.php (30 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace Kunstmaan\AdminBundle\Tests\Helper\Security\Acl\Permission;
4
5
use Codeception\Stub;
6
use Doctrine\Common\Collections\ArrayCollection;
7
use Doctrine\ORM\EntityManager;
8
use Doctrine\ORM\EntityRepository;
9
use Kunstmaan\AdminBundle\Entity\AbstractEntity;
10
use Kunstmaan\AdminBundle\Entity\User;
11
use Kunstmaan\AdminBundle\Helper\Security\Acl\Permission\MaskBuilder;
12
use Kunstmaan\AdminBundle\Helper\Security\Acl\Permission\PermissionAdmin;
13
use Kunstmaan\AdminBundle\Helper\Security\Acl\Permission\PermissionMapInterface;
14
use Kunstmaan\NodeBundle\Entity\Node;
15
use Kunstmaan\UtilitiesBundle\Helper\Shell\Shell;
16
use PHPUnit\Framework\TestCase;
17
use ReflectionClass;
18
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
19
use Symfony\Component\HttpFoundation\Request;
20
use Symfony\Component\HttpKernel\KernelInterface;
21
use Symfony\Component\Security\Acl\Domain\RoleSecurityIdentity;
22
use Symfony\Component\Security\Acl\Exception\AclNotFoundException;
23
use Symfony\Component\Security\Acl\Model\AclInterface;
24
use Symfony\Component\Security\Acl\Model\AclProviderInterface;
25
use Symfony\Component\Security\Acl\Model\AuditableEntryInterface;
26
use Symfony\Component\Security\Acl\Model\MutableAclInterface;
27
use Symfony\Component\Security\Acl\Model\MutableAclProviderInterface;
28
use Symfony\Component\Security\Acl\Model\ObjectIdentityRetrievalStrategyInterface;
29
use Symfony\Component\Security\Acl\Model\SecurityIdentityInterface;
30
use Symfony\Component\Security\Core\Authentication\Token\PreAuthenticatedToken;
31
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
32
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
33
34
class PermissionAdminTest extends TestCase
35
{
36
    /**
37
     * @var PermissionAdmin
38
     */
39
    protected $object;
40
41
    public function testInitialize()
42
    {
43
        $object = $this->getInitializedPermissionAdmin();
44
        $this->assertEquals(array('ROLE_TEST' => new MaskBuilder(1)), $object->getPermissions());
45
    }
46
47
    public function testGetPermissionWithString()
48
    {
49
        $object = $this->getInitializedPermissionAdmin();
50
        $this->assertEquals(new MaskBuilder(1), $object->getPermission('ROLE_TEST'));
51
    }
52
53
    public function testGetPermissionWithRoleObject()
54
    {
55
        $object = $this->getInitializedPermissionAdmin();
56
57
        $role = $this->createMock('Symfony\Component\Security\Core\Role\Role');
58
        $role->expects($this->once())
59
            ->method('getRole')
60
            ->will($this->returnValue('ROLE_TEST'));
61
        $this->assertEquals(new MaskBuilder(1), $object->getPermission($role));
62
    }
63
64
    public function testGetPermissionWithUnknownRole()
65
    {
66
        $object = $this->getInitializedPermissionAdmin();
67
        $this->assertNull($object->getPermission('ROLE_UNKNOWN'));
68
    }
69
70
    public function testGetAllRoles()
71
    {
72
        $roleRepo = $this->getMockBuilder('Doctrine\ORM\EntityRepository')
73
            ->disableOriginalConstructor()
74
            ->getMock();
75
        $roleRepo->expects($this->once())
76
            ->method('findAll')
77
            ->will($this->returnValue(null));
78
79
        $em = $this->getEntityManager();
80
        $em->expects($this->once())
81
            ->method('getRepository')
82
            ->with('KunstmaanAdminBundle:Role')
83
            ->will($this->returnValue($roleRepo));
84
        $context = $this->getTokenStorage();
85
        $aclProvider = $this->getAclProvider();
86
        $retrievalStrategy = $this->getOidRetrievalStrategy();
87
        $dispatcher = $this->getEventDispatcher();
88
        $shell = $this->getShell();
89
        $kernel = $this->getKernel();
90
        $object = new PermissionAdmin($em, $context, $aclProvider, $retrievalStrategy, $dispatcher, $shell, $kernel);
0 ignored issues
show
$em is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Doctrine\ORM\EntityManager>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$context is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...\TokenStorageInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$aclProvider is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...l\AclProviderInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$retrievalStrategy is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...ievalStrategyInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$dispatcher is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...entDispatcherInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$kernel is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...Kernel\KernelInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
91
92
        $this->assertNull($object->getAllRoles());
93
    }
94
95
    public function testGetPossiblePermissions()
96
    {
97
        $em = $this->getEntityManager();
98
        $context = $this->getTokenStorage();
99
        $aclProvider = $this->getAclProvider();
100
        $retrievalStrategy = $this->getOidRetrievalStrategy();
101
        $retrievalStrategy
102
            ->expects($this->once())
103
            ->method('getObjectIdentity')
104
            ->will($this->throwException(new \Symfony\Component\Security\Acl\Exception\AclNotFoundException()));
105
        $dispatcher = $this->getEventDispatcher();
106
        $shell = $this->getShell();
107
        $kernel = $this->getKernel();
108
        $object = new PermissionAdmin($em, $context, $aclProvider, $retrievalStrategy, $dispatcher, $shell, $kernel);
0 ignored issues
show
$em is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Doctrine\ORM\EntityManager>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$context is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...\TokenStorageInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$aclProvider is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...l\AclProviderInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$retrievalStrategy is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...ievalStrategyInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$dispatcher is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...entDispatcherInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$kernel is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...Kernel\KernelInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
109
110
        $permissions = array('PERMISSION1', 'PERMISSION2');
111
        $permissionMap = $this->createMock('Kunstmaan\AdminBundle\Helper\Security\Acl\Permission\PermissionMapInterface');
112
        $permissionMap
113
            ->expects($this->any())
114
            ->method('getPossiblePermissions')
115
            ->will($this->returnValue($permissions));
116
        $entity = $this->getEntity();
117
        /* @var $permissionMap PermissionMapInterface */
118
        $object->initialize($entity, $permissionMap);
119
        $this->assertEquals($permissions, $object->getPossiblePermissions());
120
    }
121
122
    public function testCreateAclChangeset()
123
    {
124
        $em = $this->getEntityManager();
125
        $em->expects($this->once())
126
            ->method('persist')
127
            ->with($this->isInstanceOf('Kunstmaan\AdminBundle\Entity\AclChangeset'));
128
        $em->expects($this->once())
129
            ->method('flush');
130
        $context = $this->getTokenStorage();
131
        $aclProvider = $this->getAclProvider();
132
        $retrievalStrategy = $this->getOidRetrievalStrategy();
133
        $dispatcher = $this->getEventDispatcher();
134
        $shell = $this->getShell();
135
        $kernel = $this->getKernel();
136
        $object = new PermissionAdmin($em, $context, $aclProvider, $retrievalStrategy, $dispatcher, $shell, $kernel);
0 ignored issues
show
$em is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Doctrine\ORM\EntityManager>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$context is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...\TokenStorageInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$aclProvider is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...l\AclProviderInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$retrievalStrategy is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...ievalStrategyInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$dispatcher is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...entDispatcherInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$kernel is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...Kernel\KernelInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
137
138
        $entity = $this->getEntity();
139
        /* @var $user User */
140
        $user = $this->getMockBuilder('Kunstmaan\AdminBundle\Entity\User')
141
            ->disableOriginalConstructor()
142
            ->getMock();
143
144
        $object->createAclChangeSet($entity, array(), $user);
145
    }
146
147
    /**
148
     * Return entity manager mock
149
     *
150
     * @return EntityManager
0 ignored issues
show
Should the return type not be \PHPUnit\Framework\MockObject\MockObject?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
151
     */
152
    public function getEntityManager()
153
    {
154
        return $this->getMockBuilder('Doctrine\ORM\EntityManager')
155
            ->disableOriginalConstructor()
156
            ->getMock();
157
    }
158
159
    /**
160
     * Return alc provider mock
161
     *
162
     * @return AclProviderInterface
0 ignored issues
show
Should the return type not be \PHPUnit\Framework\MockObject\MockObject?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
163
     */
164
    public function getAclProvider()
165
    {
166
        return $this->createMock('Symfony\Component\Security\Acl\Model\MutableAclProviderInterface');
167
    }
168
169
    /**
170
     * Return security token storage
171
     *
172
     * @return TokenStorageInterface
173
     */
174
    public function getTokenStorage()
175
    {
176
        return $this->createMock('Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface');
177
    }
178
179
    /**
180
     * Return oid retrieval strategy mock
181
     *
182
     * @return ObjectIdentityRetrievalStrategyInterface
0 ignored issues
show
Should the return type not be \PHPUnit\Framework\MockObject\MockObject?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
183
     */
184
    public function getOidRetrievalStrategy()
185
    {
186
        return $this->createMock('Symfony\Component\Security\Acl\Model\ObjectIdentityRetrievalStrategyInterface');
187
    }
188
189
    /**
190
     * Return event dispatcher mock
191
     *
192
     * @return EventDispatcherInterface
0 ignored issues
show
Should the return type not be \PHPUnit\Framework\MockObject\MockObject?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
193
     */
194
    public function getEventDispatcher()
195
    {
196
        return $this->createMock('Symfony\Component\EventDispatcher\EventDispatcher');
197
    }
198
199
    /**
200
     * @return Shell
201
     */
202
    public function getShell()
203
    {
204
        return new Shell();
205
    }
206
207
    /**
208
     * @return KernelInterface
0 ignored issues
show
Should the return type not be \PHPUnit\Framework\MockObject\MockObject?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
209
     */
210
    public function getKernel()
211
    {
212
        return $this->createMock('Symfony\Component\HttpKernel\KernelInterface');
213
    }
214
215
    /**
216
     * Return permission admin mock
217
     *
218
     * @return PermissionAdmin
219
     */
220
    public function getPermissionAdmin()
221
    {
222
        $em = $this->getEntityManager();
223
        $context = $this->getTokenStorage();
224
225
        $securityIdentity = new RoleSecurityIdentity('ROLE_TEST');
226
227
        $entity = $this->getMockBuilder('Symfony\Component\Security\Acl\Domain\Entry')
228
            ->disableOriginalConstructor()
229
            ->getMock();
230
        $entity
231
            ->expects($this->any())
232
            ->method('getSecurityIdentity')
233
            ->will($this->returnValue($securityIdentity));
234
        $entity
235
            ->expects($this->any())
236
            ->method('getMask')
237
            ->will($this->returnValue(1));
238
239
        $acl = $this->getMockBuilder('Symfony\Component\Security\Acl\Domain\Acl')
240
            ->disableOriginalConstructor()
241
            ->getMock();
242
        $acl->expects($this->atLeastOnce())
243
            ->method('getObjectAces')
244
            ->will($this->returnValue(array($entity)));
245
246
        $aclProvider = $this->getAclProvider();
247
        $aclProvider
248
            ->expects($this->atLeastOnce())
249
            ->method('findAcl')
250
            ->with($this->anything())
251
            ->will($this->returnValue($acl));
252
253
        $retrievalStrategy = $this->getOidRetrievalStrategy();
254
        $objectIdentity = $this->createMock('Symfony\Component\Security\Acl\Model\ObjectIdentityInterface');
255
        $retrievalStrategy
256
            ->expects($this->atLeastOnce())
257
            ->method('getObjectIdentity')
258
            ->will($this->returnValue($objectIdentity));
259
        $dispatcher = $this->getEventDispatcher();
260
        $shell = $this->getShell();
261
        $kernel = $this->getKernel();
262
        $object = new PermissionAdmin($em, $context, $aclProvider, $retrievalStrategy, $dispatcher, $shell, $kernel);
0 ignored issues
show
$em is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Doctrine\ORM\EntityManager>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$context is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...\TokenStorageInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$aclProvider is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...l\AclProviderInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$retrievalStrategy is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...ievalStrategyInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$dispatcher is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...entDispatcherInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
$kernel is of type object<PHPUnit\Framework\MockObject\MockObject>, but the function expects a object<Symfony\Component...Kernel\KernelInterface>.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
263
264
        return $object;
265
    }
266
267
    /**
268
     * Return entity mock
269
     *
270
     * @return AbstractEntity
0 ignored issues
show
Should the return type not be \PHPUnit\Framework\MockObject\MockObject?

This check compares the return type specified in the @return annotation of a function or method doc comment with the types returned by the function and raises an issue if they mismatch.

Loading history...
271
     */
272
    public function getEntity()
273
    {
274
        return $this->getMockForAbstractClass('Kunstmaan\AdminBundle\Entity\AbstractEntity');
275
    }
276
277
    /**
278
     * Return permission admin mock
279
     *
280
     * @return PermissionAdmin
281
     */
282
    public function getInitializedPermissionAdmin()
283
    {
284
        $object = $this->getPermissionAdmin();
285
        $entity = $this->getEntity();
286
        /* @var $permissionMap PermissionMapInterface */
287
        $permissionMap = $this->createMock('Kunstmaan\AdminBundle\Helper\Security\Acl\Permission\PermissionMapInterface');
288
        $object->initialize($entity, $permissionMap);
289
290
        return $object;
291
    }
292
293
    public function testBindRequestReturnsTrueWhenNoChanges()
294
    {
295
        $object = $this->getInitializedPermissionAdmin();
296
        $request = $this->createMock(Request::class);
297
        $request->request = $this->createMock(Request::class);
298
        $request->request->expects($this->once())->method('get')->willReturn('');
299
        $object->bindRequest($request);
300
    }
301
302
    /**
303
     * @throws \ReflectionException
304
     */
305
    public function testBindRequest()
306
    {
307
        $object = $this->getInitializedPermissionAdmin();
308
        $token = $this->createMock(PreAuthenticatedToken::class);
309
        $token->expects($this->once())->method('getUser')->willReturn(new User());
310
        $request = $this->createMock(Request::class);
311
        $request->request = $this->createMock(Request::class);
312
        $request->request->expects($this->any())->method('get')->will($this->onConsecutiveCalls(['ADMIN' => ['ADD' => ['VIEW']]], true));
313
314
        $mirror = new ReflectionClass(PermissionAdmin::class);
315
        $property = $mirror->getProperty('tokenStorage');
316
        $property->setAccessible(true);
317
        $val = $property->getValue($object);
318
        $val->expects($this->once())->method('getToken')->willReturn($token);
319
320
        $object->bindRequest($request);
321
    }
322
323
    /**
324
     * @throws \ReflectionException
325
     */
326
    public function testMaskAtIndex()
327
    {
328
        $object = $this->getInitializedPermissionAdmin();
329
330
        $id = $this->createMock(SecurityIdentityInterface::class);
331
        $ace = $this->createMock(AuditableEntryInterface::class);
332
        $ace->expects($this->once())->method('getSecurityIdentity')->willReturn($id);
333
        $acl = $this->createMock(AclInterface::class);
334
        $acl->expects($this->once())->method('getObjectAces')->willReturn([1 => $ace]);
335
336
        $mirror = new ReflectionClass(PermissionAdmin::class);
337
        $method = $mirror->getMethod('getMaskAtIndex');
338
        $method->setAccessible(true);
339
340
        $this->assertFalse($method->invoke($object, $acl, 1));
341
342
        $id = new RoleSecurityIdentity('ADMIN');
343
        $ace = $this->createMock(AuditableEntryInterface::class);
344
        $ace->expects($this->once())->method('getSecurityIdentity')->willReturn($id);
345
        $ace->expects($this->once())->method('getMask')->willReturn(true);
346
        $acl = $this->createMock(AclInterface::class);
347
        $acl->expects($this->once())->method('getObjectAces')->willReturn([1 => $ace]);
348
349
        $this->assertTrue($method->invoke($object, $acl, 1));
350
    }
351
352
    /**
353
     * @throws \ReflectionException
354
     */
355
    public function testGetManageableRolesForPages()
356
    {
357
        $object = $this->getInitializedPermissionAdmin();
358
359
        $repo = $this->createMock(EntityRepository::class);
360
        $repo->expects($this->once())->method('findAll')->willReturn(['ROLE_SUPER_ADMIN', 'USER']);
361
362
        $em = $this->getEntityManager();
363
        $em->expects($this->once())->method('getRepository')->willReturn($repo);
364
365
        $token = $this->createMock(PreAuthenticatedToken::class);
366
        $token->expects($this->once())->method('getUser')->willReturn(new User());
367
368
        $storage = $this->createMock(TokenStorage::class);
369
        $storage->expects($this->once())->method('getToken')->willReturn($token);
370
371
        $mirror = new ReflectionClass(PermissionAdmin::class);
372
        $property = $mirror->getProperty('tokenStorage');
373
        $property->setAccessible(true);
374
        $property->setValue($object, $storage);
375
        $property = $mirror->getProperty('em');
376
        $property->setAccessible(true);
377
        $property->setValue($object, $em);
378
379
        $roles = $object->getManageableRolesForPages();
380
        $this->assertCount(1, $roles);
381
        $this->assertTrue(in_array('USER', $roles));
382
    }
383
384
    /**
385
     * @throws \ReflectionException
386
     */
387
    public function testApplyAclChangesetReturnsNull()
388
    {
389
        $object = $this->getInitializedPermissionAdmin();
390
        /** @var AbstractEntity $entity */
391
        $entity = Stub::makeEmpty(AbstractEntity::class, ['getId' => 666, 'setId' => null, '__toString' => '666']);
392
        $this->assertNull($object->applyAclChangeset($entity, [], true));
393
    }
394
395
    /**
396
     * @throws \ReflectionException
397
     */
398
    public function testApplyAclAppliesChangesetRecursive()
399
    {
400
        $object = $this->getInitializedPermissionAdmin();
401
        $acl = $this->createMock(MutableAclInterface::class);
402
        $provider = $this->createMock(MutableAclProviderInterface::class);
403
        $provider->expects($this->atLeastOnce())->method('findAcl')->willThrowException(new AclNotFoundException());
404
        $provider->expects($this->atLeastOnce())->method('createAcl')->willReturn($acl);
405
406
        $mirror = new ReflectionClass(PermissionAdmin::class);
407
        $property = $mirror->getProperty('aclProvider');
408
        $property->setAccessible(true);
409
        $property->setValue($object, $provider);
410
411
        $entity = new Node();
412
        $entity->setChildren(new ArrayCollection([new Node()]));
413
        $this->assertNull($object->applyAclChangeset($entity, [], true));
414
    }
415
416
    /**
417
     * @throws \ReflectionException
418
     */
419
    public function testApplyAclAppliesChangeset()
420
    {
421
        $object = $this->getInitializedPermissionAdmin();
422
423
        $entity = new Node();
424
        $this->assertNull($object->applyAclChangeset($entity, ['ROLE_TEST' => ['DEL' => ['VIEW']]], false));
425
    }
426
}
427