diff --git a/VERSIONS_HOTLINE/155528 b/VERSIONS_HOTLINE/155528 new file mode 100644 index 0000000000000000000000000000000000000000..da44e2b5d26d6266a08968646bab4fcc414ec6e1 --- /dev/null +++ b/VERSIONS_HOTLINE/155528 @@ -0,0 +1 @@ + - correctif #155528 : Albums : correction d'une erreur PHP pouvant survenir lors de la consultation d'une notice d\'album. \ No newline at end of file diff --git a/library/Class/DigitalResource/Config.php b/library/Class/DigitalResource/Config.php index a6c5ce2923e1e5e1820c7c0dae89e6b52b197706..2ccaba51ee6c4e40530764144f596b478e093eef 100644 --- a/library/Class/DigitalResource/Config.php +++ b/library/Class/DigitalResource/Config.php @@ -290,8 +290,8 @@ class Class_DigitalResource_Config extends Class_Entity { } - public function urlFor(?Class_Users $user, ?array $params = []) : ?string { - return $this->_ssoUrlDelegate()->urlFor($user, $params); + public function urlFor(?Class_Users $user, ?array $params = []) : string { + return (string) $this->_ssoUrlDelegate()->urlFor($user, $params); } diff --git a/library/Class/DigitalResource/SsoUrl.php b/library/Class/DigitalResource/SsoUrl.php index 45de103567abff4a21a81bf12eff0999ddf5acc6..9d3df3f0db1fdbae51a68d9a1e1b43bc6c5375ac 100644 --- a/library/Class/DigitalResource/SsoUrl.php +++ b/library/Class/DigitalResource/SsoUrl.php @@ -24,27 +24,28 @@ class Class_DigitalResource_SsoUrl { /** @var Class_DigitalResource_Config | Class_WebService_BibNumerique_ArteVOD_Config */ protected $_config; + public function __construct($config) { $this->_config = $config; } - public function urlFor(?Class_Users $user, array $params=[]) : ?string { + public function urlFor(?Class_Users $user, array $params=[]) : string { if (!$user || !$this->_config->hasRightAccess($user) || !$this->_config->isEnabled()) - return null; + return ''; if ($record = $this->_recordFromParams($params)) - return $this->_config->getRecordSsoUrl($user, $record); + return (string) $this->_config->getRecordSsoUrl($user, $record); if ($album = $this->_albumFromParams($params)) - return $this->_config->getAlbumSsoUrl($user, $album); + return (string) $this->_config->getAlbumSsoUrl($user, $album); if ($resource = $this->_albumResourceFromParams($params)) - return $this->_config->getAlbumResourceSsoUrl($user, $resource); + return (string) $this->_config->getAlbumResourceSsoUrl($user, $resource); - return $this->_config->getSsoUrl($user); + return (string) $this->_config->getSsoUrl($user); } diff --git a/library/Class/WebService/BibNumerique/ArteVOD/Config.php b/library/Class/WebService/BibNumerique/ArteVOD/Config.php index 8bf6951ce4cc129a577c6e683b3138abe3136084..948238bf5e4f20dd60703a1c8e31f18087da3b7e 100644 --- a/library/Class/WebService/BibNumerique/ArteVOD/Config.php +++ b/library/Class/WebService/BibNumerique/ArteVOD/Config.php @@ -65,8 +65,8 @@ class Class_WebService_BibNumerique_ArteVOD_Config { } - public function urlFor(?Class_Users $user, ?array $params = []) : ?string { - return (new Class_DigitalResource_SsoUrl($this))->urlFor($user, $params); + public function urlFor(?Class_Users $user, ?array $params = []) : string { + return (string) (new Class_DigitalResource_SsoUrl($this))->urlFor($user, $params); } diff --git a/library/ZendAfi/View/Helper/Admin/HelpLink.php b/library/ZendAfi/View/Helper/Admin/HelpLink.php index 10b024fa5edcfd970bcd34eb065d8ff2db2a2f77..c06115feae4987edf8e4a2df03ba0edf17adb089 100644 --- a/library/ZendAfi/View/Helper/Admin/HelpLink.php +++ b/library/ZendAfi/View/Helper/Admin/HelpLink.php @@ -140,7 +140,7 @@ class ZendAfi_View_Helper_Admin_HelpLinkBokehWiki { ]; - public function urlFor($controller, $action) { + public function urlFor($controller, $action) : string { if (!array_key_exists($controller, $this->_mapping)) return ''; diff --git a/tests/library/Class/DigitalResourceTest.php b/tests/library/Class/DigitalResourceTest.php index a83cdf9176b8a71fe2f855432d8e689ac5fc531c..79bf81c9d8e35c446c64563060f42eca5c5364af 100644 --- a/tests/library/Class/DigitalResourceTest.php +++ b/tests/library/Class/DigitalResourceTest.php @@ -115,4 +115,122 @@ class DigitalResourceTest extends ModelTestCase { $this->assertEquals(['PirateBayResource'], array_keys($this->_digital_resource->getModulesMenu())); } +} + + + + +class DigitalResourceSsoUrlTest extends ModelTestCase { + + protected + $_sso_url, + $_config; + + + public function setUp() { + parent::setUp(); + + $no_rights = + $this->fixture(Class_Users::class, + ['id' => 4, + 'login' => 'mixed return', + 'password' => 'RT KO']); + + $has_rights = + $this->fixture(Class_Users::class, + ['id' => 5, + 'login' => 'has rights', + 'password' => 'until the end']); + + $this->fixture(Class_Notice::class, + ['id' => 7]); + + $this->fixture(Class_Album::class, + ['id' => 9, + 'titre' => '-_-']); + + $this->fixture(Class_AlbumRessource::class, + ['id' => 11]); + + $this->_config = + $this->mock()->beStrict() + + ->whenCalled('hasRightAccess') + ->with($no_rights) + ->answers(false) + + ->whenCalled('hasRightAccess') + ->with($has_rights) + ->answers(true) + + ->whenCalled('isEnabled') + ->answers(true); + + $this->_sso_url = new Class_DigitalResource_SsoUrl($this->_config); + } + + + /** @test */ + public function withNullUserShouldReturnEmptyString() { + $this->assertEquals('', $this->_sso_url->urlFor(null)); + } + + + /** @test */ + public function withNoRightsUserShouldReturnEmptyString() { + $this->assertEquals('', $this->_sso_url->urlFor(Class_Users::find(4))); + } + + + /** @test */ + public function withNotEnabledConfigShouldReturnEmptyString() { + $this->_config + ->whenCalled('isEnabled') + ->answers(false); + $this->assertEquals('', $this->_sso_url->urlFor(Class_Users::find(5))); + } + + + /** @test */ + public function withRecordParamShouldReturnEmptyString() { + $this->_config + ->whenCalled('getRecordSsoUrl') + ->with(Class_Users::find(5), Class_Notice::find(7)) + ->answers(null); + + $this->assertEquals('', $this->_sso_url->urlFor(Class_Users::find(5), ['id' => 7])); + } + + + /** @test */ + public function withAlbumParamShouldReturnEmptyString() { + $this->_config + ->whenCalled('getAlbumSsoUrl') + ->with(Class_Users::find(5), Class_Album::find(9)) + ->answers(null); + + $this->assertEquals('', $this->_sso_url->urlFor(Class_Users::find(5), ['album_id' => 9])); + } + + + /** @test */ + public function withAlbumResourceParamShouldReturnEmptyString() { + $this->_config + ->whenCalled('getAlbumResourceSsoUrl') + ->with(Class_Users::find(5), Class_AlbumRessource::find(11)) + ->answers(null); + + $this->assertEquals('', $this->_sso_url->urlFor(Class_Users::find(5), ['resource_id' => 11])); + } + + + /** @test */ + public function withNoParamsShouldReturnEmptyString() { + $this->_config + ->whenCalled('getSsoUrl') + ->with(Class_Users::find(5)) + ->answers(null); + + $this->assertEquals('', $this->_sso_url->urlFor(Class_Users::find(5))); + } } \ No newline at end of file