diff --git a/application/modules/opac/controllers/AbonneController.php b/application/modules/opac/controllers/AbonneController.php index 49db64f93beb3adbe2a2bbfaa69933c2459f74be..e887b24b03a080dfe6d1b0a431fa0a2b3a2a3ccb 100644 --- a/application/modules/opac/controllers/AbonneController.php +++ b/application/modules/opac/controllers/AbonneController.php @@ -501,26 +501,22 @@ class AbonneController extends Zend_Controller_Action { $response->until = ''; $request = Class_Multimedia_AuthenticateRequest::newWithRequest($this->_request); - if (!$request->isValid()) { - $response->error = $request->getError(); - $this->_response->setBody(json_encode($response)); - return; - } - $user = $request->getUser(); - foreach (array('id', 'login', 'password', 'nom', 'prenom') as $attribute) { - $response->$attribute = $user->$attribute; - } + if ($user = $request->getUser()) { + foreach (array('id', 'login', 'password', 'nom', 'prenom') as $attribute) + $response->$attribute = $user->$attribute; - $response->groupes = $user->getUserGroupsLabels(); - $response->date_naissance = $user->getDateNaissanceIso8601(); + $response->groupes = $user->getUserGroupsLabels(); + $response->date_naissance = $user->getDateNaissanceIso8601(); + } - if (null != ($device = $request->getDevice()) - and null != ($hold = $device->getCurrentHoldForUser($user)) - ) { + if ($request->isValid()) { $response->auth = 1; - $response->until = date('c', $hold->getEnd()); - } + $response->until = date('c', $request->getCurrentHoldEnd()); + } else { + $response->error = $request->getError(); + } + $this->_response->setBody(json_encode($response)); } diff --git a/categories.org b/categories.org index 10c9168ede87dfaf52389a7ce09463bef39d9371..9305e8f95f154133f106065b303e6289ce749ee6 100644 --- a/categories.org +++ b/categories.org @@ -24,7 +24,7 @@ Rajouter erreurs: **** TODO réservation prévue sur une durée < slot: peux pas réserver, réservation prévue dans xx mn => Rajouter une durée minimale de réservation auto (par ex., si on réserve en plein milieu d'un slot et que le slot suivant déjà réservé, on peut ou pas utiliser le poste selon le temps restant avant ce prochain slot) **** TODO réservation auto. pas activée et aucune réservation pour l'utilisateur **** TODO c'est pas l'utilisateur qui a réservé (réservation en cours) -**** DONE poste/device non trouvé +**** DONE poste/device non trouvé (DeviceNotFound) CLOSED: [2012-08-10 Fri 11:28] ** Réservation d'un poste [1/3] [[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::abstract%20class%20AbonneControllerMultimediaAuthenticateTestCase%20extends%20AbstractControllerTestCase%20{][Test controller Abonne]] diff --git a/library/Class/Multimedia/AuthenticateRequest.php b/library/Class/Multimedia/AuthenticateRequest.php index 4d86d2ed1d32ef8f4979684245394cad61f6d867..5f5e28545d44276f36f2c3e7e15fbc74b0419d3a 100644 --- a/library/Class/Multimedia/AuthenticateRequest.php +++ b/library/Class/Multimedia/AuthenticateRequest.php @@ -71,8 +71,29 @@ class Class_Multimedia_AuthenticateRequest { if (!$this->_device) return $this->_error('DeviceNotFound'); + if (!$this->getCurrentHold()) + return $this->_error('DeviceNotHeldByUser'); + return $this->beValid(); } + + + /** + * @return Class_Multimedia_DeviceHold + */ + public function getCurrentHold() { + if (!isset($this->_current_hold) && isset($this->_device) && isset($this->_user)) + $this->_current_hold = $this->_device->getCurrentHoldForUser($this->_user); + return $this->_current_hold; + } + + + /** + * @return string + */ + public function getCurrentHoldEnd() { + return $this->getCurrentHold()->getEnd(); + } /** @return boolean */ diff --git a/tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php b/tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php index 51bd8eceb54d6dc0991f94010ceb21b0456887fc..ea1d154ffcb118112fa2e136ab93e32bc3afa50f 100644 --- a/tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php +++ b/tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php @@ -267,15 +267,60 @@ class AbonneControllerMultimediaAuthenticateLaurentTest extends AbonneController -class AbonneControllerMultimediaAuthenticateLaurentDeviceNotFoundTest extends AbonneControllerMultimediaAuthenticateValidTestCase { +class AbonneControllerMultimediaAuthenticateLaurentDeviceNotHeldByUserTest extends AbonneControllerMultimediaAuthenticateValidTestCase { use TAbonneControllerMultimediaFixtureWithUserLaurentInDevsAgiles; protected function _launch() { $this->onLoaderOfModel('Class_Multimedia_Location') ->whenCalled('findByIdOrigine') - ->answers(Class_Multimedia_Location::newInstanceWithId(1)); + ->answers($location = Class_Multimedia_Location::newInstanceWithId(1) + ->setAuthDelay(1) + ->setAutohold(1)); + + $this->onLoaderOfModel('Class_Multimedia_Device') + ->whenCalled('findByIdOrigineAndLocation') + ->answers(Class_Multimedia_Device::newInstanceWithId(1) + ->setGroup(Class_Multimedia_DeviceGroup::newInstanceWithId(34)->setLocation($location))); + $this->onLoaderOfModel('Class_Multimedia_DeviceHold') + ->whenCalled('getHoldOnDeviceAtTime') + ->answers(Class_Multimedia_DeviceHold::newInstanceWithId(333) + ->setIdUser(9878) + ->setStart(strtotime('2012-09-12 08:30:00')) + ->setEnd(strtotime('2012-09-12 16:40:00'))); + parent::_launch(); + } + + + /** @test */ + public function jsonShouldContainsErrorDeviceNotHeldByUser() { + $this->assertEquals('DeviceNotHeldByUser', $this->_json->error); + } + + + /** @test */ + public function loginShoudBelaurent() { + $this->assertEquals('laurent', $this->_json->login); + } + + + /** @test */ + public function authShouldBeZero() { + $this->assertEquals('0', $this->_json->auth); + } + +} + + + +class AbonneControllerMultimediaAuthenticateLaurentDeviceNotFoundTest extends AbonneControllerMultimediaAuthenticateValidTestCase { + use TAbonneControllerMultimediaFixtureWithUserLaurentInDevsAgiles; + protected function _launch() { + $this->onLoaderOfModel('Class_Multimedia_Location') + ->whenCalled('findByIdOrigine') + ->answers(Class_Multimedia_Location::newInstanceWithId(1)); + $this->onLoaderOfModel('Class_Multimedia_Device') ->whenCalled('findByIdOrigineAndLocation') ->answers(null); @@ -288,9 +333,14 @@ class AbonneControllerMultimediaAuthenticateLaurentDeviceNotFoundTest extends Ab public function jsonShouldContainsErrorDeviceNotFound() { $this->assertEquals('DeviceNotFound', $this->_json->error); } -} + /** @test */ + public function loginShoudBelaurent() { + $this->assertEquals('laurent', $this->_json->login); + } +} + class AbonneControllerMultimediaAuthenticateArnaudTest extends AbonneControllerMultimediaAuthenticateValidTestCase {