Skip to content
Snippets Groups Projects
BibNumeriqueControllerDilicomTest.php 22.8 KiB
Newer Older
Laurent's avatar
Laurent committed
<?php
/**
 * Copyright (c) 2012, Agence Française Informatique (AFI). All rights reserved.
 *
 * BOKEH is free software; you can redistribute it and/or modify
 * it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE as published by
 * the Free Software Foundation.
 *
 * There are special exceptions to the terms and conditions of the AGPL as it
 * is applied to this software (see README file).
 *
 * BOKEH is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
 *
 * You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
 * along with BOKEH; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
 */
require_once 'tests/fixtures/DilicomFixtures.php';
Laurent's avatar
Laurent committed

abstract class BibNumeriqueContollerDilicomTestCase extends AbstractControllerTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  protected
    $_http,
    $_time_source,
    $_storm_default_to_volatile = true;

  public function setUp() {
    parent::setUp();

Laurent's avatar
Laurent committed
    $this->fixture('Class_Bib',
                   ['id' => 1,
                    'gln' => '2345889']);

    Class_AdminVar::set('DILICOM_PNB_MAX_LOAN_DURATION', 0);

Patrick Barroca's avatar
Patrick Barroca committed
    $logged_user = $this->fixture('Class_Users',
                                  ['id' => 6,
                                   'nom'=>'Pito',
                                   'login'=>'Chat',
                                   'password'=>'123456',
                                   'id_site' => 1,
                                   'idabon' => '12345',
                                   'user_groups' => [$this->fixture('Class_UserGroup',
                                                                    ['id' => '20',
                                                                     'libelle' => 'Multimedia',
                                                                     'rights' => [Class_UserGroup::RIGHT_ACCES_PNB_DILICOM]])]]);
    $logged_user->beAbonneSIGB()->assertSave();
    ZendAfi_Auth::getInstance()->logUser($logged_user);

    $this->book = $this->fixture('Class_Album',
                                 ['id' => 3,
                                  'libelle' => 'Totem et Thora',
                                  'id_origine' => 'Dilicom-88817216',
                                  'external_uri' => 'http://www.edenlivres.fr/p/23416',
                                  'type_doc_id' => Class_TypeDoc::DILICOM,
                                  'isbn' => '435465',
                                  'items' => [$this->fixture('Class_Album_Item',
                                                             ['id' => 1,
                                                              'album_id' => 3,
                                                              'loan_count' => 2,
                                                              'quantity' => 4])],
                                  'usage_constraints' => [$this->fixture('Class_Album_UsageConstraint',
                                                                         ['id' => 1,
                                                                          'album_id' => 3,
                                                                          'usage_type' => Class_Album_UsageConstraint::LOAN_CONSTRAINT,
                                                                          Class_Album_UsageConstraint::MAX_NB_OF_USERS => 40,
                                                                          Class_Album_Usageconstraint::QUANTITY => 50,
                                                                          Class_Album_UsageConstraint::DURATION => '100',
Patrick Barroca's avatar
Patrick Barroca committed
                                                                          'order_line_id' => 'x321']),
                                                          $this->fixture('Class_Album_UsageConstraint',
                                                                         ['id' => 2,
                                                                          'album_id' => 3,
                                                                          'usage_type' => Class_Album_UsageConstraint::AVAILABILITY_CONSTRAINT,
                                                                          Class_Album_UsageConstraint::DURATION => '100',
                                                                          Class_Album_UsageConstraint::END_DATE => '2018-04-01 00:00:00'])]]);

    RessourcesNumeriquesFixtures::activateDilicom();


    $this->_http = Storm_Test_ObjectWrapper::mock();
    Class_WebService_BibNumerique_Dilicom_Hub::setDefaultHttpClient($this->_http);

    $this->_http
      ->whenCalled('setAuth')
      ->with('afi-bib', 'secretPassword')
      ->answers(null);

    $this->_time_source = new TimeSourceForTest('2014-05-02 14:14:14');
    Class_WebService_BibNumerique_Dilicom_Hub::setTimeSource($this->_time_source);
    Class_Album_UsageConstraint::setTimeSource($this->_time_source);
    Class_Loan_Pnb::setTimeSource($this->_time_source);
  }


  public function tearDown() {
    Class_WebService_BibNumerique_Dilicom_Hub::setTimeSource(null);
    Class_Album_UsageConstraint::setTimeSource(null);
    Class_Loan_Pnb::setTimeSource(null);

    parent::tearDown();
Patrick Barroca's avatar
Patrick Barroca committed
  }
