diff --git a/src/UnicaenAuth/View/Helper/UserProfile.php b/src/UnicaenAuth/View/Helper/UserProfile.php index 509fb5711c2dddaf1b7e833f9516d7b8b9e0cc48..769fdfc298ab1076ca25975e726995139756e652 100644 --- a/src/UnicaenAuth/View/Helper/UserProfile.php +++ b/src/UnicaenAuth/View/Helper/UserProfile.php @@ -1,6 +1,10 @@ <?php namespace UnicaenAuth\View\Helper; +use BjyAuthorize\Provider\Identity\ProviderInterface; +use UnicaenAuth\Acl\NamedRole; +use Zend\Permissions\Acl\Role\RoleInterface; + /** * Aide de vue permettant d'afficher le profil de l'utilisateur connecté. * @@ -9,7 +13,7 @@ namespace UnicaenAuth\View\Helper; class UserProfile extends UserAbstract { /** - * @var \BjyAuthorize\Provider\Identity\ProviderInterface + * @var ProviderInterface */ protected $identityProvider; @@ -30,28 +34,52 @@ class UserProfile extends UserAbstract */ public function __toString() { + $title = _("Profil utilisateur"); + $unknown = _("Inconnu"); + $none = _("Aucun"); + + if ($this->getTranslator()) { + $title = $this->getTranslator()->translate($title, $this->getTranslatorTextDomain()); + $unknown = $this->getTranslator()->translate($unknown, $this->getTranslatorTextDomain()); + $none = $this->getTranslator()->translate($none, $this->getTranslatorTextDomain()); + } + $roles = array(); foreach ($this->getIdentityProvider()->getIdentityRoles() as $role) { - if ($role instanceof \UnicaenAuth\Acl\NamedRole) { - $roles[] = $role->getRoleName(); + $lib = ''; + if ($role instanceof NamedRole) { + $lib = $role->getRoleName(); } - elseif ($role instanceof \BjyAuthorize\Acl\Role) { - $roles[] = $role->getRoleId(); + elseif ($role instanceof RoleInterface) { + $lib = $role->getRoleId(); } else { - $roles[] = (string)$role; + $fallback = null; + set_error_handler(function() use (&$fallback, $unknown) { $fallback = $unknown; }); + $lib = (string) $role; + restore_error_handler(); + $lib = $lib ?: $fallback; + } + if ($lib) { + if ($this->getTranslator()) { + $lib = $this->getTranslator()->translate($lib, $this->getTranslatorTextDomain()); + } + $roles[] = $lib; } } - $html = "<strong>Profil utilisateur :</strong>"; - if ($roles) { - $html .= $this->getView()->htmlList($roles); + if (!$roles) { + $roles[] = $none; } + + $html = "<strong>$title :</strong>" . PHP_EOL; + $html .= $this->getView()->htmlList($roles); + return $html; } /** * - * @return \BjyAuthorize\Provider\Identity\ProviderInterface + * @return ProviderInterface */ public function getIdentityProvider() { @@ -60,10 +88,10 @@ class UserProfile extends UserAbstract /** * - * @param \BjyAuthorize\Provider\Identity\ProviderInterface $identityProvider + * @param ProviderInterface $identityProvider * @return self */ - public function setIdentityProvider(\BjyAuthorize\Provider\Identity\ProviderInterface $identityProvider) + public function setIdentityProvider(ProviderInterface $identityProvider) { $this->identityProvider = $identityProvider; return $this; diff --git a/tests/UnicaenAuthTest/View/Helper/UserProfileTest.php b/tests/UnicaenAuthTest/View/Helper/UserProfileTest.php new file mode 100644 index 0000000000000000000000000000000000000000..1eba188f53f15587ce04965119cbbaf71650b210 --- /dev/null +++ b/tests/UnicaenAuthTest/View/Helper/UserProfileTest.php @@ -0,0 +1,114 @@ +<?php +namespace UnicaenAuthTest\View\Helper; + +use UnicaenAppTest\View\Helper\TestAsset\ArrayTranslatorLoader; +use UnicaenAuth\View\Helper\UserProfile; +use Zend\I18n\Translator\Translator; + +/** + * Description of UserProfileTest + * + * @property UserProfile $helper Description + * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> + */ +class UserProfileTest extends AbstractTest +{ + protected $helperClass = 'UnicaenAuth\View\Helper\UserProfile'; + protected $identityProvider; + + /** + * Sets up the fixture, for example, open a network connection. + * This method is called before a test is executed. + */ + protected function setUp() + { + parent::setUp(); + + $this->identityProvider = $this->getMockForAbstractClass('BjyAuthorize\Provider\Identity\ProviderInterface', array('getIdentityRoles')); + + $this->helper->setIdentityProvider($this->identityProvider) + ->setTranslator(new Translator()); + } + + public function testEntryPointReturnsSelfInstance() + { + $this->assertSame($this->helper, $this->helper->__invoke()); + } + + public function getIdentityRolesAndExpectedScript() + { + return array( + 'none' => array( + array(), + 'user_profile/none.phtml', + 'user_profile/none-translated.phtml', + ), + 'role' => array( + array(new \Zend\Permissions\Acl\Role\GenericRole('Invité')), + 'user_profile/role.phtml', + 'user_profile/role-translated.phtml', + ), + 'named-role' => array( + array(new \UnicaenAuth\Acl\NamedRole('admin', null, "Administrateur")), + 'user_profile/named-role.phtml', + 'user_profile/named-role-translated.phtml', + ), + 'stringable-role' => array( + array('Opérateur'), // (string) 'Opérateur' renverra 'Opérateur' + 'user_profile/stringable-role.phtml', + 'user_profile/stringable-role-translated.phtml', + ), + 'non-stringable-role' => array( + array(new \stdClass()), // (string) new \stdClass() lèvera l'erreur "Object of class stdClass could not be converted to string" + 'user_profile/non-stringable-role.phtml', + 'user_profile/non-stringable-role-translated.phtml', + ), + ); + } + + /** + * @dataProvider getIdentityRolesAndExpectedScript + * @param array $roles + * @param string $expectedScript + * @param string $expectedScriptTranslated + */ + public function testRenderingReturnsNoneIfIdentityProviderProvidesNoRole($roles, $expectedScript, $expectedScriptTranslated) + { + $this->identityProvider + ->expects($this->any()) + ->method('getIdentityRoles') + ->will($this->returnValue($roles)); + + $markup = (string) $this->helper; + $this->assertEquals($this->getExpected($expectedScript), $markup); + + // traduction + $this->helper->setTranslator($this->_getTranslator()); + $markup = (string) $this->helper; + $this->assertEquals($this->getExpected($expectedScriptTranslated), $markup); + } + + /** + * Returns translator + * + * @return Translator + */ + protected function _getTranslator() + { + $loader = new ArrayTranslatorLoader(); + $loader->translations = array( + "Profil utilisateur" => "User profile", + "Inconnu" => "Unknown", + "Aucun" => "None", + "Invité" => "Guest", + "Administrateur" => "Administrator", + "Opérateur" => "Operator" + ); + + $translator = new Translator(); + $translator->getPluginManager()->setService('default', $loader); + $translator->addTranslationFile('default', null); + + return $translator; + } +} \ No newline at end of file diff --git a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/named-role-translated.phtml b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/named-role-translated.phtml new file mode 100644 index 0000000000000000000000000000000000000000..3763bd40b1429a0ac6bae05b0b23632adcc3f7f8 --- /dev/null +++ b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/named-role-translated.phtml @@ -0,0 +1,4 @@ +<strong>User profile :</strong> +<ul> +<li>Administrator</li> +</ul> diff --git a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/named-role.phtml b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/named-role.phtml new file mode 100644 index 0000000000000000000000000000000000000000..8de16ccdc0ac0c32cdf297bd28620eea218b553d --- /dev/null +++ b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/named-role.phtml @@ -0,0 +1,4 @@ +<strong>Profil utilisateur :</strong> +<ul> +<li>Administrateur</li> +</ul> diff --git a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/non-stringable-role-translated.phtml b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/non-stringable-role-translated.phtml new file mode 100644 index 0000000000000000000000000000000000000000..9488b6c4f0efc80cfbee861d6bf43ecc2d216f92 --- /dev/null +++ b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/non-stringable-role-translated.phtml @@ -0,0 +1,4 @@ +<strong>User profile :</strong> +<ul> +<li>Unknown</li> +</ul> diff --git a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/non-stringable-role.phtml b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/non-stringable-role.phtml new file mode 100644 index 0000000000000000000000000000000000000000..0f25c3ba586ab302bf22bc44f126b2940af1d1d9 --- /dev/null +++ b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/non-stringable-role.phtml @@ -0,0 +1,4 @@ +<strong>Profil utilisateur :</strong> +<ul> +<li>Inconnu</li> +</ul> diff --git a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/none-translated.phtml b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/none-translated.phtml new file mode 100644 index 0000000000000000000000000000000000000000..7898677048fae3546faaeb4338617ee7bdc17a8e --- /dev/null +++ b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/none-translated.phtml @@ -0,0 +1,4 @@ +<strong>User profile :</strong> +<ul> +<li>None</li> +</ul> diff --git a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/none.phtml b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/none.phtml new file mode 100644 index 0000000000000000000000000000000000000000..6b1eb6ce20a913ea9065cd7c078f3e3fc059eb22 --- /dev/null +++ b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/none.phtml @@ -0,0 +1,4 @@ +<strong>Profil utilisateur :</strong> +<ul> +<li>Aucun</li> +</ul> diff --git a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/role-translated.phtml b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/role-translated.phtml new file mode 100644 index 0000000000000000000000000000000000000000..e0f3a1ed3a6de04f6976fe689e15f3c77b6d783e --- /dev/null +++ b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/role-translated.phtml @@ -0,0 +1,4 @@ +<strong>User profile :</strong> +<ul> +<li>Guest</li> +</ul> diff --git a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/role.phtml b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/role.phtml new file mode 100644 index 0000000000000000000000000000000000000000..0c7485a75e9b9b4afc299fc58a5b81823fe82810 --- /dev/null +++ b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/role.phtml @@ -0,0 +1,4 @@ +<strong>Profil utilisateur :</strong> +<ul> +<li>Invité</li> +</ul> diff --git a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/stringable-role-translated.phtml b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/stringable-role-translated.phtml new file mode 100644 index 0000000000000000000000000000000000000000..32c3448ff6ee98a26f567442206866d67f8874c8 --- /dev/null +++ b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/stringable-role-translated.phtml @@ -0,0 +1,4 @@ +<strong>User profile :</strong> +<ul> +<li>Operator</li> +</ul> diff --git a/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/stringable-role.phtml b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/stringable-role.phtml new file mode 100644 index 0000000000000000000000000000000000000000..56387275d76885f5783b7c9321c26174e91f76ff --- /dev/null +++ b/tests/UnicaenAuthTest/View/Helper/_files/expected/user_profile/stringable-role.phtml @@ -0,0 +1,4 @@ +<strong>Profil utilisateur :</strong> +<ul> +<li>Opérateur</li> +</ul>