Skip to content
This repository was archived by the owner on Sep 16, 2021. It is now read-only.

Commit 5f29b60

Browse files
dantleechdbu
authored andcommitted
Adding voter web tests to MenuBundle
1 parent 4e73478 commit 5f29b60

File tree

10 files changed

+165
-11
lines changed

10 files changed

+165
-11
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace Symfony\Cmf\Bundle\MenuBundle\Tests\Resources\Controller;
4+
5+
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
6+
use Symfony\Component\HttpFoundation\Request;
7+
use Symfony\Cmf\Bundle\RoutingBundle\Routing\DynamicRouter;
8+
9+
/**
10+
* Cmi Tests
11+
*
12+
* Tests actions for current menu item functionality.
13+
*/
14+
class CmiTestController extends Controller
15+
{
16+
public function defaultAction(Request $request)
17+
{
18+
return $this->render('::tests/cmi/default.html.twig');
19+
}
20+
21+
public function requestContentIdentityAction(Request $request)
22+
{
23+
$content = $request->get(DynamicRouter::CONTENT_KEY);
24+
if (!$content) {
25+
$content = $this->container->get('doctrine_phpcr.odm.document_manager')->find(null, '/test/content-1');
26+
$request->query->set(DynamicRouter::CONTENT_KEY, $content);
27+
return $this->render('::tests/cmi/requestContentVoterActive.html.twig', array('content' => $content));
28+
}
29+
return $this->render('::tests/cmi/requestContent.html.twig', array('content' => $content));
30+
}
31+
}

Tests/Resources/DataFixtures/PHPCR/LoadMenuData.php

Lines changed: 74 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,13 @@
1919
use Symfony\Cmf\Bundle\MenuBundle\Doctrine\Phpcr\Menu;
2020
use Symfony\Cmf\Bundle\MenuBundle\Tests\Resources\Document\Content;
2121
use Doctrine\ODM\PHPCR\Document\Generic;
22+
use Symfony\Cmf\Bundle\RoutingBundle\Doctrine\Phpcr\Route;
23+
use PHPCR\Util\NodeHelper;
2224

