1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Kunstmaan\MenuBundle\Tests\Entity; |
4
|
|
|
|
5
|
|
|
use Doctrine\Common\Collections\ArrayCollection; |
6
|
|
|
use Kunstmaan\MenuBundle\Entity\BaseMenuItem; |
7
|
|
|
use Kunstmaan\MenuBundle\Entity\Menu; |
8
|
|
|
use Kunstmaan\MenuBundle\Entity\MenuItem; |
9
|
|
|
use Kunstmaan\NodeBundle\Entity\Node; |
10
|
|
|
use Kunstmaan\NodeBundle\Entity\NodeTranslation; |
11
|
|
|
use PHPUnit\Framework\TestCase; |
12
|
|
|
use Symfony\Component\Validator\Context\ExecutionContext; |
13
|
|
|
use Symfony\Component\Validator\Violation\ConstraintViolationBuilder; |
14
|
|
|
|
15
|
|
|
class MenuItemTest extends TestCase |
16
|
|
|
{ |
17
|
|
|
public function testGetSetParent() |
18
|
|
|
{ |
19
|
|
|
$son = new MenuItem(); |
20
|
|
|
$daddy = new MenuItem(); |
21
|
|
|
|
22
|
|
|
$son->setParent($daddy); |
23
|
|
|
$this->assertInstanceOf(MenuItem::class, $son->getParent()); |
24
|
|
|
} |
25
|
|
|
|
26
|
|
|
public function testGetSetChildren() |
27
|
|
|
{ |
28
|
|
|
$daddy = new MenuItem(); |
29
|
|
|
$son = new MenuItem(); |
30
|
|
|
$daughter = new MenuItem(); |
31
|
|
|
|
32
|
|
|
$daddy->setChildren(new ArrayCollection([$son, $daughter])); |
33
|
|
|
$this->assertInstanceOf(ArrayCollection::class, $son->getChildren()); |
34
|
|
|
} |
35
|
|
|
|
36
|
|
|
public function testBaseClassMethods() |
37
|
|
|
{ |
38
|
|
|
$item = new MenuItem(); |
39
|
|
|
$menu = new Menu(); |
40
|
|
|
$nodeTranslation = new NodeTranslation(); |
41
|
|
|
|
42
|
|
|
$item->setMenu($menu); |
43
|
|
|
$item->setType('Rubber Chicken'); |
44
|
|
|
$item->setNodeTranslation($nodeTranslation); |
45
|
|
|
$item->setTitle('Buy Bitcoin Cash!'); |
46
|
|
|
$item->setUrl('https://nasa.gov'); |
47
|
|
|
$item->setNewWindow(true); |
48
|
|
|
$item->setLft(5); |
49
|
|
|
$item->setLvl(6); |
50
|
|
|
$item->setRgt(7); |
51
|
|
|
|
52
|
|
|
$this->assertInstanceOf(Menu::class, $item->getMenu()); |
53
|
|
|
$this->assertEquals('Rubber Chicken', $item->getType()); |
54
|
|
|
$this->assertInstanceOf(NodeTranslation::class, $item->getNodeTranslation()); |
55
|
|
|
$this->assertEquals('Buy Bitcoin Cash!', $item->getTitle()); |
56
|
|
|
$this->assertEquals('https://nasa.gov', $item->getUrl()); |
57
|
|
|
$this->assertTrue($item->isNewWindow()); |
58
|
|
|
$this->assertEquals(5, $item->getLft()); |
59
|
|
|
$this->assertEquals(6, $item->getLvl()); |
60
|
|
|
$this->assertEquals(7, $item->getRgt()); |
61
|
|
|
} |
62
|
|
|
|
63
|
|
View Code Duplication |
public function testGetDisplayUrl() |
|
|
|
|
64
|
|
|
{ |
65
|
|
|
$item = new MenuItem(); |
66
|
|
|
$nodeTranslation = new NodeTranslation(); |
67
|
|
|
|
68
|
|
|
$nodeTranslation->setUrl('https://nasa.gov'); |
69
|
|
|
$item->setType(BaseMenuItem::TYPE_PAGE_LINK); |
70
|
|
|
$item->setUrl('https://bitcoinwisdom.com'); |
71
|
|
|
$item->setNodeTranslation($nodeTranslation); |
72
|
|
|
|
73
|
|
|
$this->assertEquals('https://nasa.gov', $item->getDisplayUrl()); |
74
|
|
|
|
75
|
|
|
$item->setType(BaseMenuItem::TYPE_URL_LINK); |
76
|
|
|
$this->assertEquals('https://bitcoinwisdom.com', $item->getDisplayUrl()); |
77
|
|
|
} |
78
|
|
|
|
79
|
|
View Code Duplication |
public function testGetDisplayTitle() |
|
|
|
|
80
|
|
|
{ |
81
|
|
|
$item = new MenuItem(); |
82
|
|
|
$nodeTranslation = new NodeTranslation(); |
83
|
|
|
|
84
|
|
|
$nodeTranslation->setTitle('Node'); |
85
|
|
|
$item->setType(BaseMenuItem::TYPE_PAGE_LINK); |
86
|
|
|
$item->setNodeTranslation($nodeTranslation); |
87
|
|
|
$this->assertEquals('Node', $item->getDisplayTitle()); |
88
|
|
|
|
89
|
|
|
$item->setTitle('Hello'); |
90
|
|
|
$this->assertEquals('Hello', $item->getDisplayTitle()); |
91
|
|
|
|
92
|
|
|
$item->setType(BaseMenuItem::TYPE_URL_LINK); |
93
|
|
|
$this->assertEquals('Hello', $item->getDisplayTitle()); |
94
|
|
|
} |
95
|
|
|
|
96
|
|
|
public function testIsOnline() |
97
|
|
|
{ |
98
|
|
|
$item = new MenuItem(); |
99
|
|
|
$nodeTranslation = new NodeTranslation(); |
100
|
|
|
$node = new Node(); |
101
|
|
|
$node->setDeleted(false); |
102
|
|
|
$nodeTranslation->setOnline(false); |
103
|
|
|
$nodeTranslation->setNode($node); |
104
|
|
|
$item->setNodeTranslation($nodeTranslation); |
105
|
|
|
|
106
|
|
|
$this->assertFalse($item->isOnline()); |
107
|
|
|
|
108
|
|
|
$item->setType(BaseMenuItem::TYPE_URL_LINK); |
109
|
|
|
$this->assertTrue($item->isOnline()); |
110
|
|
|
|
111
|
|
|
$item->setType(BaseMenuItem::TYPE_PAGE_LINK); |
112
|
|
|
$this->assertFalse($item->isOnline()); |
113
|
|
|
|
114
|
|
|
$nodeTranslation->setOnline(true); |
115
|
|
|
$this->assertTrue($item->isOnline()); |
116
|
|
|
} |
117
|
|
|
|
118
|
|
|
public function testValidateEntity() |
119
|
|
|
{ |
120
|
|
|
$nodeTranslation = $this->createMock(NodeTranslation::class); |
121
|
|
|
$item = new MenuItem(); |
122
|
|
|
$item->setType(MenuItem::TYPE_PAGE_LINK); |
123
|
|
|
$item->setNodeTranslation($nodeTranslation); |
|
|
|
|
124
|
|
|
$item->setTitle('Title'); |
125
|
|
|
$item->setUrl('Url'); |
126
|
|
|
|
127
|
|
|
$violationBuilder = $this->getMockBuilder(ConstraintViolationBuilder::class) |
128
|
|
|
->disableOriginalConstructor() |
129
|
|
|
->getMock(); |
130
|
|
|
|
131
|
|
|
$violationBuilder->expects($this->never()) |
132
|
|
|
->method('atPath') |
133
|
|
|
->willReturn($violationBuilder); |
134
|
|
|
|
135
|
|
|
$violationBuilder->expects($this->never()) |
136
|
|
|
->method('addViolation') |
137
|
|
|
->willReturn(true); |
138
|
|
|
|
139
|
|
|
$context = $this->getMockBuilder(ExecutionContext::class) |
140
|
|
|
->disableOriginalConstructor() |
141
|
|
|
->getMock(); |
142
|
|
|
|
143
|
|
|
$context->expects($this->never()) |
144
|
|
|
->method('buildViolation') |
145
|
|
|
->willReturn($violationBuilder); |
146
|
|
|
|
147
|
|
|
$item->validateEntity($context); |
|
|
|
|
148
|
|
|
$item->setType(MenuItem::TYPE_URL_LINK); |
149
|
|
|
$item->validateEntity($context); |
|
|
|
|
150
|
|
|
} |
151
|
|
|
} |
152
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.