vendor/bundles/JMS/SecurityExtraBundle/Tests/Analysis/ServiceAnalyzerTest.php
author cavaliet
Mon, 07 Jul 2014 17:23:47 +0200
changeset 122 d672f7dd74dc
parent 0 7f95f8617b0b
permissions -rwxr-xr-x
Added tag V00.17 for changeset ada5f3d8b5b4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
namespace JMS\SecurityExtraBundle\Tests\Analysis;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
use Doctrine\Common\Annotations\AnnotationReader;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
use JMS\SecurityExtraBundle\Analysis\ServiceAnalyzer;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
class ServiceAnalyzerTest extends \PHPUnit_Framework_TestCase
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
     * @expectedException \RuntimeException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
     * @expectedMessage You have overridden a secured method "differentMethodSignature" in "SubService". Please copy over the applicable security metadata, and also add @SatisfiesParentSecurityPolicy.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
    public function testAnalyzeThrowsExceptionWhenSecureMethodIsOverridden()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
        $service = new ServiceAnalyzer('JMS\SecurityExtraBundle\Tests\Fixtures\SubService', new AnnotationReader());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
        $service->analyze();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
    public function testAnalyzeThrowsNoExceptionWhenAbstractMethodIsNotOverridenInDirectChildClass()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
        $service = new ServiceAnalyzer('JMS\SecurityExtraBundle\Tests\Fixtures\AbstractMethodNotDirectlyOverwrittenInDirectChildService', new AnnotationReader());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
        $service->analyze();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
        $methods = $service->getMetadata()->methodMetadata;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
        $this->assertTrue(isset($methods['abstractMethod']));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
        $metadata = $methods['abstractMethod'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
        $this->assertEquals(array('VIEW'), $metadata->returnPermissions);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
    public function testAnalyzeThrowsNoExceptionWhenSatisfiesParentSecurityPolicyIsDefined()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
        $service = new ServiceAnalyzer('JMS\SecurityExtraBundle\Tests\Fixtures\CorrectSubService', new AnnotationReader());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
        $service->analyze();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
        $methods = $service->getMetadata()->methodMetadata;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
        $this->assertTrue(isset($methods['differentMethodSignature']));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
        $metadata = $methods['differentMethodSignature'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
        $this->assertEquals(array(), $metadata->roles);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
        $this->assertEquals(array(), $metadata->paramPermissions);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
        $this->assertEquals(array('VIEW'), $metadata->returnPermissions);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
    public function testAnalyzeWithComplexHierarchy()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
        $service = new ServiceAnalyzer('JMS\SecurityExtraBundle\Tests\Fixtures\ComplexService', new AnnotationReader());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
        $service->analyze();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
        $methods = $service->getMetadata()->methodMetadata;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
        $this->assertTrue(isset($methods['delete'], $methods['retrieve'], $methods['abstractMethod']));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
        $metadata = $methods['delete'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
        $this->assertEquals(array(0 => array('MASTER', 'EDIT'), 2 => array('OWNER')), $metadata->paramPermissions);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
        $this->assertEquals(array(), $metadata->returnPermissions);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
        $this->assertEquals(array(), $metadata->roles);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
        $metadata = $methods['retrieve'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
        $this->assertEquals(array('VIEW', 'UNDELETE'), $metadata->returnPermissions);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
        $this->assertEquals(array(), $metadata->paramPermissions);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
        $this->assertEquals(array(), $metadata->roles);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
        $metadata = $methods['abstractMethod'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
        $this->assertEquals(array('ROLE_FOO', 'IS_AUTHENTICATED_FULLY'), $metadata->roles);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
        $this->assertEquals(array(1 => array('FOO')), $metadata->paramPermissions);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
        $this->assertEquals(array('WOW'), $metadata->returnPermissions);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
    public function testAnalyze()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
        $service = new ServiceAnalyzer('JMS\SecurityExtraBundle\Tests\Fixtures\MainService', new AnnotationReader());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
        $service->analyze();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
        $methods = $service->getMetadata()->methodMetadata;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
        $this->assertTrue(isset($methods['differentMethodSignature']));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
        $metadata = $methods['differentMethodSignature'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
        $this->assertEquals(array(array('EDIT')), $metadata->paramPermissions);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
        $this->assertEquals(array(), $metadata->returnPermissions);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
        $this->assertEquals(array(), $metadata->roles);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
        $this->assertFalse($metadata->isDeclaredOnInterface());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
}