diff -r 000000000000 -r 7f95f8617b0b vendor/bundles/JMS/SecurityExtraBundle/Tests/Analysis/ServiceAnalyzerTest.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/bundles/JMS/SecurityExtraBundle/Tests/Analysis/ServiceAnalyzerTest.php Sat Sep 24 15:40:41 2011 +0200 @@ -0,0 +1,85 @@ +analyze(); + } + + public function testAnalyzeThrowsNoExceptionWhenAbstractMethodIsNotOverridenInDirectChildClass() + { + $service = new ServiceAnalyzer('JMS\SecurityExtraBundle\Tests\Fixtures\AbstractMethodNotDirectlyOverwrittenInDirectChildService', new AnnotationReader()); + $service->analyze(); + + $methods = $service->getMetadata()->methodMetadata; + $this->assertTrue(isset($methods['abstractMethod'])); + + $metadata = $methods['abstractMethod']; + $this->assertEquals(array('VIEW'), $metadata->returnPermissions); + } + + public function testAnalyzeThrowsNoExceptionWhenSatisfiesParentSecurityPolicyIsDefined() + { + $service = new ServiceAnalyzer('JMS\SecurityExtraBundle\Tests\Fixtures\CorrectSubService', new AnnotationReader()); + $service->analyze(); + + $methods = $service->getMetadata()->methodMetadata; + $this->assertTrue(isset($methods['differentMethodSignature'])); + + $metadata = $methods['differentMethodSignature']; + $this->assertEquals(array(), $metadata->roles); + $this->assertEquals(array(), $metadata->paramPermissions); + $this->assertEquals(array('VIEW'), $metadata->returnPermissions); + } + + public function testAnalyzeWithComplexHierarchy() + { + $service = new ServiceAnalyzer('JMS\SecurityExtraBundle\Tests\Fixtures\ComplexService', new AnnotationReader()); + $service->analyze(); + + $methods = $service->getMetadata()->methodMetadata; + $this->assertTrue(isset($methods['delete'], $methods['retrieve'], $methods['abstractMethod'])); + + $metadata = $methods['delete']; + $this->assertEquals(array(0 => array('MASTER', 'EDIT'), 2 => array('OWNER')), $metadata->paramPermissions); + $this->assertEquals(array(), $metadata->returnPermissions); + $this->assertEquals(array(), $metadata->roles); + + $metadata = $methods['retrieve']; + $this->assertEquals(array('VIEW', 'UNDELETE'), $metadata->returnPermissions); + $this->assertEquals(array(), $metadata->paramPermissions); + $this->assertEquals(array(), $metadata->roles); + + $metadata = $methods['abstractMethod']; + $this->assertEquals(array('ROLE_FOO', 'IS_AUTHENTICATED_FULLY'), $metadata->roles); + $this->assertEquals(array(1 => array('FOO')), $metadata->paramPermissions); + $this->assertEquals(array('WOW'), $metadata->returnPermissions); + } + + public function testAnalyze() + { + $service = new ServiceAnalyzer('JMS\SecurityExtraBundle\Tests\Fixtures\MainService', new AnnotationReader()); + $service->analyze(); + + $methods = $service->getMetadata()->methodMetadata; + $this->assertTrue(isset($methods['differentMethodSignature'])); + + $metadata = $methods['differentMethodSignature']; + $this->assertEquals(array(array('EDIT')), $metadata->paramPermissions); + $this->assertEquals(array(), $metadata->returnPermissions); + $this->assertEquals(array(), $metadata->roles); + $this->assertFalse($metadata->isDeclaredOnInterface()); + } +} \ No newline at end of file