Completed
Push — master ( 770316...74fc07 )
by Jeroen
09:08 queued 02:44
created

Tests/unit/Helper/Menu/SettingsMenuAdaptorTest.php (2 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\Menu;
4
5
use Kunstmaan\AdminBundle\Helper\Menu\MenuAdaptorInterface;
6
use Kunstmaan\AdminBundle\Helper\Menu\MenuBuilder;
7
use Kunstmaan\AdminBundle\Helper\Menu\MenuItem;
8
use Kunstmaan\AdminBundle\Helper\Menu\SettingsMenuAdaptor;
9
use Kunstmaan\AdminBundle\Helper\Menu\TopMenuItem;
10
use PHPUnit\Framework\TestCase;
11
use Symfony\Component\HttpFoundation\Request;
12
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
13
14
class SettingsMenuAdaptorTest extends TestCase
15
{
16
    /** @var AuthorizationCheckerInterface (mock) */
17
    private $authorizationCheckerInterface;
18
19
    /**
20
     * @var bool
21
     */
22
    private $isEnabledVersionChecker = true;
23
24
    public function setUp()
25
    {
26
        $this->authorizationCheckerInterface = $this->createMock(AuthorizationCheckerInterface::class);
0 ignored issues
show
Documentation Bug introduced by
It seems like $this->createMock(\Symfo...heckerInterface::class) of type object<PHPUnit\Framework\MockObject\MockObject> is incompatible with the declared type object<Symfony\Component...zationCheckerInterface> of property $authorizationCheckerInterface.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
27
    }
28
29
    /**
30
     * @dataProvider provider
31
     *
32
     * @param TopMenuItem|null $parent
33
     * @param string           $requestRoute
34
     * @param int              $expectedCount
35
     * @param string|null      $expectedLabel
36
     * @param bool             $granted
37
     */
38
    public function testAdaptChildren(?TopMenuItem $parent, string $requestRoute, int $expectedCount, ?string $expectedLabel, bool $granted)
39
    {
40
        $children = [];
41
        /** @var MenuBuilder $menuBuilderMock */
42
        $menuBuilderMock = $this->createMock(MenuBuilder::class);
43
        /** @var Request $request */
44
        $request = new Request([], [], ['_route' => $requestRoute]);
45
        $this->authorizationCheckerInterface
46
            ->expects($this->any())
47
            ->method('isGranted')
48
            ->willReturn($granted);
49
50
        $settingsMenuAdaptorMock = $this->setUpSettingsMenuAdaptorMock();
51
        $settingsMenuAdaptorMock->adaptChildren($menuBuilderMock, $children, $parent, $request);
52
53
        $this->assertCount($expectedCount, $children);
0 ignored issues
show
$children is of type array, but the function expects a object<Countable>|object...nit\Framework\iterable>.

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...
54
        $this->assertContainsOnlyInstancesOf(MenuItem::class, $children);
55
56
        if (null !== $expectedLabel) {
57
            $this->assertEquals($expectedLabel, $children[0]->getLabel());
58
        }
59
    }
60
61
    /**
62
     * @return \PHPUnit\Framework\MockObject\MockObject|SettingsMenuAdaptor
63
     */
64
    public function setUpSettingsMenuAdaptorMock()
65
    {
66
        $simpleMenuAdaptorMock = $this->getMockBuilder(SettingsMenuAdaptor::class)
67
            ->setConstructorArgs([$this->authorizationCheckerInterface, $this->isEnabledVersionChecker])
68
            ->setMethods(null)
69
            ->getMock()
70
        ;
71
72
        return $simpleMenuAdaptorMock;
73
    }
74
75
    public function testHasInterface()
76
    {
77
        $settingsMenuAdaptorMock = $this->setUpSettingsMenuAdaptorMock();
78
        $this->assertInstanceOf(MenuAdaptorInterface::class, $settingsMenuAdaptorMock);
79
    }
80
81
    public function provider()
82
    {
83
        /** @var TopMenuItem $parent */
84
        $parent = $this->createMock(TopMenuItem::class);
85
        $parent
86
            ->expects($this->any())
87
            ->method('getRoute')
88
            ->willReturn('KunstmaanAdminBundle_settings')
89
        ;
90
91
        /** @var TopMenuItem $parentWithOtherRoute */
92
        $parentWithOtherRoute = $this->createMock(TopMenuItem::class);
93
        $parentWithOtherRoute
94
            ->expects($this->any())
95
            ->method('getRoute')
96
            ->willReturn('KunstmaanAdminBundle_other')
97
        ;
98
99
        return [
100
            'with no parent and no route' => [null, 'KunstmaanAdminBundle_settings', 1, 'settings.title', true],
101
            'with parent and route is settings but not granted' => [$parent, 'kunstmaanadminbundle_admin_exception', 1, 'settings.exceptions.title', false],
102
            'with parent and route is settings and first active' => [$parent, 'KunstmaanAdminBundle_settings_bundle_version', 2, 'settings.version.bundle', true],
103
            'with parent and route is settings and second active' => [$parent, 'kunstmaanadminbundle_admin_exception', 2, 'settings.version.bundle', true],
104
            'with parent and route is not settings' => [$parentWithOtherRoute, '', 0, null, true],
105
        ];
106
    }
107
}
108