12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517 |
- <?php
- /*
- * This file is part of the Sonata package.
- *
- * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Sonata\AdminBundle\Tests\Admin;
- use Sonata\AdminBundle\Admin\Admin;
- use Sonata\AdminBundle\Route\DefaultRouteGenerator;
- use Sonata\AdminBundle\Route\RoutesCache;
- use Sonata\AdminBundle\Tests\Fixtures\Bundle\Entity\Post;
- use Sonata\AdminBundle\Tests\Fixtures\Bundle\Entity\Tag;
- use Sonata\AdminBundle\Tests\Fixtures\Entity\FooToString;
- use Sonata\AdminBundle\Tests\Fixtures\Entity\FooToStringNull;
- use Sonata\AdminBundle\Tests\Fixtures\Admin\PostAdmin;
- use Sonata\AdminBundle\Tests\Fixtures\Admin\CommentAdmin;
- use Symfony\Component\HttpFoundation\Request;
- use Sonata\AdminBundle\Admin\AdminInterface;
- class AdminTest extends \PHPUnit_Framework_TestCase
- {
- protected $cacheTempFolder;
- public function setUp()
- {
- $this->cacheTempFolder = sys_get_temp_dir().'/sonata_test_route';
- exec('rm -rf '.$this->cacheTempFolder);
- }
- /**
- * @covers Sonata\AdminBundle\Admin\Admin::__construct
- */
- public function testConstructor()
- {
- $class = 'Application\Sonata\NewsBundle\Entity\Post';
- $baseControllerName = 'SonataNewsBundle:PostAdmin';
- $admin = new PostAdmin('sonata.post.admin.post', $class, $baseControllerName);
- $this->assertInstanceOf('Sonata\AdminBundle\Admin\Admin', $admin);
- $this->assertEquals($class, $admin->getClass());
- $this->assertEquals($baseControllerName, $admin->getBaseControllerName());
- }
- public function testGetClass()
- {
- $class = 'Application\Sonata\NewsBundle\Entity\Post';
- $baseControllerName = 'SonataNewsBundle:PostAdmin';
- $admin = new PostAdmin('sonata.post.admin.post', $class, $baseControllerName);
- $testObject = new \stdClass();
- $admin->setSubject($testObject);
- $this->assertEquals('stdClass', $admin->getClass());
- $admin->setSubClasses(array('foo'));
- $this->assertEquals('stdClass', $admin->getClass());
- $admin->setSubject(null);
- $admin->setSubClasses(array());
- $this->assertEquals($class, $admin->getClass());
- $admin->setSubClasses(array('foo' => 'bar'));
- $admin->setRequest(new Request(array('subclass' => 'foo')));
- $this->assertEquals('bar', $admin->getClass());
- }
- /**
- * @expectedException \RuntimeException
- * @expectedExceptionMessage Feature not implemented: an embedded admin cannot have subclass
- */
- public function testGetClassException()
- {
- $class = 'Application\Sonata\NewsBundle\Entity\Post';
- $baseControllerName = 'SonataNewsBundle:PostAdmin';
- $admin = new PostAdmin('sonata.post.admin.post', $class, $baseControllerName);
- $admin->setParentFieldDescription(new FieldDescription());
- $admin->setSubClasses(array('foo' => 'bar'));
- $admin->setRequest(new Request(array('subclass' => 'foo')));
- $admin->getClass();
- }
- public function testGetBreadCrumbs()
- {
- $class = 'Application\Sonata\NewsBundle\Entity\Post';
- $baseControllerName = 'SonataNewsBundle:PostAdmin';
- $admin = new PostAdmin('sonata.post.admin.post', $class, $baseControllerName);
- $commentAdmin = new CommentAdmin(
- 'sonata.post.admin.comment',
- 'Application\Sonata\NewsBundle\Entity\Comment',
- 'SonataNewsBundle:CommentAdmin'
- );
- $subCommentAdmin = new CommentAdmin(
- 'sonata.post.admin.comment',
- 'Application\Sonata\NewsBundle\Entity\Comment',
- 'SonataNewsBundle:CommentAdmin'
- );
- $admin->addChild($commentAdmin);
- $admin->setRequest(new Request(array('id' => 42)));
- $commentAdmin->setRequest(new Request());
- $commentAdmin->initialize();
- $admin->initialize();
- $commentAdmin->setCurrentChild($subCommentAdmin);
- $menuFactory = $this->getMock('Knp\Menu\FactoryInterface');
- $menu = $this->getMock('Knp\Menu\ItemInterface');
- $translatorStrategy = $this->getMock(
- 'Sonata\AdminBundle\Translator\LabelTranslatorStrategyInterface'
- );
- $routeGenerator = $this->getMock(
- 'Sonata\AdminBundle\Route\RouteGeneratorInterface'
- );
- $modelManager = $this->getMock(
- 'Sonata\AdminBundle\Model\ModelManagerInterface'
- );
- $admin->setMenuFactory($menuFactory);
- $admin->setLabelTranslatorStrategy($translatorStrategy);
- $admin->setRouteGenerator($routeGenerator);
- $admin->setModelManager($modelManager);
- $commentAdmin->setLabelTranslatorStrategy($translatorStrategy);
- $commentAdmin->setRouteGenerator($routeGenerator);
- $modelManager->expects($this->exactly(1))
- ->method('find')
- ->with('Application\Sonata\NewsBundle\Entity\Post', 42)
- ->will($this->returnValue(new DummySubject()));
- $menuFactory->expects($this->exactly(5))
- ->method('createItem')
- ->with('root')
- ->will($this->returnValue($menu));
- $menu->expects($this->once())
- ->method('setUri')
- ->with($this->identicalTo(false));
- $menu->expects($this->exactly(5))
- ->method('getParent')
- ->will($this->returnValue(false));
- $routeGenerator->expects($this->exactly(5))
- ->method('generate')
- ->with('sonata_admin_dashboard')
- ->will($this->returnValue('http://somehost.com'));
- $translatorStrategy->expects($this->exactly(18))
- ->method('getLabel')
- ->withConsecutive(
- array('dashboard'),
- array('Post_list'),
- array('Comment_list'),
- array('Comment_repost'),
- array('dashboard'),
- array('Post_list'),
- array('Comment_list'),
- array('Comment_flag'),
- array('dashboard'),
- array('Post_list'),
- array('Comment_list'),
- array('Comment_edit'),
- array('dashboard'),
- array('Post_list'),
- array('Comment_list'),
- array('dashboard'),
- array('Post_list'),
- array('Comment_list')
- )
- ->will($this->onConsecutiveCalls(
- 'someLabel',
- 'someOtherLabel',
- 'someInterestingLabel',
- 'someFancyLabel',
- 'someCoolLabel',
- 'someTipTopLabel',
- 'someFunkyLabel',
- 'someAwesomeLabel',
- 'someLikeableLabel',
- 'someMildlyInterestingLabel',
- 'someWTFLabel',
- 'someBadLabel',
- 'someBoringLabel',
- 'someLongLabel',
- 'someEndlessLabel',
- 'someAlmostThereLabel',
- 'someOriginalLabel',
- 'someOkayishLabel'
- ));
- $menu->expects($this->exactly(24))
- ->method('addChild')
- ->withConsecutive(
- array('someLabel'),
- array('someOtherLabel'),
- array('dummy subject representation'),
- array('someInterestingLabel'),
- array('someFancyLabel'),
- array('someCoolLabel'),
- array('someTipTopLabel'),
- array('dummy subject representation'),
- array('someFunkyLabel'),
- array('someAwesomeLabel'),
- array('someLikeableLabel'),
- array('someMildlyInterestingLabel'),
- array('dummy subject representation'),
- array('someWTFLabel'),
- array('someBadLabel'),
- array('someBoringLabel'),
- array('someLongLabel'),
- array('dummy subject representation'),
- array('someEndlessLabel'),
- array('someAlmostThereLabel'),
- array('someOriginalLabel'),
- array('dummy subject representation'),
- array('someOkayishLabel'),
- array('dummy subject representation')
- )
- ->will($this->returnValue($menu));
- $admin->getBreadcrumbs('repost');
- $admin->setSubject(new DummySubject());
- $admin->getBreadcrumbs('flag');
- $commentAdmin->getBreadcrumbs('edit');
- $commentAdmin->getBreadcrumbs('list');
- $commentAdmin->setSubject(new DummySubject());
- $commentAdmin->getBreadcrumbs('reply');
- }
- public function testGetBreadCrumbsWithNoCurrentAdmin()
- {
- $class = 'Application\Sonata\NewsBundle\Entity\Post';
- $baseControllerName = 'SonataNewsBundle:PostAdmin';
- $admin = new PostAdmin('sonata.post.admin.post', $class, $baseControllerName);
- $commentAdmin = new CommentAdmin(
- 'sonata.post.admin.comment',
- 'Application\Sonata\NewsBundle\Entity\Comment',
- 'SonataNewsBundle:CommentAdmin'
- );
- $admin->addChild($commentAdmin);
- $admin->setRequest(new Request(array('id' => 42)));
- $commentAdmin->setRequest(new Request());
- $commentAdmin->initialize();
- $admin->initialize();
- $menuFactory = $this->getMock('Knp\Menu\FactoryInterface');
- $menu = $this->getMock('Knp\Menu\ItemInterface');
- $translatorStrategy = $this->getMock(
- 'Sonata\AdminBundle\Translator\LabelTranslatorStrategyInterface'
- );
- $routeGenerator = $this->getMock(
- 'Sonata\AdminBundle\Route\RouteGeneratorInterface'
- );
- $admin->setMenuFactory($menuFactory);
- $admin->setLabelTranslatorStrategy($translatorStrategy);
- $admin->setRouteGenerator($routeGenerator);
- $menuFactory->expects($this->exactly(2))
- ->method('createItem')
- ->with('root')
- ->will($this->returnValue($menu));
- $translatorStrategy->expects($this->exactly(5))
- ->method('getLabel')
- ->withConsecutive(
- array('dashboard'),
- array('Post_list'),
- array('Post_repost'),
- array('dashboard'),
- array('Post_list')
- )
- ->will($this->onConsecutiveCalls(
- 'someLabel',
- 'someOtherLabel',
- 'someInterestingLabel',
- 'someFancyLabel',
- 'someCoolLabel'
- ));
- $menu->expects($this->exactly(6))
- ->method('addChild')
- ->withConsecutive(
- array('someLabel'),
- array('someOtherLabel'),
- array('someInterestingLabel'),
- array('someFancyLabel'),
- array('someCoolLabel'),
- array('dummy subject representation')
- )
- ->will($this->returnValue($menu));
- $admin->getBreadcrumbs('repost');
- $admin->setSubject(new DummySubject());
- $flagBreadcrumb = $admin->getBreadcrumbs('flag');
- $this->assertSame($flagBreadcrumb, $admin->getBreadcrumbs('flag'));
- }
- /**
- * @covers Sonata\AdminBundle\Admin\Admin::hasChild
- * @covers Sonata\AdminBundle\Admin\Admin::addChild
- * @covers Sonata\AdminBundle\Admin\Admin::getChild
- * @covers Sonata\AdminBundle\Admin\Admin::isChild
- * @covers Sonata\AdminBundle\Admin\Admin::hasChildren
- * @covers Sonata\AdminBundle\Admin\Admin::getChildren
- */
- public function testChildren()
- {
- $postAdmin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertFalse($postAdmin->hasChildren());
- $this->assertFalse($postAdmin->hasChild('comment'));
- $commentAdmin = new CommentAdmin('sonata.post.admin.comment', 'Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
- $postAdmin->addChild($commentAdmin);
- $this->assertTrue($postAdmin->hasChildren());
- $this->assertTrue($postAdmin->hasChild('sonata.post.admin.comment'));
- $this->assertEquals('sonata.post.admin.comment', $postAdmin->getChild('sonata.post.admin.comment')->getCode());
- $this->assertEquals('sonata.post.admin.post|sonata.post.admin.comment', $postAdmin->getChild('sonata.post.admin.comment')->getBaseCodeRoute());
- $this->assertEquals($postAdmin, $postAdmin->getChild('sonata.post.admin.comment')->getParent());
- $this->assertFalse($postAdmin->isChild());
- $this->assertTrue($commentAdmin->isChild());
- $this->assertEquals(array('sonata.post.admin.comment' => $commentAdmin), $postAdmin->getChildren());
- }
- /**
- * @covers Sonata\AdminBundle\Admin\Admin::configure
- */
- public function testConfigure()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNotNull($admin->getUniqid());
- $admin->initialize();
- $this->assertNotNull($admin->getUniqid());
- $this->assertEquals('Post', $admin->getClassnameLabel());
- $admin = new CommentAdmin('sonata.post.admin.comment', 'Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
- $admin->setClassnameLabel('postcomment');
- $admin->initialize();
- $this->assertEquals('postcomment', $admin->getClassnameLabel());
- }
- public function testConfigureWithValidParentAssociationMapping()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $admin->setParentAssociationMapping('Category');
- $admin->initialize();
- $this->assertEquals('Category', $admin->getParentAssociationMapping());
- }
- public function provideGetBaseRoutePattern()
- {
- return array(
- array(
- 'Application\Sonata\NewsBundle\Entity\Post',
- '/sonata/news/post'
- ),
- array(
- 'Application\Sonata\NewsBundle\Document\Post',
- '/sonata/news/post'
- ),
- array(
- 'MyApplication\MyBundle\Entity\Post',
- '/myapplication/my/post'
- ),
- array(
- 'MyApplication\MyBundle\Entity\Post\Category',
- '/myapplication/my/post-category'
- ),
- array(
- 'MyApplication\MyBundle\Entity\Product\Category',
- '/myapplication/my/product-category'
- ),
- array(
- 'MyApplication\MyBundle\Entity\Other\Product\Category',
- '/myapplication/my/other-product-category'
- ),
- array(
- 'Symfony\Cmf\Bundle\FooBundle\Document\Menu',
- '/cmf/foo/menu'
- ),
- array(
- 'Symfony\Cmf\Bundle\FooBundle\Doctrine\Phpcr\Menu',
- '/cmf/foo/menu'
- ),
- array(
- 'Symfony\Bundle\BarBarBundle\Doctrine\Phpcr\Menu',
- '/symfony/barbar/menu'
- ),
- array(
- 'Symfony\Bundle\BarBarBundle\Doctrine\Phpcr\Menu\Item',
- '/symfony/barbar/menu-item'
- ),
- array(
- 'Symfony\Cmf\Bundle\FooBundle\Doctrine\Orm\Menu',
- '/cmf/foo/menu'
- ),
- array(
- 'Symfony\Cmf\Bundle\FooBundle\Doctrine\MongoDB\Menu',
- '/cmf/foo/menu'
- ),
- array(
- 'Symfony\Cmf\Bundle\FooBundle\Doctrine\CouchDB\Menu',
- '/cmf/foo/menu'
- ),
- array(
- 'AppBundle\Entity\User',
- '/app/user'
- ),
- );
- }
- /**
- * @dataProvider provideGetBaseRoutePattern
- */
- public function testGetBaseRoutePattern($objFqn, $expected)
- {
- $admin = new PostAdmin('sonata.post.admin.post', $objFqn, 'SonataNewsBundle:PostAdmin');
- $this->assertEquals($expected, $admin->getBaseRoutePattern());
- }
- public function testGetBaseRoutePatternWithChildAdmin()
- {
- $postAdmin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $commentAdmin = new CommentAdmin('sonata.post.admin.comment', 'Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
- $commentAdmin->setParent($postAdmin);
- $this->assertEquals('/sonata/news/post/{id}/comment', $commentAdmin->getBaseRoutePattern());
- }
- /**
- * @expectedException RuntimeException
- */
- public function testGetBaseRoutePatternWithUnreconizedClassname()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'News\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $admin->getBaseRoutePattern();
- }
- public function provideGetBaseRouteName()
- {
- return array(
- array(
- 'Application\Sonata\NewsBundle\Entity\Post',
- 'admin_sonata_news_post'
- ),
- array(
- 'Application\Sonata\NewsBundle\Document\Post',
- 'admin_sonata_news_post'
- ),
- array(
- 'MyApplication\MyBundle\Entity\Post',
- 'admin_myapplication_my_post'
- ),
- array(
- 'MyApplication\MyBundle\Entity\Post\Category',
- 'admin_myapplication_my_post_category'
- ),
- array(
- 'MyApplication\MyBundle\Entity\Product\Category',
- 'admin_myapplication_my_product_category'
- ),
- array(
- 'MyApplication\MyBundle\Entity\Other\Product\Category',
- 'admin_myapplication_my_other_product_category'
- ),
- array(
- 'Symfony\Cmf\Bundle\FooBundle\Document\Menu',
- 'admin_cmf_foo_menu'
- ),
- array(
- 'Symfony\Cmf\Bundle\FooBundle\Doctrine\Phpcr\Menu',
- 'admin_cmf_foo_menu'
- ),
- array(
- 'Symfony\Bundle\BarBarBundle\Doctrine\Phpcr\Menu',
- 'admin_symfony_barbar_menu'
- ),
- array(
- 'Symfony\Bundle\BarBarBundle\Doctrine\Phpcr\Menu\Item',
- 'admin_symfony_barbar_menu_item'
- ),
- array(
- 'Symfony\Cmf\Bundle\FooBundle\Doctrine\Orm\Menu',
- 'admin_cmf_foo_menu'
- ),
- array(
- 'Symfony\Cmf\Bundle\FooBundle\Doctrine\MongoDB\Menu',
- 'admin_cmf_foo_menu'
- ),
- array(
- 'Symfony\Cmf\Bundle\FooBundle\Doctrine\CouchDB\Menu',
- 'admin_cmf_foo_menu'
- ),
- array(
- 'AppBundle\Entity\User',
- 'admin_app_user'
- ),
- );
- }
- /**
- * @dataProvider provideGetBaseRouteName
- */
- public function testGetBaseRouteName($objFqn, $expected)
- {
- $admin = new PostAdmin('sonata.post.admin.post', $objFqn, 'SonataNewsBundle:PostAdmin');
- $this->assertEquals($expected, $admin->getBaseRouteName());
- }
- public function testGetBaseRouteNameWithChildAdmin()
- {
- $routeGenerator = new DefaultRouteGenerator(
- $this->getMock('Symfony\Component\Routing\RouterInterface'),
- new RoutesCache($this->cacheTempFolder, true)
- );
- $pathInfo = new \Sonata\AdminBundle\Route\PathInfoBuilder($this->getMock('Sonata\AdminBundle\Model\AuditManagerInterface'));
- $postAdmin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $postAdmin->setRouteBuilder($pathInfo);
- $postAdmin->setRouteGenerator($routeGenerator);
- $postAdmin->initialize();
- $commentAdmin = new CommentAdmin('sonata.post.admin.comment', 'Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
- $commentAdmin->setRouteBuilder($pathInfo);
- $commentAdmin->setRouteGenerator($routeGenerator);
- $commentAdmin->initialize();
- $postAdmin->addChild($commentAdmin);
- $this->assertEquals('admin_sonata_news_post_comment', $commentAdmin->getBaseRouteName());
- $this->assertTrue($postAdmin->hasRoute('show'));
- $this->assertTrue($postAdmin->hasRoute('sonata.post.admin.post.show'));
- $this->assertTrue($postAdmin->hasRoute('sonata.post.admin.post|sonata.post.admin.comment.show'));
- $this->assertTrue($postAdmin->hasRoute('sonata.post.admin.comment.list'));
- $this->assertFalse($postAdmin->hasRoute('sonata.post.admin.post|sonata.post.admin.comment.edit'));
- $this->assertFalse($commentAdmin->hasRoute('edit'));
- }
- /**
- * @expectedException RuntimeException
- */
- public function testGetBaseRouteNameWithUnreconizedClassname()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'News\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $admin->getBaseRouteName();
- }
- /**
- * @covers Sonata\AdminBundle\Admin\Admin::setUniqid
- * @covers Sonata\AdminBundle\Admin\Admin::getUniqid
- */
- public function testUniqid()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $uniqid = uniqid();
- $admin->setUniqid($uniqid);
- $this->assertEquals($uniqid, $admin->getUniqid());
- }
- public function testToString()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $s = new \stdClass();
- $this->assertNotEmpty($admin->toString($s));
- $s = new FooToString();
- $this->assertEquals('salut', $admin->toString($s));
- // To string method is implemented, but returns null
- $s = new FooToStringNull();
- $this->assertNotEmpty($admin->toString($s));
- $this->assertEquals("", $admin->toString(false));
- }
- public function testIsAclEnabled()
- {
- $postAdmin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertFalse($postAdmin->isAclEnabled());
- $commentAdmin = new CommentAdmin('sonata.post.admin.comment', 'Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
- $commentAdmin->setSecurityHandler($this->getMock('Sonata\AdminBundle\Security\Handler\AclSecurityHandlerInterface'));
- $this->assertTrue($commentAdmin->isAclEnabled());
- }
- /**
- * @covers Sonata\AdminBundle\Admin\Admin::getSubClasses
- * @covers Sonata\AdminBundle\Admin\Admin::getSubClass
- * @covers Sonata\AdminBundle\Admin\Admin::setSubClasses
- * @covers Sonata\AdminBundle\Admin\Admin::hasSubClass
- * @covers Sonata\AdminBundle\Admin\Admin::hasActiveSubClass
- * @covers Sonata\AdminBundle\Admin\Admin::getActiveSubClass
- * @covers Sonata\AdminBundle\Admin\Admin::getActiveSubclassCode
- * @covers Sonata\AdminBundle\Admin\Admin::getClass
- */
- public function testSubClass()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertFalse($admin->hasSubClass('test'));
- $this->assertFalse($admin->hasActiveSubClass());
- $this->assertCount(0, $admin->getSubClasses());
- $this->assertNull($admin->getActiveSubClass());
- $this->assertNull($admin->getActiveSubclassCode());
- $this->assertEquals('NewsBundle\Entity\Post', $admin->getClass());
- // Just for the record, if there is no inheritance set, the getSubject is not used
- // the getSubject can also lead to some issue
- $admin->setSubject(new \stdClass());
- $this->assertEquals('stdClass', $admin->getClass());
- $admin->setSubClasses(array('extended1' => 'NewsBundle\Entity\PostExtended1', 'extended2' => 'NewsBundle\Entity\PostExtended2'));
- $this->assertFalse($admin->hasSubClass('test'));
- $this->assertTrue($admin->hasSubClass('extended1'));
- $this->assertFalse($admin->hasActiveSubClass());
- $this->assertCount(2, $admin->getSubClasses());
- $this->assertNull($admin->getActiveSubClass());
- $this->assertNull($admin->getActiveSubclassCode());
- $this->assertEquals('stdClass', $admin->getClass());
- $request = new \Symfony\Component\HttpFoundation\Request(array('subclass' => 'extended1'));
- $admin->setRequest($request);
- $this->assertFalse($admin->hasSubClass('test'));
- $this->assertTrue($admin->hasSubClass('extended1'));
- $this->assertTrue($admin->hasActiveSubClass());
- $this->assertCount(2, $admin->getSubClasses());
- $this->assertEquals('stdClass', $admin->getActiveSubClass());
- $this->assertEquals('extended1', $admin->getActiveSubclassCode());
- $this->assertEquals('stdClass', $admin->getClass());
- $request->query->set('subclass', 'inject');
- $this->assertNull($admin->getActiveSubclassCode());
- }
- /**
- * @expectedException RuntimeException
- */
- public function testNonExistantSubclass()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $admin->setRequest(new \Symfony\Component\HttpFoundation\Request(array('subclass' => 'inject')));
- $admin->setSubClasses(array('extended1' => 'NewsBundle\Entity\PostExtended1', 'extended2' => 'NewsBundle\Entity\PostExtended2'));
- $this->assertTrue($admin->hasActiveSubClass());
- $admin->getActiveSubClass();
- }
- /**
- * @covers Sonata\AdminBundle\Admin\Admin::hasActiveSubClass
- */
- public function testOnlyOneSubclassNeededToBeActive()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $admin->setSubClasses(array('extended1' => 'NewsBundle\Entity\PostExtended1'));
- $request = new \Symfony\Component\HttpFoundation\Request(array('subclass' => 'extended1'));
- $admin->setRequest($request);
- $this->assertTrue($admin->hasActiveSubClass());
- }
- public function testGetPerPageOptions()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals(array(16, 32, 64, 128, 192), $admin->getPerPageOptions());
- $admin->setPerPageOptions(array(500, 1000));
- $this->assertEquals(array(500, 1000), $admin->getPerPageOptions());
- }
- public function testGetLabelTranslatorStrategy()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getLabelTranslatorStrategy());
- $labelTranslatorStrategy = $this->getMock('Sonata\AdminBundle\Translator\LabelTranslatorStrategyInterface');
- $admin->setLabelTranslatorStrategy($labelTranslatorStrategy);
- $this->assertEquals($labelTranslatorStrategy, $admin->getLabelTranslatorStrategy());
- }
- public function testGetRouteBuilder()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getRouteBuilder());
- $routeBuilder = $this->getMock('Sonata\AdminBundle\Builder\RouteBuilderInterface');
- $admin->setRouteBuilder($routeBuilder);
- $this->assertEquals($routeBuilder, $admin->getRouteBuilder());
- }
- public function testGetMenuFactory()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getMenuFactory());
- $menuFactory = $this->getMock('Knp\Menu\FactoryInterface');
- $admin->setMenuFactory($menuFactory);
- $this->assertEquals($menuFactory, $admin->getMenuFactory());
- }
- public function testGetExtensions()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals(array(), $admin->getExtensions());
- $adminExtension1 = $this->getMock('Sonata\AdminBundle\Admin\AdminExtensionInterface');
- $adminExtension2 = $this->getMock('Sonata\AdminBundle\Admin\AdminExtensionInterface');
- $admin->addExtension($adminExtension1);
- $admin->addExtension($adminExtension2);
- $this->assertEquals(array($adminExtension1, $adminExtension2), $admin->getExtensions());
- }
- public function testGetFilterTheme()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals(array(), $admin->getFilterTheme());
- $admin->setFilterTheme(array('FooTheme'));
- $this->assertEquals(array('FooTheme'), $admin->getFilterTheme());
- }
- public function testGetFormTheme()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals(array(), $admin->getFormTheme());
- $admin->setFormTheme(array('FooTheme'));
- $this->assertEquals(array('FooTheme'), $admin->getFormTheme());
- }
- public function testGetValidator()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getValidator());
- $validator = $this->getMock('Symfony\Component\Validator\ValidatorInterface');
- $admin->setValidator($validator);
- $this->assertEquals($validator, $admin->getValidator());
- }
- public function testGetSecurityHandler()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getSecurityHandler());
- $securityHandler = $this->getMock('Sonata\AdminBundle\Security\Handler\SecurityHandlerInterface');
- $admin->setSecurityHandler($securityHandler);
- $this->assertEquals($securityHandler, $admin->getSecurityHandler());
- }
- public function testGetSecurityInformation()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals(array(), $admin->getSecurityInformation());
- $securityInformation = array('ROLE_FOO', 'ROLE_BAR');
- $admin->setSecurityInformation($securityInformation);
- $this->assertEquals($securityInformation, $admin->getSecurityInformation());
- }
- public function testGetManagerType()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getManagerType());
- $admin->setManagerType('foo_orm');
- $this->assertEquals('foo_orm', $admin->getManagerType());
- }
- public function testGetModelManager()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getModelManager());
- $modelManager = $this->getMock('Sonata\AdminBundle\Model\ModelManagerInterface');
- $admin->setModelManager($modelManager);
- $this->assertEquals($modelManager, $admin->getModelManager());
- }
- public function testGetBaseCodeRoute()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertSame('', $admin->getBaseCodeRoute());
- $admin->setBaseCodeRoute('foo');
- $this->assertEquals('foo', $admin->getBaseCodeRoute());
- }
- public function testGetRouteGenerator()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getRouteGenerator());
- $routeGenerator = $this->getMock('Sonata\AdminBundle\Route\RouteGeneratorInterface');
- $admin->setRouteGenerator($routeGenerator);
- $this->assertEquals($routeGenerator, $admin->getRouteGenerator());
- }
- public function testGetConfigurationPool()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getConfigurationPool());
- $pool = $this->getMockBuilder('Sonata\AdminBundle\Admin\Pool')
- ->disableOriginalConstructor()
- ->getMock();
- $admin->setConfigurationPool($pool);
- $this->assertEquals($pool, $admin->getConfigurationPool());
- }
- public function testGetShowBuilder()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getShowBuilder());
- $showBuilder = $this->getMock('Sonata\AdminBundle\Builder\ShowBuilderInterface');
- $admin->setShowBuilder($showBuilder);
- $this->assertEquals($showBuilder, $admin->getShowBuilder());
- }
- public function testGetListBuilder()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getListBuilder());
- $listBuilder = $this->getMock('Sonata\AdminBundle\Builder\ListBuilderInterface');
- $admin->setListBuilder($listBuilder);
- $this->assertEquals($listBuilder, $admin->getListBuilder());
- }
- public function testGetDatagridBuilder()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getDatagridBuilder());
- $datagridBuilder = $this->getMock('Sonata\AdminBundle\Builder\DatagridBuilderInterface');
- $admin->setDatagridBuilder($datagridBuilder);
- $this->assertEquals($datagridBuilder, $admin->getDatagridBuilder());
- }
- public function testGetFormContractor()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getFormContractor());
- $formContractor = $this->getMock('Sonata\AdminBundle\Builder\FormContractorInterface');
- $admin->setFormContractor($formContractor);
- $this->assertEquals($formContractor, $admin->getFormContractor());
- }
- public function testGetRequest()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertFalse($admin->hasRequest());
- $request = new Request();
- $admin->setRequest($request);
- $this->assertEquals($request, $admin->getRequest());
- $this->assertTrue($admin->hasRequest());
- }
- public function testGetRequestWithException()
- {
- $this->setExpectedException('RuntimeException', 'The Request object has not been set');
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $admin->getRequest();
- }
- public function testGetTranslationDomain()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals('messages', $admin->getTranslationDomain());
- $admin->setTranslationDomain('foo');
- $this->assertEquals('foo', $admin->getTranslationDomain());
- }
- public function testGetTranslator()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getTranslator());
- $translator = $this->getMock('Symfony\Component\Translation\TranslatorInterface');
- $admin->setTranslator($translator);
- $this->assertEquals($translator, $admin->getTranslator());
- }
- public function testGetShowGroups()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals(false, $admin->getShowGroups());
- $groups = array('foo', 'bar', 'baz');
- $admin->setShowGroups($groups);
- $this->assertSame($groups, $admin->getShowGroups());
- }
- public function testGetFormGroups()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals(false, $admin->getFormGroups());
- $groups = array('foo', 'bar', 'baz');
- $admin->setFormGroups($groups);
- $this->assertSame($groups, $admin->getFormGroups());
- }
- public function testGetMaxPageLinks()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals(25, $admin->getMaxPageLinks());
- $admin->setMaxPageLinks(14);
- $this->assertSame(14, $admin->getMaxPageLinks());
- }
- public function testGetMaxPerPage()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals(32, $admin->getMaxPerPage());
- $admin->setMaxPerPage(94);
- $this->assertSame(94, $admin->getMaxPerPage());
- }
- public function testGetLabel()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getLabel());
- $admin->setLabel('FooLabel');
- $this->assertSame('FooLabel', $admin->getLabel());
- }
- public function testGetBaseController()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals('SonataNewsBundle:PostAdmin', $admin->getBaseControllerName());
- $admin->setBaseControllerName('SonataNewsBundle:FooAdmin');
- $this->assertSame('SonataNewsBundle:FooAdmin', $admin->getBaseControllerName());
- }
- public function testGetTemplates()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals(array(), $admin->getTemplates());
- $templates = array(
- 'list' => 'FooAdminBundle:CRUD:list.html.twig',
- 'show' => 'FooAdminBundle:CRUD:show.html.twig',
- 'edit' => 'FooAdminBundle:CRUD:edit.html.twig'
- );
- $admin->setTemplates($templates);
- $this->assertSame($templates, $admin->getTemplates());
- }
- public function testGetTemplate1()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getTemplate('edit'));
- $templates = array(
- 'list' => 'FooAdminBundle:CRUD:list.html.twig',
- 'show' => 'FooAdminBundle:CRUD:show.html.twig',
- 'edit' => 'FooAdminBundle:CRUD:edit.html.twig'
- );
- $admin->setTemplate('edit', 'FooAdminBundle:CRUD:edit.html.twig');
- $admin->setTemplate('show', 'FooAdminBundle:CRUD:show.html.twig');
- $this->assertEquals('FooAdminBundle:CRUD:edit.html.twig', $admin->getTemplate('edit'));
- $this->assertEquals('FooAdminBundle:CRUD:show.html.twig', $admin->getTemplate('show'));
- }
- public function testGetTemplate2()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertNull($admin->getTemplate('edit'));
- $templates = array(
- 'list' => 'FooAdminBundle:CRUD:list.html.twig',
- 'show' => 'FooAdminBundle:CRUD:show.html.twig',
- 'edit' => 'FooAdminBundle:CRUD:edit.html.twig'
- );
- $admin->setTemplates($templates);
- $this->assertEquals('FooAdminBundle:CRUD:edit.html.twig', $admin->getTemplate('edit'));
- $this->assertEquals('FooAdminBundle:CRUD:show.html.twig', $admin->getTemplate('show'));
- }
- public function testGetIdParameter()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals('id', $admin->getIdParameter());
- $this->assertFalse($admin->isChild());
- $parentAdmin = new PostAdmin('sonata.post.admin.post_parent', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostParentAdmin');
- $admin->setParent($parentAdmin);
- $this->assertTrue($admin->isChild());
- $this->assertEquals('childId', $admin->getIdParameter());
- }
- public function testGetExportFormats()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals(array('json', 'xml', 'csv', 'xls'), $admin->getExportFormats());
- }
- public function testGetUrlsafeIdentifier()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'Acme\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $entity = new \stdClass();
- $modelManager = $this->getMock('Sonata\AdminBundle\Model\ModelManagerInterface');
- $modelManager->expects($this->once())
- ->method('getUrlsafeIdentifier')
- ->with($this->equalTo($entity))
- ->will($this->returnValue('foo'));
- $admin->setModelManager($modelManager);
- $this->assertEquals('foo', $admin->getUrlsafeIdentifier($entity));
- }
- public function testDeterminedPerPageValue()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'Acme\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertFalse($admin->determinedPerPageValue('foo'));
- $this->assertFalse($admin->determinedPerPageValue(123));
- $this->assertTrue($admin->determinedPerPageValue(16));
- $this->assertTrue($admin->determinedPerPageValue(32));
- $this->assertTrue($admin->determinedPerPageValue(64));
- $this->assertTrue($admin->determinedPerPageValue(128));
- $this->assertTrue($admin->determinedPerPageValue(192));
- $admin->setPerPageOptions(array(101, 102, 103));
- $this->assertFalse($admin->determinedPerPageValue(15));
- $this->assertFalse($admin->determinedPerPageValue(25));
- $this->assertFalse($admin->determinedPerPageValue(200));
- $this->assertTrue($admin->determinedPerPageValue(101));
- $this->assertTrue($admin->determinedPerPageValue(102));
- $this->assertTrue($admin->determinedPerPageValue(103));
- }
- public function testIsGranted()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'Acme\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $entity = new \stdClass();
- $securityHandler=$this->getMock('Sonata\AdminBundle\Security\Handler\AclSecurityHandlerInterface');
- $securityHandler->expects($this->any())
- ->method('isGranted')
- ->will($this->returnCallback(function (AdminInterface $adminIn, $attributes, $object = null) use ($admin, $entity) {
- if ($admin == $adminIn && $attributes == 'FOO') {
- if (($object == $admin) || ($object == $entity)) {
- return true;
- }
- }
- return false;
- }));
- $admin->setSecurityHandler($securityHandler);
- $this->assertTrue($admin->isGranted('FOO'));
- $this->assertTrue($admin->isGranted('FOO', $entity));
- $this->assertFalse($admin->isGranted('BAR'));
- $this->assertFalse($admin->isGranted('BAR', $entity));
- }
- public function testSupportsPreviewMode()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertFalse($admin->supportsPreviewMode());
- }
- public function testGetPermissionsShow()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals(array('LIST'), $admin->getPermissionsShow(Admin::CONTEXT_DASHBOARD));
- $this->assertEquals(array('LIST'), $admin->getPermissionsShow(Admin::CONTEXT_MENU));
- $this->assertEquals(array('LIST'), $admin->getPermissionsShow('foo'));
- }
- public function testShowIn()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'Acme\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $securityHandler=$this->getMock('Sonata\AdminBundle\Security\Handler\AclSecurityHandlerInterface');
- $securityHandler->expects($this->any())
- ->method('isGranted')
- ->will($this->returnCallback(function (AdminInterface $adminIn, $attributes, $object = null) use ($admin) {
- if ($admin == $adminIn && $attributes == array('LIST')) {
- return true;
- }
- return false;
- }));
- $admin->setSecurityHandler($securityHandler);
- $this->assertTrue($admin->showIn(Admin::CONTEXT_DASHBOARD));
- $this->assertTrue($admin->showIn(Admin::CONTEXT_MENU));
- $this->assertTrue($admin->showIn('foo'));
- }
- public function testGetObjectIdentifier()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'Acme\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals('sonata.post.admin.post', $admin->getObjectIdentifier());
- }
- public function testTransWithNoTranslator()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals('foo', $admin->trans('foo'));
- }
- public function testTrans()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $admin->setTranslationDomain('fooMessageDomain');
- $translator = $this->getMock('Symfony\Component\Translation\TranslatorInterface');
- $admin->setTranslator($translator);
- $translator->expects($this->once())
- ->method('trans')
- ->with($this->equalTo('foo'), $this->equalTo(array()), $this->equalTo('fooMessageDomain'))
- ->will($this->returnValue('fooTranslated'));
- $this->assertEquals('fooTranslated', $admin->trans('foo'));
- }
- public function testTransWithMessageDomain()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $translator = $this->getMock('Symfony\Component\Translation\TranslatorInterface');
- $admin->setTranslator($translator);
- $translator->expects($this->once())
- ->method('trans')
- ->with($this->equalTo('foo'), $this->equalTo(array('name'=>'Andrej')), $this->equalTo('fooMessageDomain'))
- ->will($this->returnValue('fooTranslated'));
- $this->assertEquals('fooTranslated', $admin->trans('foo', array('name'=>'Andrej'), 'fooMessageDomain'));
- }
- public function testTransChoiceWithNoTranslator()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals('foo', $admin->transChoice('foo', 2));
- }
- public function testTransChoice()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $admin->setTranslationDomain('fooMessageDomain');
- $translator = $this->getMock('Symfony\Component\Translation\TranslatorInterface');
- $admin->setTranslator($translator);
- $translator->expects($this->once())
- ->method('transChoice')
- ->with($this->equalTo('foo'), $this->equalTo(2), $this->equalTo(array()), $this->equalTo('fooMessageDomain'))
- ->will($this->returnValue('fooTranslated'));
- $this->assertEquals('fooTranslated', $admin->transChoice('foo', 2));
- }
- public function testTransChoiceWithMessageDomain()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $translator = $this->getMock('Symfony\Component\Translation\TranslatorInterface');
- $admin->setTranslator($translator);
- $translator->expects($this->once())
- ->method('transChoice')
- ->with($this->equalTo('foo'), $this->equalTo(2), $this->equalTo(array('name'=>'Andrej')), $this->equalTo('fooMessageDomain'))
- ->will($this->returnValue('fooTranslated'));
- $this->assertEquals('fooTranslated', $admin->transChoice('foo', 2, array('name'=>'Andrej'), 'fooMessageDomain'));
- }
- public function testSetPersistFilters()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertAttributeEquals(false, 'persistFilters', $admin);
- $admin->setPersistFilters(true);
- $this->assertAttributeEquals(true, 'persistFilters', $admin);
- }
- public function testGetRootCode()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals('sonata.post.admin.post', $admin->getRootCode());
- $parentAdmin = new PostAdmin('sonata.post.admin.post.parent', 'NewsBundle\Entity\PostParent', 'SonataNewsBundle:PostParentAdmin');
- $parentFieldDescription = $this->getMock('Sonata\AdminBundle\Admin\FieldDescriptionInterface');
- $parentFieldDescription->expects($this->once())
- ->method('getAdmin')
- ->will($this->returnValue($parentAdmin));
- $this->assertNull($admin->getParentFieldDescription());
- $admin->setParentFieldDescription($parentFieldDescription);
- $this->assertEquals($parentFieldDescription, $admin->getParentFieldDescription());
- $this->assertEquals('sonata.post.admin.post.parent', $admin->getRootCode());
- }
- public function testGetRoot()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEquals($admin, $admin->getRoot());
- $parentAdmin = new PostAdmin('sonata.post.admin.post.parent', 'NewsBundle\Entity\PostParent', 'SonataNewsBundle:PostParentAdmin');
- $parentFieldDescription = $this->getMock('Sonata\AdminBundle\Admin\FieldDescriptionInterface');
- $parentFieldDescription->expects($this->once())
- ->method('getAdmin')
- ->will($this->returnValue($parentAdmin));
- $this->assertNull($admin->getParentFieldDescription());
- $admin->setParentFieldDescription($parentFieldDescription);
- $this->assertEquals($parentFieldDescription, $admin->getParentFieldDescription());
- $this->assertEquals($parentAdmin, $admin->getRoot());
- }
- public function testGetExportFields()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $modelManager = $this->getMock('Sonata\AdminBundle\Model\ModelManagerInterface');
- $modelManager->expects($this->once())
- ->method('getExportFields')
- ->with($this->equalTo('NewsBundle\Entity\Post'))
- ->will($this->returnValue(array('foo', 'bar')));
- $admin->setModelManager($modelManager);
- $this->assertSame(array('foo', 'bar'), $admin->getExportFields());
- }
- public function testGetPersistentParametersWithNoExtension()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $this->assertEmpty($admin->getPersistentParameters());
- }
- /**
- * @expectedException \RuntimeException
- */
- public function testGetPersistentParametersWithInvalidExtension()
- {
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $extension = $this->getMock('Sonata\AdminBundle\Admin\AdminExtensionInterface');
- $extension->expects($this->once())->method('getPersistentParameters')->will($this->returnValue(null));
- $admin->addExtension($extension);
- $admin->getPersistentParameters();
- }
- public function testGetPersistentParametersWithValidExtension()
- {
- $expected = array(
- 'context' => 'foobar'
- );
- $admin = new PostAdmin('sonata.post.admin.post', 'NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $extension = $this->getMock('Sonata\AdminBundle\Admin\AdminExtensionInterface');
- $extension->expects($this->once())->method('getPersistentParameters')->will($this->returnValue($expected));
- $admin->addExtension($extension);
- $this->assertEquals($expected, $admin->getPersistentParameters());
- }
- public function testGetFormWithNonCollectionParentValue()
- {
- $post = new Post();
- $tagAdmin = $this->createTagAdmin($post);
- $tag = $tagAdmin->getSubject();
- $tag->setPosts(null);
- $tagAdmin->getForm();
- $this->assertSame($post, $tag->getPosts());
- }
- public function testGetFormWithCollectionParentValue()
- {
- $post = new Post();
- $tagAdmin = $this->createTagAdmin($post);
- $tag = $tagAdmin->getSubject();
- // Case of a doctrine collection
- $this->assertInstanceOf('Doctrine\Common\Collections\Collection', $tag->getPosts());
- $this->assertCount(0, $tag->getPosts());
- $tag->addPost(new Post());
- $this->assertCount(1, $tag->getPosts());
- $tagAdmin->getForm();
- $this->assertInstanceOf('Doctrine\Common\Collections\Collection', $tag->getPosts());
- $this->assertCount(2, $tag->getPosts());
- $this->assertContains($post, $tag->getPosts());
- // Case of an array
- $tag->setPosts(array());
- $this->assertCount(0, $tag->getPosts());
- $tag->addPost(new Post());
- $this->assertCount(1, $tag->getPosts());
- $tagAdmin->getForm();
- $this->assertInternalType('array', $tag->getPosts());
- $this->assertCount(2, $tag->getPosts());
- $this->assertContains($post, $tag->getPosts());
- }
- private function createTagAdmin(Post $post)
- {
- $postAdmin = $this->getMockBuilder('Sonata\AdminBundle\Tests\Fixtures\Admin\PostAdmin')
- ->disableOriginalConstructor()
- ->getMock();
- $postAdmin->expects($this->any())->method('getObject')->will($this->returnValue($post));
- $formBuilder = $this->getMockForAbstractClass('Sonata\AdminBundle\Tests\Form\Builder\FormBuilder');
- $formBuilder->expects($this->any())->method('getForm')->will($this->returnValue(null));
- $tagAdmin = $this->getMockBuilder('Sonata\AdminBundle\Tests\Fixtures\Admin\TagAdmin')
- ->disableOriginalConstructor()
- ->setMethods(array('getFormBuilder'))
- ->getMock();
- $tagAdmin->expects($this->any())->method('getFormBuilder')->will($this->returnValue($formBuilder));
- $tagAdmin->setParent($postAdmin);
- $tag = new Tag();
- $tagAdmin->setSubject($tag);
- $request = $this->getMock('Symfony\Component\HttpFoundation\Request');
- $tagAdmin->setRequest($request);
- return $tagAdmin;
- }
- public function testRemoveFieldFromFormGroup()
- {
- $formGroups = array(
- 'foobar' => array(
- 'fields' => array(
- 'foo' => 'foo',
- 'bar' => 'bar',
- ),
- )
- );
- $admin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $admin->setFormGroups($formGroups);
- $admin->removeFieldFromFormGroup('foo');
- $this->assertEquals($admin->getFormGroups(), array(
- 'foobar' => array(
- 'fields' => array(
- 'bar' => 'bar',
- ),
- )
- ));
- $admin->removeFieldFromFormGroup('bar');
- $this->assertEquals($admin->getFormGroups(), array());
- }
- public function testGetFilterParameters()
- {
- $authorId = uniqid();
- $postAdmin = new PostAdmin('sonata.post.admin.post', 'Application\Sonata\NewsBundle\Entity\Post', 'SonataNewsBundle:PostAdmin');
- $commentAdmin = new CommentAdmin('sonata.post.admin.comment', 'Application\Sonata\NewsBundle\Entity\Comment', 'SonataNewsBundle:CommentAdmin');
- $commentAdmin->setParentAssociationMapping('post.author');
- $commentAdmin->setParent($postAdmin);
- $request = $this->getMock('Symfony\Component\HttpFoundation\Request', array('get'));
- $request->expects($this->any())
- ->method('get')
- ->will($this->returnValue($authorId));
- $commentAdmin->setRequest($request);
- $modelManager = $this->getMock('Sonata\AdminBundle\Model\ModelManagerInterface');
- $modelManager->expects($this->any())
- ->method('getDefaultSortValues')
- ->will($this->returnValue(array()));
- $commentAdmin->setModelManager($modelManager);
- $parameters = $commentAdmin->getFilterParameters();
- $this->assertTrue(isset($parameters['post__author']));
- $this->assertEquals(array('value' => $authorId), $parameters['post__author']);
- }
- }
- class DummySubject
- {
- public function __toString()
- {
- return 'dummy subject representation';
- }
- }
|