From 5ae961f83b8528fd9b7dd5cbe32d3e03fd0f0e53 Mon Sep 17 00:00:00 2001
From: llaffont <llaffont@git-test.afi-sa.fr>
Date: Mon, 20 Aug 2012 16:59:55 +0000
Subject: [PATCH] =?UTF-8?q?Ajout=20v=C3=A9rification=20d=C3=A9roulement=20?=
 =?UTF-8?q?workflow?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../opac/controllers/AbonneController.php     | 17 ++++++-
 categories.org                                |  8 ++--
 .../AbonneControllerMultimediaTest.php        | 47 +++++++++++++++++++
 3 files changed, 67 insertions(+), 5 deletions(-)

diff --git a/application/modules/opac/controllers/AbonneController.php b/application/modules/opac/controllers/AbonneController.php
index c33fe5677e3..07c9ac49f72 100644
--- a/application/modules/opac/controllers/AbonneController.php
+++ b/application/modules/opac/controllers/AbonneController.php
@@ -602,7 +602,21 @@ class AbonneController extends Zend_Controller_Action {
 	public function multimediaHoldGroupAction() {
 		$bean = $this->_getDeviceHoldBean();
 		$namespace = $this->_getSessionNamespace();
-		$location = Class_Multimedia_Location::find((int)$bean->location);
+
+		if (null == ($location = Class_Multimedia_Location::getLoader()->find((int)$bean->location))) {
+			$this->_redirect('/abonne/multimedia-hold-location');
+			return;
+		}
+
+		if ('' == $bean->day) {
+			$this->_redirect('/abonne/multimedia-hold-day');
+			return;
+		}
+
+		if ('' == $bean->time || 0 == $bean->duration) {
+			$this->_redirect('/abonne/multimedia-hold-hours');
+			return;
+		}
 
 		if ($this->_getParam('group')) {
 			$bean->group = $this->_getParam('group');
@@ -610,7 +624,6 @@ class AbonneController extends Zend_Controller_Action {
 			return;
 		}
 
-
 		$this->view->groups = $location->getGroups();
 		$this->view->timelineActions = $this->_getTimelineActions('group');
 	}
diff --git a/categories.org b/categories.org
index cf69259ed37..ca1488e7bd5 100644
--- a/categories.org
+++ b/categories.org
@@ -29,7 +29,7 @@ cf [[file:application/modules/opac/controllers/AbonneController.php::and%20null%
 [[file:library/Class/Multimedia/Device.php::public%20function%20autoHoldByUser($user,%20$current_hold)%20{][Device autoHoldByUser]]
 [[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::class%20AbonneControllerMultimediaAuthenticateLaurentTest%20extends%20AbonneControllerMultimediaAuthenticateValidTestCase%20{][Tests autoHold]] - [[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::protected%20function%20_prepareLocationInSession()%20{][TestCase de base]]
 *** TODO Ajouter la vérification du quota (factoriser avec [[file:application/modules/opac/controllers/AbonneController.php::/*%20V%C3%A9rification%20du%20quota%20sur%20le%20jour%20choisi%20*/][ce qui est fait dans AbonneController]] (en fait déjà dans [[file:library/Class/Users.php::public%20function%20getMultimediaQuotaErrorForDay($day)%20{][Users::getMultimediaQuotaErrorForDay]]
-** Réservation d'un poste [1/3]
+** Réservation d'un poste [2/3]
 	 [[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::abstract%20class%20AbonneControllerMultimediaAuthenticateTestCase%20extends%20AbstractControllerTestCase%20{][Test controller Abonne]]
 *** [[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::class%20AbonneControllerMultimediaHoldLocationTest%20extends%20AbonneControllerMultimediaHoldTestCase%20{][1er écran choix du lieu]]
 *** TODO [[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::class%20AbonneControllerMultimediaHoldDayTest%20extends%20AbonneControllerMultimediaHoldTestCase%20{][2nd écran choix du jour]] - [[file:application/modules/opac/controllers/AbonneController.php::public%20function%20multimediaHoldDayAction()%20{][action controller]] [1/2]
@@ -43,8 +43,10 @@ cf [[file:application/modules/opac/controllers/AbonneController.php::and%20null%
 		 CLOSED: [2012-08-09 Thu 18:55]
 
 
-*** TODO [[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::class%20AbonneControllerMultimediaHoldDeviceTest%20extends%20AbonneControllerMultimediaHoldTestCase%20{][4ème écran choix du poste]] [0/1]
-**** TODO Rajouter un écran choix de groupe + schuffle des postes que pour un groupe donné [[file:library/Class/Multimedia/Location.php::public%20function%20getHoldableDevicesForDateTimeAndDuration($date,%20$time,%20$duration)%20{][Recherche des postes pour horaire donné]]
+*** DONE [[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::class%20AbonneControllerMultimediaHoldDeviceTest%20extends%20AbonneControllerMultimediaHoldTestCase%20{][4ème écran choix du poste]] [1/1]
+		 CLOSED: [2012-08-20 Mon 17:39]
+**** DONE Rajouter un écran choix de groupe + schuffle des postes que pour un groupe donné [[file:library/Class/Multimedia/Location.php::public%20function%20getHoldableDevicesForDateTimeAndDuration($date,%20$time,%20$duration)%20{][Recherche des postes pour horaire donné]]
+		 CLOSED: [2012-08-20 Mon 17:39]
 
 *** [[file:tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php::class%20AbonneControllerMultimediaHoldConfirmTest%20extends%20AbonneControllerMultimediaHoldTestCase%20{][5ème écran confirmation]]
 ** TODO Fiche abonné: afficher conso + temps restant par jour / semaine / mois
diff --git a/tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php b/tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php
index d5ca00dcc85..79eac507b6b 100644
--- a/tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php
+++ b/tests/application/modules/opac/controllers/AbonneControllerMultimediaTest.php
@@ -850,6 +850,38 @@ class AbonneControllerMultimediaHoldGroupChoiceTest extends AbonneControllerMult
 
 
 
+/* Quatrième écran validation du choix du groupe de postes, redirection vers le choix du poste */
+class AbonneControllerMultimediaHoldGroupChoiceErrorTest extends AbonneControllerMultimediaHoldTestCase {
+	/** @test */
+	public function withoutHoursShouldRedirectToHoldHours() {
+		$this->_prepareLocationInSession();
+		$this->_prepareDayInSession();
+		$this->dispatch('/abonne/multimedia-hold-group/group/5', true);
+		$this->assertRedirectTo('/abonne/multimedia-hold-hours');
+	}
+
+
+	/** @test */
+	public function withoutDayShouldRedirectToHoldDay() {
+		$this->_prepareLocationInSession();
+		$this->_prepareTimeAndDurationInSession();
+		$this->dispatch('/abonne/multimedia-hold-group/group/5', true);
+		$this->assertRedirectTo('/abonne/multimedia-hold-day');
+	}
+
+
+	/** @test */
+	public function withoutLocationShouldRedirectToHoldLocation() {
+		$this->_prepareDayInSession();
+		$this->_prepareTimeAndDurationInSession();
+		$this->dispatch('/abonne/multimedia-hold-group/group/5', true);
+		$this->assertRedirectTo('/abonne/multimedia-hold-location');
+	}
+}
+
+
+
+
 /* Cinquième écran choix du poste */
 class AbonneControllerMultimediaHoldDeviceTest extends AbonneControllerMultimediaHoldTestCase {
 	public function setUp() {
@@ -914,6 +946,21 @@ class AbonneControllerMultimediaHoldDeviceChoiceTest extends AbonneControllerMul
 
 
 
+class AbonneControllerMultimediaHoldDeviceChoiceErrorTest extends AbonneControllerMultimediaHoldTestCase {
+	/** @test */
+	public function withoutGroupShouldRedirectToHoldGroup() {
+		parent::setUp();
+		$this->_prepareLocationInSession();
+		$this->_prepareDayInSession();
+		$this->_prepareTimeAndDurationInSession();
+		$this->dispatch('/abonne/multimedia-hold-device/device/1', true);
+		$this->assertRedirectTo('/abonne/multimedia-hold-group');
+	}
+}
+
+
+
+
 /* Sixième écran confirmation de la réservation */
 class AbonneControllerMultimediaHoldConfirmTest extends AbonneControllerMultimediaHoldTestCase {
 	public function setUp() {
-- 
GitLab