class BibNumeriqueContollerDilicomAjaxPopupBookActionTest extends BibNumeriqueContollerDilicomTestCase {
  protected $_storm_default_to_volatile = true;

  public function popupConsultBookShouldContainsLinkToOpenAjax() {
    $this->_http
      ->whenCalled('open_url')
      ->with('https://pnb-test.centprod.com/v2/pnb-numerique/json/consultBook?glnContractor=123456789&orderLineId=x321&accessMedium=STREAMING&localization=IN_SITU&consultEndDate=2014-05-02T15%3A14%3A14%2B0200&ean13=435465&ipAddress=127.0.0.1&glnColl=afi-bib&loanerColl=2345889&loanId=n4y4nq63')
      ->answers(DilicomFixtures::loanBookResponse())
      ->beStrict();

    $this->dispatch('/bib-numerique/consult-book-ajax/id/3', true);
    $this->assertContains('<div class="popup-content"><p>Êtes vous sûr de vouloir consulter ce document ?</p><a href="/bib-numerique/consult-book-open-ajax/id/3" data-popup="true" class="button blue">oui</a><a href="" onclick="opacDialogClose();return false" class="button red">non</a></div>',
                          json_decode($this->_response->getBody())->content);
  public function popupConsultBookOpenShouldContainsLinkToOpenPnbUrl() {
    $this->_http
      ->whenCalled('open_url')
      ->with('https://pnb-test.centprod.com/v2/pnb-numerique/json/consultBook?glnContractor=123456789&orderLineId=x321&accessMedium=STREAMING&localization=IN_SITU&consultEndDate=2014-05-02T15%3A14%3A14%2B0200&ean13=435465&ipAddress=127.0.0.1&glnColl=afi-bib&loanerColl=2345889&loanId=n4y4nq63')
      ->answers(DilicomFixtures::loanBookResponse())
      ->beStrict();

    $this->dispatch('/bib-numerique/consult-book-open-ajax/id/3', true);
    $this->assertContains('<div class=\"popup-content\"><a href=\"https:\/\/pnb-dilicom.centprod.com\/v2\/\/link\/3025594195810\/LOAN\/WIKI001\/9782021153057-NUMOIY0785CYO0IGCV83DE9DOAOC1Y1O.do\" target=\"_blank\" class=\"button blue\" onclick=\"opacDialogClose();\">Lire en ligne<\/a><\/div>"',
                          $this->_response->getBody());
  }


  /** @test */
  public function popupLoanBookOpenAjaxWithPnbErrorShouldContainsScriptToReloadPage() {
        $this->_http
      ->whenCalled('open_url')
      ->with('https://pnb-test.centprod.com/v2/pnb-numerique/json/consultBook?glnContractor=123456789&orderLineId=x321&accessMedium=STREAMING&localization=IN_SITU&consultEndDate=2014-05-02T15%3A14%3A14%2B0200&ean13=435465&ipAddress=127.0.0.1&glnColl=afi-bib&loanerColl=2345889&loanId=n4y4nq63')
      ->answers(DilicomFixtures::loanBookErrorResponse())
      ->beStrict();

    $this->dispatch('/bib-numerique/consult-book-open-ajax/id/3', true);
    $this->assertContains('<script>window.open(\"\/recherche\/viewnotice\/id\/3\/render\/false\")<\/script>', $this->_response->getBody());
  }


  /** @test */
  public function loanBookPopupShouldContainsQuestion() {
    $this->dispatch('/bib-numerique/loan-book-ajax/id/3', true);
    $this->assertContains('<p>Êtes vous sûr de vouloir emprunter ce document ?</p>',
                          json_decode($this->_response->getBody())->content);
Ghislain Loas's avatar
Ghislain Loas committed
  /** @test */
  public function loanBookPopupShouldContainsLinkToDownload() {
    $this->dispatch('/bib-numerique/loan-book-ajax/id/3', true);
    $this->assertContains('<a href=\"\/bib-numerique\/download-loan-book-ajax\/id\/3\" data-popup=\"true\" class=\"button blue\">oui<\/a>', $this->_response->getBody());
  }


  /** @test */
  public function loanBookPopupShouldContainsAnswerYes() {
    $this->dispatch('/bib-numerique/loan-book-ajax/id/3', true);
    $this->assertContains('<a href=\"\/bib-numerique\/download-loan-book-ajax\/id\/3\" data-popup=\"true\" class=\"button blue\">oui<\/a>', $this->_response->getBody());
  /** @test */
  public function loanBookPopupShouldContainDefaultMessage() {
    $this->dispatch('/bib-numerique/loan-book-ajax/id/3', true);
    $this->assertContains('Votre compte sera mis à jour dans un délai de 15 minutes après le retour anticipé du document.', json_decode($this->_response->getBody())->content);
  }


  /** @test */
  public function loanBookPopupShouldContainDefinedMessage() {
    $this->fixture('Class_AdminVar',
                   ['id' => 'DILICOM_PNB_LOAN_WARNING_MESSAGE',
                    'valeur' => 'Don\'t use this !'
                   ]);
    $this->dispatch('/bib-numerique/loan-book-ajax/id/3', true);
    $this->assertContains('Don\'t use this !', json_decode($this->_response->getBody())->content);
  }


  /** @test */
  public function downloadLinkShouldAnswersDilicomLink() {
    $this->_http
      ->whenCalled('open_url')
      ->with('https://pnb-test.centprod.com/v2/pnb-numerique/json/loanBook?glnContractor=123456789&orderLineId=x321&accessMedium=DOWNLOAD&glnColl=afi-bib&loanerColl=2345889&localization=EX_SITU&loanEndDate=2014-08-10T14%3A14%3A14%2B0200&ean13=435465&loanId=1')
      ->answers(DilicomFixtures::loanBookResponse())
      ->beStrict();

    $this->dispatch('bib-numerique/download-loan-book-ajax/id/3', true);
    $this->assertContains('"<div class=\"popup-content\"><a href=\"https:\/\/pnb-dilicom.centprod.com\/v2\/\/link\/3025594195810\/LOAN\/WIKI001\/9782021153057-NUMOIY0785CYO0IGCV83DE9DOAOC1Y1O.do\" class=\"button blue\" onclick=\"opacDialogClose();\">T\u00e9l\u00e9charger<\/a><\/div>"', $this->_response->getBody());
  public function downloadLinkWithPnbErrorShouldConstainsScriptToReloadPage() {
    $this->_http
      ->whenCalled('open_url')
      ->with('https://pnb-test.centprod.com/v2/pnb-numerique/json/loanBook?glnContractor=123456789&orderLineId=x321&accessMedium=DOWNLOAD&glnColl=afi-bib&loanerColl=2345889&localization=EX_SITU&loanEndDate=2014-08-10T14%3A14%3A14%2B0200&ean13=435465&loanId=1')
      ->answers(DilicomFixtures::loanBookErrorResponse())
      ->beStrict();

    $this->dispatch('bib-numerique/download-loan-book-ajax/id/3', true);
    $this->assertContains('<script>window.open(\"\/recherche\/viewnotice\/id\/3\/render\/false\")<\/script>', $this->_response->getBody());

  /** @test */
  public function downloadLinkWithNoConnectedUserShouldRenderLoginPopup() {
    ZendAfi_Auth::getInstance()->clearIdentity();
    $this->dispatch('bib-numerique/download-loan-book-ajax/id/3', true);
    $this->assertContains('"title":"Authentification"', $this->_response->getBody());
  }

Laurent's avatar
Laurent committed
class BibNumeriqueContollerDilicomConsultBookActionTest extends BibNumeriqueContollerDilicomTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->_http
      ->whenCalled('open_url')
      ->with('https://pnb-test.centprod.com/v2/pnb-numerique/json/consultBook?glnContractor=123456789&orderLineId=x321'
             .'&accessMedium=STREAMING'
             .'&localization=IN_SITU'
             .'&consultEndDate='.urlencode('2014-05-02T15:14:14+0200')
             .'&ean13=435465'
             .'&ipAddress=195.251.88.223'
Laurent's avatar
Laurent committed
             .'&glnColl=afi-bib'
Laurent's avatar
Laurent committed
             .'&loanerColl=2345889'
Patrick Barroca's avatar
Patrick Barroca committed
             .'&loanId='.base_convert($this->_time_source->time(), 10, 36).'63')
      ->answers('{"orderLineId":"54e7473f975a2fa6aa4d3e17","consultEndDate":"2014-05-02T15:14:14+0200","loanId":"3","returnStatus":"OK","returnMessage":[],"requestId":"awvzrcttestpnbv2_000000039_201503051511","link":{"url":"https://pnb-test.centprod.com/v2//link/3056000302801/CONSULT/3/9791023501766-FGR9FJJGJCMXYMB8BO87XR9TPHDN9QNS.do","aformatDescription":"EPUB","mimetype":"application/epub+zip","ean13":"9791023501766","format":"E101"}}')
      ->beStrict();
Patrick Barroca's avatar
Patrick Barroca committed
    $_SERVER['HTTP_X_FORWARDED_FOR'] = '195.251.88.223';
Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('/bib-numerique/consult-book/id/3', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  public function tearDown() {
    Class_WebService_BibNumerique_Dilicom_Hub::setDefaultHttpClient(null);
    RessourcesNumeriquesFixtures::deactivateDilicom();
    parent::tearDown();
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function openUrlShouldHaveBeenCalled() {
    $this->assertTrue($this->_http->methodHasBeenCalled('open_url'));
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function setAuthShouldHaveBeenCalled() {
    $this->assertTrue($this->_http->methodHasBeenCalled('setAuth'));
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function responseShouldRedirectToConsultBookUrl() {
    $this->assertRedirectTo('https://pnb-test.centprod.com/v2//link/3056000302801/CONSULT/3/9791023501766-FGR9FJJGJCMXYMB8BO87XR9TPHDN9QNS.do');
  }
Laurent's avatar
Laurent committed
}




class BibNumeriqueContollerDilicomConsultBookWithErrorsActionTest extends BibNumeriqueContollerDilicomTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->_http
      ->whenCalled('open_url')
      ->answers('{"orderLineId":"54e7473f975a2fa6aa4d3e17","consultEndDate":"","loanId":"3","returnStatus":"ERROR","returnMessage":["Crash boom"],"requestId":"awvzrcttestpnbv2_000000039_201503051511","link":{}}');
Patrick Barroca's avatar
Patrick Barroca committed
    $_SERVER['HTTP_REFERER'] = '/viewnotice/id/3';
Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('/bib-numerique/consult-book/id/3', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function responseShouldRedirectToReferrer() {
    $this->assertRedirectTo('/recherche/viewnotice/id/3', $this->getResponseLocation());
Patrick Barroca's avatar
Patrick Barroca committed
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function errorMessageShouldBeInNotifications() {
    $this->assertFlashMessengerContentContains('Crash boom');
  }


class BibNumeriqueControllerDilicomLoanBookActionTest extends BibNumeriqueContollerDilicomTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $_SERVER['HTTP_REFERER'] = '/viewnotice/id/3';
Laurent's avatar
Laurent committed
    Class_AdminVar::set('DILICOM_PNB_LOAN_COUNT_LIMIT', 0);

Patrick Barroca's avatar
Patrick Barroca committed
    $this->_http
      ->whenCalled('open_url')
      ->with('https://pnb-test.centprod.com/v2/pnb-numerique/json/loanBook?glnContractor=123456789&orderLineId=x321&accessMedium=DOWNLOAD&glnColl=afi-bib&loanerColl=2345889&localization=EX_SITU&loanEndDate=2014-08-10T14%3A14%3A14%2B0200&ean13=435465&loanId=1')
Patrick Barroca's avatar
Patrick Barroca committed
      ->answers(DilicomFixtures::loanBookResponse())
      ->beStrict();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('/bib-numerique/loan-book/id/3', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function responseShouldReturnDownloadUrl() {
    $this->assertRedirectTo('https://pnb-dilicom.centprod.com/v2//link/3025594195810/LOAN/WIKI001/9782021153057-NUMOIY0785CYO0IGCV83DE9DOAOC1Y1O.do');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function bokehLoanShouldHaveBeenSaved() {
    $this->assertNotNull(Class_Loan_Pnb::findFirstBy(['record_origin_id' => 'Dilicom-88817216']));
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function loanUrlShouldHaveBeenSaved() {
    $this->assertEquals('https://pnb-dilicom.centprod.com/v2//link/3025594195810/LOAN/WIKI001/9782021153057-NUMOIY0785CYO0IGCV83DE9DOAOC1Y1O.do', Class_Loan_Pnb::findFirstBy(['record_origin_id' => 'Dilicom-88817216'])->getLoanLink());
  }
}



class BibNumeriqueControllerDilicomLoanBookActionErrorsTest extends BibNumeriqueContollerDilicomTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $_SERVER['HTTP_REFERER'] = '/viewnotice/id/3';
    Class_AdminVar::set('DILICOM_PNB_MAX_LOAN_DURATION', 10);

Patrick Barroca's avatar
Patrick Barroca committed
    $this->_http
      ->whenCalled('open_url')
      ->with('https://pnb-test.centprod.com/v2/pnb-numerique/json/loanBook?glnContractor=123456789&orderLineId=x321&accessMedium=DOWNLOAD&glnColl=afi-bib&loanerColl=2345889&localization=EX_SITU&loanEndDate=2014-05-12T14%3A14%3A14%2B0200&ean13=435465&loanId=1')
Patrick Barroca's avatar
Patrick Barroca committed
      ->answers(DilicomFixtures::loanBookErrorResponse())
      ->beStrict();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('/bib-numerique/loan-book/id/3', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function responseShouldRedirectToReferrer() {
    $this->assertRedirectTo('/recherche/viewnotice/id/3', $this->getResponseLocation());
Patrick Barroca's avatar
Patrick Barroca committed
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function errorMessageShouldBeInNotifications() {
    $this->assertFlashMessengerContentContains('Are you trying to download this book ?');
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function loanShouldHaveBeedDeleted() {
    $this->assertNull(Class_Loan_Pnb::find(1));
  }
Ghislain Loas's avatar
Ghislain Loas committed
}



class BibNumeriqueControllerDilicomLoanBookWrongAlbumTest extends BibNumeriqueContollerDilicomTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function responseShouldRedirectToIndex() {
    $_SERVER['HTTP_REFERER'] = '/viewnotice/id/3789';
    $this->dispatch('/bib-numerique/loan-book/id/3789', true);
    $this->assertRedirectTo('/recherche/viewnotice/id/3789');
Patrick Barroca's avatar
Patrick Barroca committed
  }
Ghislain Loas's avatar
Ghislain Loas committed
class BibNumeriqueControllerDilicomLoanBookActionTwiceWithSameUserTest extends BibNumeriqueContollerDilicomTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $_SERVER['HTTP_REFERER'] = '/viewnotice/id/3';

    $this->_http
      ->whenCalled('open_url')
      ->with('https://pnb-test.centprod.com/v2/pnb-numerique/json/getEndedLoans?glnContractor=123456789&loanId[0]=5')
      ->answers(DilicomFixtures::getEndedLoansResponse())

      ->beStrict();
Patrick Barroca's avatar
Patrick Barroca committed

    $this->fixture('Class_Loan_Pnb',
                   ['id' => 5,
                    'user_id' => '6',
                    'record_origin_id' => 'Dilicom-88817216',
                    'expected_return_date' => '2014-05-02 18:14:14',
                    'loan_link' => 'https://pnb-dilicom.centprod.com/v2//link/3025594195810/LOAN/WIKI001/9782021153057-NUMOIY0785CYO0IGCV83DE9DOAOC1Y1O.do']);

    $this->dispatch('/bib-numerique/loan-book/id/3', true);
  }


  /** @test */
  public function responseShouldReturnDownloadUrl() {
    $this->assertRedirectTo('https://pnb-dilicom.centprod.com/v2//link/3025594195810/LOAN/WIKI001/9782021153057-NUMOIY0785CYO0IGCV83DE9DOAOC1Y1O.do');
  }
Ghislain Loas's avatar
Ghislain Loas committed
}



abstract class BibNumeriqueContollerDilicomSecondUserTestCase extends BibNumeriqueContollerDilicomTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    $_SERVER['HTTP_REFERER'] = '/viewnotice/id/3';

    $second_user = $this->fixture('Class_Users',
                                  ['id' => 78,
                                   'nom'=>'Dily',
                                   'login'=>'Chaton',
                                   'password'=>'123456',
                                   'id_site' => 1,
                                   'idabon' => '654321',
                                   'user_groups' => [Class_UserGroup::find(20)]]);

    $second_user->beAbonneSIGB()->assertSave();
    ZendAfi_Auth::getInstance()->logUser($second_user);

    $this->_http
      ->whenCalled('open_url')
      ->never();
  }
Ghislain Loas's avatar
Ghislain Loas committed
}



class BibNumeriqueControllerDilicomLoanBookActionWithASecondUserAndLoanCountExcededTest extends BibNumeriqueContollerDilicomSecondUserTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    Class_Album_Item::find(1)->setLoanCount(40)->save();
    $this->dispatch('/bib-numerique/loan-book/id/3', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function responseShouldRedirectToReferer() {
    $this->assertRedirectTo('/recherche/viewnotice/id/3');
Patrick Barroca's avatar
Patrick Barroca committed
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function notificationShouldReturnNoLoansAvailable() {
    $this->assertFlashMessengerContentContains('Emprunt impossible. Le nombre d\'emprunts simultanés est atteint.');
  }
Laurent's avatar
Laurent committed

class BibNumeriqueControllerDilicomLoanBookActionWithASecondUserAndGlobalLoanCountExcededTest extends BibNumeriqueContollerDilicomSecondUserTestCase {
  public function setUp() {
    parent::setUp();

    Class_AdminVar::set('DILICOM_PNB_LOAN_COUNT_LIMIT', 3);
    Class_Album_Item::find(1)->setLoanCount(3)->save();
    $this->dispatch('/bib-numerique/loan-book/id/3', true);
  }


  /** @test */
  public function responseShouldRedirectToReferer() {
    $this->assertRedirectTo('/recherche/viewnotice/id/3');
  }


  /** @test */
  public function notificationShouldReturnNoLoansAvailable() {
    $this->assertFlashMessengerContentContains('Emprunt impossible. Le nombre d\'emprunts simultanés est atteint.');
  }
}




Laurent's avatar
Laurent committed
class BibNumeriqueControllerDilicomLoanBookActionUserLoanCountExceededTest extends BibNumeriqueContollerDilicomSecondUserTestCase {
  public function setUp() {
    parent::setUp();

Laurent's avatar
Laurent committed
    Class_AdminVar::set('DILICOM_PNB_MAX_LOAN_PER_USER', 3);
    foreach(range(1, 3) as $step)
      $this->fixture('Class_Loan_Pnb',
                     ['id' => $step,
                      'user_id' => Class_Users::getIdentity()->getId(),
                      'record_origin_id' => $step,
                      'expected_return_date' => '2022-06-01']);
Laurent's avatar
Laurent committed

    $this->dispatch('/bib-numerique/loan-book/id/3', true);
  }


  /** @test */
  public function responseShouldRedirectToReferer() {
    $this->assertRedirectTo('/recherche/viewnotice/id/3');
  }


  /** @test */
  public function notificationShouldReturnNoLoansAvailable() {
    $this->assertFlashMessengerContentContains('Emprunt impossible. Vous avez atteint votre quota de 3 emprunts.');
  }
}





class BibNumeriqueControllerDilicomLoanBookActionWithASecondUserAndQuantityExcededTest extends BibNumeriqueContollerDilicomSecondUserTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
    Class_Album_Item::find(1)->setQuantity(50)->save();
    $this->dispatch('/bib-numerique/loan-book/id/3', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function responseShouldRedirectToReferer() {
    $this->assertRedirectTo('/recherche/viewnotice/id/3');
Patrick Barroca's avatar
Patrick Barroca committed
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function notificationShouldContainsNoLoansAvailable() {
    $this->assertFlashMessengerContentContains('Emprunt impossible. Le nombre d\'emprunts disponible est épuisé.', $this->_getFlashMessengerMessages()[0]);
  }



class BibNumeriqueControllerDilicomLoanBookActionWithASecondUserAndOfferValidityExcededTest extends BibNumeriqueContollerDilicomSecondUserTestCase {
Patrick Barroca's avatar
Patrick Barroca committed
  public function setUp() {
    parent::setUp();
Patrick Barroca's avatar
Patrick Barroca committed
    $this->_time_source = new TimeSourceForTest('2018-05-02 14:14:14');
    Class_WebService_BibNumerique_Dilicom_Hub::setTimeSource($this->_time_source);
    Class_Album_UsageConstraint::setTimeSource($this->_time_source);
Patrick Barroca's avatar
Patrick Barroca committed
    $this->dispatch('/bib-numerique/loan-book/id/3', true);
  }
Patrick Barroca's avatar
Patrick Barroca committed
  /** @test */
  public function notificationShouldContainsErrorMessage() {
    $this->assertFlashMessengerContentContains('Emprunt impossible. L\'emprunt du document n\'est plus disponible.', $this->_getFlashMessengerMessages()[0]);
  }