From 8b7b4c19bfe9d4bd4518ef8a311eb7713c92c469 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?ANDRE=20s=C3=A9bastien?= <sandre@afi-sa.fr> Date: Mon, 31 May 2021 17:20:12 +0200 Subject: [PATCH] Photline#134505 : PNB dilicom : add mandatory field ReaderId for guest user --- VERSIONS_HOTLINE/134505 | 1 + .../WebService/BibNumerique/Dilicom/Hub.php | 23 ++++++++-- tests/fixtures/DilicomFixtures.php | 2 +- .../PnbDilicom/PnbDilicomDisplayTest.php | 44 ++++++++++++++----- 4 files changed, 55 insertions(+), 15 deletions(-) create mode 100644 VERSIONS_HOTLINE/134505 diff --git a/VERSIONS_HOTLINE/134505 b/VERSIONS_HOTLINE/134505 new file mode 100644 index 00000000000..f5b389e081f --- /dev/null +++ b/VERSIONS_HOTLINE/134505 @@ -0,0 +1 @@ + - ticket #134505 : PNB Dilicom : rendre le prết possible pour les comptes invités \ No newline at end of file diff --git a/library/Class/WebService/BibNumerique/Dilicom/Hub.php b/library/Class/WebService/BibNumerique/Dilicom/Hub.php index 46dca862962..2860f948510 100644 --- a/library/Class/WebService/BibNumerique/Dilicom/Hub.php +++ b/library/Class/WebService/BibNumerique/Dilicom/Hub.php @@ -170,9 +170,9 @@ class Class_WebService_BibNumerique_Dilicom_Hub extends Class_WebService_Abstrac array_filter(['glnLoaner' => $user->getBibGLN(), 'UserInfo.year' => $this->getPhpCommand()->rand(1900, 2000), 'UserInfo.gender' => (1 == ($value = $this->getPhpCommand()->rand(1, 2))) ? 'F': 'H', - 'DRMinfo.readerPass' => base64_encode($this->getPhpCommand()->hash('sha256', $user->getIdabon(), true)) , - 'DRMinfo.readerHint' => $this->_('Merci de saisir votre numero de carte'), - 'DRMinfo.ReaderId' => $user->getIdabon(), + 'DRMinfo.readerPass' => base64_encode($this->getPhpCommand()->hash('sha256', $this->_getReaderId($user), true)), + 'DRMinfo.readerHint' => $this->_getReaderHint($user), + 'DRMinfo.ReaderId' => $this->_getReaderId($user), 'DRMinfo.extendUrl' => Class_Url::absolute(['module' => 'opac', 'controller' => 'bib-numerique', 'action' => 'extends-pnb-loan', @@ -189,6 +189,7 @@ class Class_WebService_BibNumerique_Dilicom_Hub extends Class_WebService_Abstrac 'action' => 'return-pnb-loan', 'loan_id' => $loan->getId()],null,true) ])); + if (!$response) { $loan->delete(); return $this->_error($this->_('Emprunt impossible. Le service "loanBook" n\'a rien renvoyé.')); @@ -219,6 +220,20 @@ class Class_WebService_BibNumerique_Dilicom_Hub extends Class_WebService_Abstrac } + protected function _getReaderId($user) { + return $user->isAbonne() + ? $user->getIdabon() + : $user->getLogin(); + } + + + protected function _getReaderHint($user) { + return $user->isAbonne() + ? $this->_('Merci de saisir votre numero de carte') + : $this->_('Merci de saisir votre identifiant de connexion renseigné lors de votre inscription'); + } + + public function listUserAgents($filter = null) { $options = []; if ($filter == static::FILTER_LCP) @@ -619,4 +634,4 @@ class Class_WebService_BibNumerique_Dilicom_Hub extends Class_WebService_Abstrac return $this->_now; } -} \ No newline at end of file +} diff --git a/tests/fixtures/DilicomFixtures.php b/tests/fixtures/DilicomFixtures.php index ace18c53364..b460dfa6381 100644 --- a/tests/fixtures/DilicomFixtures.php +++ b/tests/fixtures/DilicomFixtures.php @@ -218,4 +218,4 @@ class DilicomFixtures { 'items' => [$item]]) ->addAuthor('Raphaël Draï'); } -} \ No newline at end of file +} diff --git a/tests/scenarios/PnbDilicom/PnbDilicomDisplayTest.php b/tests/scenarios/PnbDilicom/PnbDilicomDisplayTest.php index 8cb1743bd08..323ed497a5e 100644 --- a/tests/scenarios/PnbDilicom/PnbDilicomDisplayTest.php +++ b/tests/scenarios/PnbDilicom/PnbDilicomDisplayTest.php @@ -862,40 +862,64 @@ class PnbDilicomDisplayBibNumeriqueControllerLoanBookActionGuestWithOtherGuestsL parent::setUp(); $this->setParams(10007); $this->_params['loanEndDate'] = '2014-08-10T14:14:14+0200'; - $this->_params['DRMinfo.ReaderId'] = null; + $this->_params['DRMinfo.ReaderId'] = 'guest'; + $this->_params['DRMinfo.readerPass'] = 'aGFzaDI1Nmd1ZXN0'; + $this->_params['DRMinfo.readerHint'] = 'Merci de saisir votre identifiant de connexion renseigné lors de votre inscription'; - foreach(range(1, 6) as $i) + foreach (range(1, 6) as $i) $this->fixture('Class_Loan_Pnb', - ['id' => 10000+$i, - 'user_id' => 10000+$i, + ['id' => 10000 + $i, + 'user_id' => 10000 + $i, 'subscriber_id' => '', 'record_origin_id' => '', 'expected_return_date' => '2022-06-01']); $this->_http ->whenCalled('open_url') - ->with(static::BASE_TEST_URL.'getEndedLoans?login=afi-bib&password=secretPassword&glnContractor=123456789&loanId%5B0%5D=10001&loanId%5B1%5D=10002&loanId%5B2%5D=10003&loanId%5B3%5D=10004&loanId%5B4%5D=10005&loanId%5B5%5D=10006', - ['auth' => [ 'user' => 'afi-bib', + ->with(static::BASE_TEST_URL . 'getEndedLoans?login=afi-bib&password=secretPassword&glnContractor=123456789&loanId%5B0%5D=10001&loanId%5B1%5D=10002&loanId%5B2%5D=10003&loanId%5B3%5D=10004&loanId%5B4%5D=10005&loanId%5B5%5D=10006', + ['auth' => ['user' => 'afi-bib', 'password' => 'secretPassword']]) ->answers(DilicomFixtures::getEndedLoansResponse()) ->whenCalled('open_url') - ->with(static::BASE_TEST_URL.'getLoanStatus?login=afi-bib&password=secretPassword&glnContractor=123456789&orderLineId%5B0%5D=x321&returnEndedLoan=0', - ['auth' => [ 'user' => 'afi-bib', + ->with(static::BASE_TEST_URL . 'getLoanStatus?login=afi-bib&password=secretPassword&glnContractor=123456789&orderLineId%5B0%5D=x321&returnEndedLoan=0', + ['auth' => ['user' => 'afi-bib', 'password' => 'secretPassword']]) ->answers(DilicomFixtures::getLoanStatusResponse()) ->whenCalled('open_url') - ->with(static::BASE_TEST_URL.'loanBook?login=afi-bib&password=secretPassword&glnContractor=123456789&glnLoaner=2345889&'.http_build_query( array_filter($this->_params)), - ['auth' => [ 'user' => 'afi-bib', + ->with(static::BASE_TEST_URL + . 'loanBook?login=afi-bib&password=secretPassword&glnContractor=123456789&glnLoaner=2345889&' + . http_build_query(array_filter($this->_params)), + ['auth' => ['user' => 'afi-bib', 'password' => 'secretPassword']]) ->answers(DilicomFixtures::loanBookResponse()) ; + $php_command = $this->mock() + ->whenCalled('hash') + ->answers('hash256guest') + + ->whenCalled('rand') + ->with(1, 2) + ->answers(2) + + ->whenCalled('rand') + ->with(1900, 2000) + ->answers(1930); + + Class_WebService_BibNumerique_Dilicom_Hub::setPhpCommand($php_command); + $this->dispatch('/bib-numerique/loan-book/id/3'); } + public function tearDown() { + Class_WebService_BibNumerique_Dilicom_Hub::setPhpCommand(null); + parent::tearDown(); + } + + /** @test */ public function shouldBeAbleToLoan() { $this->assertNotNull(Class_Loan_Pnb::find(10007)); -- GitLab