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

Commit

Permalink
Merge pull request #142 from symfony-cmf/voter_webtests
Browse files Browse the repository at this point in the history
[WIP]Voter webtests
  • Loading branch information
lsmith77 committed Oct 5, 2013
2 parents 4e73478 + c4b2d86 commit e594a79
Show file tree
Hide file tree
Showing 22 changed files with 472 additions and 15 deletions.
3 changes: 2 additions & 1 deletion DependencyInjection/CmfMenuExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public function load(array $configs, ContainerBuilder $container)
public function loadVoters($config, XmlFileLoader $loader, ContainerBuilder $container)
{
$loader->load('voters.xml');

if (isset($config['voters']['content_identity'])) {
if (empty($config['voters']['content_identity']['content_key'])) {
if (! class_exists('Symfony\\Cmf\\Bundle\\RoutingBundle\\Routing\\DynamicRouter')) {
Expand All @@ -59,7 +60,7 @@ public function loadVoters($config, XmlFileLoader $loader, ContainerBuilder $con
$container->removeDefinition('cmf_menu.current_item_voter.content_identity');
}

if (! isset($config['voters']['uri_prefix'])) {
if (!array_key_exists('uri_prefix', $config['voters'])) {
$container->removeDefinition('cmf_menu.current_item_voter.uri_prefix');
}
}
Expand Down
59 changes: 59 additions & 0 deletions Tests/Resources/Controller/VoterController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php

namespace Symfony\Cmf\Bundle\MenuBundle\Tests\Resources\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Cmf\Bundle\RoutingBundle\Routing\DynamicRouter;

/**
* Cmi Tests
*
* Tests actions for current menu item functionality.
*/
class VoterController extends Controller
{
protected function getDm()
{
return $this->container->get('doctrine_phpcr.odm.document_manager');
}

public function defaultAction(Request $request)
{
return $this->render('::tests/voter/default.html.twig');
}

public function requestContentIdentityAction(Request $request)
{
$content = $request->get(DynamicRouter::CONTENT_KEY);
if (!$content) {
$content = $this->getDm()->find(null, '/test/content-1');
$request->attributes->set(DynamicRouter::CONTENT_KEY, $content);

return $this->render('::tests/voter/requestContentVoterActive.html.twig', array('content' => $content));
}

return $this->render('::tests/voter/requestContent.html.twig', array('content' => $content));
}

public function blogAction(Request $request)
{
return $this->render('::tests/voter/blog.html.twig');
}

public function articlesAction(Request $request)
{
return $this->render('::tests/voter/articles.html.twig');
}

public function postAction(Request $request)
{
$content = $request->get(DynamicRouter::CONTENT_KEY);
return $this->render('::tests/voter/post.html.twig', array('content' => $content));
}

public function urlPrefixAction(Request $request)
{
return $this->render('::tests/voter/requestContent.html.twig', array('content' => $content));
}
}
140 changes: 129 additions & 11 deletions Tests/Resources/DataFixtures/PHPCR/LoadMenuData.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,21 @@
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Common\DataFixtures\DependentFixtureInterface;
use Doctrine\ODM\PHPCR\DocumentManager;
use Symfony\Cmf\Bundle\MenuBundle\Doctrine\Phpcr\MenuNode;
use Symfony\Cmf\Bundle\MenuBundle\Doctrine\Phpcr\Menu;
use Symfony\Cmf\Bundle\MenuBundle\Tests\Resources\Document\Content;
use Symfony\Cmf\Bundle\MenuBundle\Tests\Resources\Document\Post;
use Doctrine\ODM\PHPCR\Document\Generic;
use Symfony\Cmf\Bundle\RoutingBundle\Doctrine\Phpcr\Route;
use PHPCR\Util\NodeHelper;

class LoadMenuData implements FixtureInterface, DependentFixtureInterface
{
protected $root;
protected $menuRoot;
protected $routeRoot;

public function getDependencies()
{
return array(
Expand All @@ -31,20 +39,29 @@ public function getDependencies()

public function load(ObjectManager $manager)
{
$content = new Content;
$content->setTitle('Content 1');
$content->setId('/test/content-1');
$this->root = $manager->find(null, '/test');

NodeHelper::createPath($manager->getPhpcrSession(), '/test/menus');
NodeHelper::createPath($manager->getPhpcrSession(), '/test/routes/contents');
$this->menuRoot = $manager->find(null, '/test/menus');
$this->routeRoot = $manager->find(null, '/test/routes');

$root = $manager->find(null, '/test');
$menuRoot = new Generic;
$menuRoot->setNodename('menus');
$menuRoot->setParent($root);
$manager->persist($menuRoot);
$this->loadMainMenu($manager);
$this->loadVoterMenu($manager);

$manager->flush();
}

protected function loadMainMenu(DocumentManager $manager)
{
$content = new Content;
$content->setTitle('Menu Item Content 1');
$content->setId('/test/content-menu-item-1');

$menu = new Menu;
$menu->setName('test-menu');
$menu->setLabel('Test Menu');
$menu->setParent($menuRoot);
$menu->setParent($this->menuRoot);
$manager->persist($menu);

$menuNode = new MenuNode;
Expand Down Expand Up @@ -94,7 +111,7 @@ public function load(ObjectManager $manager)
$menu = new Menu;
$menu->setName('another-menu');
$menu->setLabel('Another Menu');
$menu->setParent($menuRoot);
$menu->setParent($this->menuRoot);
$manager->persist($menu);

$menuNode = new MenuNode;
Expand All @@ -113,6 +130,107 @@ public function load(ObjectManager $manager)
$manager->persist($menuNode);

$manager->persist($content);
$manager->flush();
}

protected function loadVoterMenu(DocumentManager $manager)
{
// test content
$content = new Content;
$content->setTitle('Content 1');
$content->setId('/test/content-1');
$manager->persist($content);

$route = new Route();
$route->setId('/test/routes/contents/content-1');
$route->setDefault('_controller', 'Symfony\Cmf\Bundle\MenuBundle\Tests\Resources\Controller\VoterController::requestContentIdentityAction');
$route->setContent($content);
$manager->persist($route);

// test blog
$blog = new Content;
$blog->setTitle('Blog');
$blog->setId('/test/blog-1');
$manager->persist($blog);

$route = new Route();
$route->setId('/test/routes/blog');
$route->setDefault('_controller', 'Symfony\Cmf\Bundle\MenuBundle\Tests\Resources\Controller\VoterController::blogAction');
$route->setContent($blog);
$manager->persist($route);

// test blog post
$post = new Post;
$post->setTitle('My Post');
$post->setId('/test/blog-1/my-post');
$manager->persist($post);

$route = new Route();
$route->setId('/test/routes/blog/my-post');
$route->setDefault('_controller', 'Symfony\Cmf\Bundle\MenuBundle\Tests\Resources\Controller\VoterController::postAction');
$route->setContent($post);
$manager->persist($route);

// test articles
$articles = new Content;
$articles->setTitle('Articles Index');
$articles->setId('/test/articles');
$manager->persist($articles);

$articlesRoute = new Route();
$articlesRoute->setId('/test/routes/articles');
$articlesRoute->setDefault('_controller', 'Symfony\Cmf\Bundle\MenuBundle\Tests\Resources\Controller\VoterController::articlesAction');
$articlesRoute->setContent($articles);
$articlesRoute->setOption('currentUriPrefix', '/articles');
$manager->persist($articlesRoute);

$article1 = new Content();
$article1->setTitle('Article 1');
$article1->setId('/test/article-1');
$manager->persist($article1);

$route = new Route();
$route->setId('/test/routes/articles/some-category');
$manager->persist($route);

$route = new Route();
$route->setId('/test/routes/articles/some-category/article-1');
$route->setDefault('_controller', 'Symfony\Cmf\Bundle\MenuBundle\Tests\Resources\Controller\VoterController::postAction');
$route->setContent($article1);
$manager->persist($route);

// menu items
$menu = new Menu;
$menu->setName('side-menu');
$menu->setLabel('Side Menu');
$menu->setParent($this->menuRoot);
$manager->persist($menu);

$menuNode = new MenuNode;
$menuNode->setParent($menu);
$menuNode->setLabel('Default Behavior');
$menuNode->setName('default');
$menuNode->setRoute('current_menu_item_default');
$manager->persist($menuNode);

$menuNode = new MenuNode;
$menuNode->setParent($menu);
$menuNode->setLabel('Request Content Identity Voter');
$menuNode->setName('request-content-identity-voter');
$menuNode->setContent($content);
$manager->persist($menuNode);

$menuNode = new MenuNode;
$menuNode->setParent($menu);
$menuNode->setLabel('URI Prefix Voter');
$menuNode->setName('uri-prefix-voter');
$menuNode->setContent($articlesRoute);
$manager->persist($menuNode);

$menuNode = new MenuNode;
$menuNode->setParent($menu);
$menuNode->setLabel('Request Parent Content Identity Voter');
$menuNode->setName('request-parent-content-identity-voter');
$menuNode->setContent($blog);
$manager->persist($menuNode);
}
}
31 changes: 29 additions & 2 deletions Tests/Resources/Document/Content.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
class Content implements MenuNodeReferrersInterface, RouteReferrersReadInterface
{
/**
* @PHPCRODM\Id()
* @PHPCRODM\Id(strategy="assigned")
*/
protected $id;

Expand All @@ -36,6 +36,11 @@ class Content implements MenuNodeReferrersInterface, RouteReferrersReadInterface
*/
protected $title;

/**
* @PHPCRODM\ParentDocument()
*/
protected $parent;

/**
* @PHPCRODM\Referrers(
* referringDocument="Symfony\Cmf\Bundle\MenuBundle\Doctrine\Phpcr\MenuNode",
Expand All @@ -45,9 +50,18 @@ class Content implements MenuNodeReferrersInterface, RouteReferrersReadInterface
*/
protected $menuNodes;

/**
* @PHPCRODM\Referrers(
* referringDocument="Symfony\Cmf\Bundle\RoutingBundle\Doctrine\Phpcr\Route",
* referencedBy="content"
* )
*/
protected $routes;

public function __construct()
{
$this->menuNodes = new ArrayCollection();
$this->routes = new ArrayCollection();
}

public function getId()
Expand Down Expand Up @@ -80,13 +94,26 @@ public function addMenuNode(NodeInterface $menuNode)
$this->menuNodes->add($menuNode);
}

public function addRoute($route)
{
$this->routes->add($route);
}


public function removeMenuNode(NodeInterface $menuNode)
{
$this->menuNodes->remove($menuNode);
}

public function getRoutes()
{
return array(new Route('http://www.example.com/content'));
foreach ($this->routes as $route) {
}
return $this->routes;
}

public function getParent()
{
return $this->parent;
}
}
19 changes: 19 additions & 0 deletions Tests/Resources/Document/Post.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?php

namespace Symfony\Cmf\Bundle\MenuBundle\Tests\Resources\Document;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ODM\PHPCR\Mapping\Annotations as PHPCRODM;

use Knp\Menu\NodeInterface;

use Symfony\Component\Routing\Route;
use Symfony\Cmf\Component\Routing\RouteReferrersReadInterface;
use Symfony\Cmf\Bundle\MenuBundle\Model\MenuNodeReferrersInterface;

/**
* @PHPCRODM\Document(referenceable=true)
*/
class Post extends Content
{
}
2 changes: 1 addition & 1 deletion Tests/Resources/app/AppKernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public function configure()
public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader->load(__DIR__.'/config/config.php');
$loader->load(__DIR__.'/config/admin-test.xml');
$loader->load(__DIR__.'/config/test-services.xml');
}

}
1 change: 1 addition & 0 deletions Tests/Resources/app/Resources/views/index.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
<ul>
<li><a href="{{ path('render_test') }}">Render test</a></li>
<li>@todo: Publish Workflow</li>
<li><a href="{{ path('current_menu_item_default') }}">Current Menu Item</a></li>
</ul>
<h2>About</h2>
<p>This test application is built into the MenuBundle. You can easily run
Expand Down
18 changes: 18 additions & 0 deletions Tests/Resources/app/Resources/views/layout.html.twig
Original file line number Diff line number Diff line change
@@ -1,6 +1,24 @@
<html>
<head>
<title>MenuBundle Test Application</title>
<style>
nav.side li {
border: 1px black dashed;
background-color: #eee;
margin: 2px;
width: 196px;
list-style: none;
}
nav.side li.current {
background-color: green;
}
nav.side li.current a {
font-weight: bold;
color: white;
}
</style>
</head>
<body>
<section id="header">
Expand Down
Loading

0 comments on commit e594a79

Please sign in to comment.