MenuBuilderTest::testSetDefaultLocale()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 16
c 0
b 0
f 0
rs 9.4285
cc 1
eloc 12
nc 1
nop 0
1
<?php
2
3
namespace Alpixel\Bundle\MenuBundle\Tests\Builder;
4
5
use Alpixel\Bundle\MenuBundle\Builder\MenuBuilder;
6
use Alpixel\Bundle\MenuBundle\Entity\Item;
7
use Alpixel\Bundle\MenuBundle\Entity\Menu;
8
use Alpixel\Bundle\MenuBundle\Entity\Repository\MenuRepository;
9
use Doctrine\Common\Collections\ArrayCollection;
10
use Doctrine\ORM\EntityManager;
11
use Knp\Menu\FactoryInterface;
12
use Knp\Menu\MenuItem;
13
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
14
15
class MenuBuilderTest extends KernelTestCase
16
{
17
    private $container;
18
19
    public function setUp()
20
    {
21
        self::bootKernel();
22
        $this->container = static::$kernel->getContainer();
23
    }
24
25
    public function getMenuBuilder()
26
    {
27
        return $this->container->get('alpixel_menu.builder');
28
    }
29
30
    public function testIsValidLocale()
31
    {
32
        $this->assertEquals(true, MenuBuilder::isValidLocale('fr'));
33
    }
34
35
    public function testIsValidMachineName()
36
    {
37
        $this->assertEquals(true, MenuBuilder::isValidMachineName('Machine Name'));
38
    }
39
40
    public function testSetDefaultLocale()
41
    {
42
        $entityManagerMock = $this->getMockBuilder(EntityManager::class)
43
            ->disableOriginalConstructor()
44
            ->getMock();
45
        $factoryMock = $this->getMockBuilder(FactoryInterface::class)
46
            ->disableOriginalConstructor()
47
            ->getMock();
48
49
        $builder = new MenuBuilder($entityManagerMock, $factoryMock);
0 ignored issues
show
Bug introduced by
The call to MenuBuilder::__construct() misses some required arguments starting with $entityManager.
Loading history...
50
        $this->assertNull($builder->getDefaultLocale());
51
52
        $test = 'fr';
53
        $builder->setDefaultLocale($test);
54
        $this->assertEquals($test, $builder->getDefaultLocale());
55
    }
56
57
    public function testCreateKnpMenu()
58
    {
59
        $entityManagerMock = $this->getMockBuilder(EntityManager::class)
60
            ->disableOriginalConstructor()
61
            ->getMock();
62
        $repositoryMock = $this->getMockBuilder(MenuRepository::class)
63
            ->disableOriginalConstructor()
64
            ->setMethods(['findOneMenuByMachineNameAndLocale'])
65
            ->getMock();
66
        $repositoryMock->method('findOneMenuByMachineNameAndLocale')->willReturn($this->getMenuContext('fr'));
67
        $entityManagerMock->method('getRepository')->willReturn($repositoryMock);
68
69
        $builder = new MenuBuilder($entityManagerMock, $this->container->get('knp_menu.factory'));
0 ignored issues
show
Bug introduced by
The call to MenuBuilder::__construct() misses some required arguments starting with $entityManager.
Loading history...
70
        $knpMenu = $builder->createKnpMenu('main', 'fr');
71
        $this->assertInstanceOf(MenuItem::class, $knpMenu);
72
73
        $knpMenu = $builder->createKnpMenu('main');
74
        $this->assertInstanceOf(MenuItem::class, $knpMenu);
75
    }
76
77
    public function getMenuContext($locale)
78
    {
79
        $menuData = $this->getMenuData()[$locale];
80
        $menu = new Menu();
81
        $menu->setName($menuData['name']);
82
        $menu->setMachineName($menuData['machineName']);
83
        $menu->setLocale($menuData['locale']);
84
        $collectionA = new ArrayCollection();
85
        for ($i = 1; $i <= 5; $i++) {
86
            $itemA = $this->newItem($menu, $i);
87
            $collectionB = new ArrayCollection();
88
            for ($j = 1; $j <= 5; $j++) {
89
                $itemB = $this->newItem($menu, $j, $itemA);
90
                $collectionB->add($itemB);
91
                $collectionC = new ArrayCollection();
92
                for ($k = 1; $k <= 5; $k++) {
93
                    $itemC = $this->newItem($menu, $k);
94
                    $collectionC->add($itemC);
95
                }
96
                $itemB->addChildren($collectionC);
97
            }
98
            $itemA->addChildren($collectionB);
99
            $collectionA->add($itemA);
100
        }
101
        $menu->addItems($collectionA);
102
103
        return $menu;
104
    }
105
106
    public function newItem(Menu $menu, $i, Item $parentItem = null)
107
    {
108
        $item = new Item();
109
        $item->setMenu($menu);
110
        $item->setName('Item '.$i);
111
        $item->setPosition($i);
112
        $item->setUri('http://alpixel.fr');
113
114
        if ($parentItem !== null) {
115
            $item->setParent($parentItem);
116
        }
117
118
        return $item;
119
    }
120
121
    public function getMenuData()
122
    {
123
        return [
124
            'fr' => [
125
                'name'        => 'Menu principal',
126
                'machineName' => 'main',
127
                'locale'      => 'fr',
128
            ],
129
            'en' => [
130
                'name'        => 'Main menu',
131
                'machineName' => 'main',
132
                'locale'      => 'en',
133
            ],
134
        ];
135
    }
136
}
137