2325
class LoadMenuData implements FixtureInterface, DependentFixtureInterface
2426
{
27+
protected $root;
28+
2529
public function getDependencies()
2630
{
2731
return array(
@@ -31,20 +35,29 @@ public function getDependencies()
3135

3236
public function load(ObjectManager $manager)
3337
{
34-
$content = new Content;
35-
$content->setTitle('Content 1');
36-
$content->setId('/test/content-1');
38+
$this->root = $manager->find(null, '/test');
39+
40+
NodeHelper::createPath($manager->getPhpcrSession(), '/test/menus');
41+
NodeHelper::createPath($manager->getPhpcrSession(), '/test/routes/contents');
42+
$this->menuRoot = $manager->find(null, '/test/menus');
43+
$this->routeRoot = $manager->find(null, '/test/routes');
44+
45+
$this->loadMainMenu($manager);
46+
$this->loadSideMenu($manager);
3747

38-
$root = $manager->find(null, '/test');
39-
$menuRoot = new Generic;
40-
$menuRoot->setNodename('menus');
41-
$menuRoot->setParent($root);
42-
$manager->persist($menuRoot);
48+
$manager->flush();
49+
}
50+
51+
protected function loadMainMenu($manager)
52+
{
53+
$content = new Content;
54+
$content->setTitle('Menu Item Content 1');
55+
$content->setId('/test/content-menu-item-1');
4356

4457
$menu = new Menu;
4558
$menu->setName('test-menu');
4659
$menu->setLabel('Test Menu');
47-
$menu->setParent($menuRoot);
60+
$menu->setParent($this->menuRoot);
4861
$manager->persist($menu);
4962

5063
$menuNode = new MenuNode;
@@ -94,7 +107,7 @@ public function load(ObjectManager $manager)
94107
$menu = new Menu;
95108
$menu->setName('another-menu');
96109
$menu->setLabel('Another Menu');
97-
$menu->setParent($menuRoot);
110+
$menu->setParent($this->menuRoot);
98111
$manager->persist($menu);
99112

100113
$menuNode = new MenuNode;
@@ -113,6 +126,56 @@ public function load(ObjectManager $manager)
113126
$manager->persist($menuNode);
114127

115128
$manager->persist($content);
116-
$manager->flush();
129+
}
130+
131+
protected function loadSideMenu($manager)
132+
{
133+
$content = new Content;
134+
$content->setTitle('Content 1');
135+
$content->setId('/test/content-1');
136+
$manager->persist($content);
137+
138+
$route = new Route();
139+
$route->setContent($content);
140+
$route->setId('/test/routes/contents/content-1');
141+
$route->setDefault('_controller', 'Symfony\Cmf\Bundle\MenuBundle\Tests\Resources\Controller\CmiTestController::requestContentIdentityAction');
142+
$manager->persist($route);
143+
144+
$content = new Content;
145+
$content->setTitle('CMI Content 1');
146+
$content->setId('/test/cmi-content-1');
147+
$manager->persist($content);
148+
149+
$menu = new Menu;
150+
$menu->setName('side-menu');
151+
$menu->setLabel('Side Menu');
152+
$menu->setParent($this->menuRoot);
153+
$manager->persist($menu);
154+
155+
$menuNode = new MenuNode;
156+
$menuNode->setParent($menu);
157+
$menuNode->setLabel('Default Behavior');
158+
$menuNode->setName('default');
159+
$menuNode->setRoute('current_menu_item_default');
160+
$manager->persist($menuNode);
161+
162+
$menuNode = new MenuNode;
163+
$menuNode->setParent($menu);
164+
$menuNode->setLabel('Request Content Identity Voter');
165+
$menuNode->setName('request-content-identity-voter');
166+
$menuNode->setContent($route);
167+
$manager->persist($menuNode);
168+
169+
$menuNode = new MenuNode;
170+
$menuNode->setParent($menu);
171+
$menuNode->setLabel('URI Prefix Voter');
172+
$menuNode->setName('uri-prefix-voter');
173+
$manager->persist($menuNode);
174+
175+
$menuNode = new MenuNode;
176+
$menuNode->setParent($menu);
177+
$menuNode->setLabel('Request Parent Content Identity Voter');
178+
$menuNode->setName('request-parent-content-identity-voter');
179+
$manager->persist($menuNode);
117180
}
118181
}

Tests/Resources/app/Resources/views/index.html.twig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<ul>
55
<li><a href="{{ path('render_test') }}">Render test</a></li>
66
<li>@todo: Publish Workflow</li>
7+
<li><a href="{{ path('current_menu_item_default') }}">Current Menu Item</a></li>
78
</ul>
89
<h2>About</h2>
910
<p>This test application is built into the MenuBundle. You can easily run

Tests/Resources/app/Resources/views/layout.html.twig

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,24 @@
11
<html>
22
<head>
33
<title>MenuBundle Test Application</title>
4+
<style>
5+
nav.side li {
6+
border: 1px black dashed;
7+
background-color: #eee;
8+
margin: 2px;
9+
width: 196px;
10+
list-style: none;
11+
}
12+
13+
nav.side li.current {
14+
background-color: green;
15+
}
16+
17+
nav.side li.current a {
18+
font-weight: bold;
19+
color: white;
20+
}
21+
</style>
422
</head>
523
<body>
624
<section id="header">
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<nav class="side">
2+
{{ knp_menu_render('side-menu') }}
3+
</nav>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{% extends "::layout.html.twig" %}
2+
{% block content %}
3+
{% include "::tests/cmi/_sideMenu.html.twig" %}
4+
<h1>Current Menu Item Test</h1>
5+
<p>The request URI of this page matches the URI for the route associated with the "default behavior" menu item on the left.</p>
6+
{% endblock %}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{% extends "::layout.html.twig" %}
2+
{% block content %}
3+
{% include "::tests/cmi/_sideMenu.html.twig" %}
4+
<h1>Request Content</h1>
5+
This is the content: {{ content.title }}
6+
<p>
7+
This page does NOT use the content identity voter because the URI of the request matches that of the content.
8+
</p>
9+
{% endblock %}
10+
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{% extends "::layout.html.twig" %}
2+
{% block content %}
3+
{% include "::tests/cmi/_sideMenu.html.twig" %}
4+
<h1>Request Content</h1>
5+
This is the content: {{ content.title }}
6+
<p>
7+
The content identity voter should now be in use and the "Request Content Identity" menu item should be hilighted.
8+
</p>
9+
{% endblock %}
10+

Tests/Resources/app/config/cmf_menu.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ cmf_routing:
1616
enabled: true
1717
persistence:
1818
phpcr:
19+
route_basepath: /test/routes
1920
enabled: true
2021
chain:
2122
routers_by_id:

Tests/Resources/app/config/routing/test.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,14 @@ link_test_route_with_params:
1717
pattern: /link_test_route/hello/{bar}/{foo}
1818
defaults:
1919
_controller: Symfony\Cmf\Bundle\MenuBundle\Tests\Resources\Controller\TestController::linkTestRouteAction
20+
21+
current_menu_item_default:
22+
pattern: /cmi/default
23+
defaults:
24+
_controller: Symfony\Cmf\Bundle\MenuBundle\Tests\Resources\Controller\CmiTestController::defaultAction
25+
26+
current_menu_item_request_content_identity:
27+
pattern: /cmi/request_content_identity
28+
defaults:
29+
_controller: Symfony\Cmf\Bundle\MenuBundle\Tests\Resources\Controller\CmiTestController::requestContentIdentityAction
30+

0 commit comments

Comments
 (0)