changeset 214:7d838e7d83b3

Se soluciona ticket 176. Se agrega validación para que no se pueda agendar otro evento con el mismo título, buscando los eventos que no estén en estado propuesto.
author alabra
date Wed, 24 Aug 2011 19:49:18 -0300
parents a36a76bd6ec3
children 8a8c35302b81
files Agendas/trunk/src/Agendas.Domain/Agenda.cs Agendas/trunk/src/Agendas.Domain/Repositories/IEventoRepository.cs Agendas/trunk/src/Agendas.Repositories.Memory/EventoRepository.cs Agendas/trunk/src/Agendas.Repositories.NHibernate/EventoRepository.cs Agendas/trunk/src/Agendas.Tests/AgendarTests.cs
diffstat 5 files changed, 44 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Wed Aug 24 19:27:30 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Wed Aug 24 19:49:18 2011 -0300
@@ -103,6 +103,13 @@
             if (persona == null)
                 return new EventoResultado(false, string.Format("No se encontró el ponente indicado ({0})", ponenteId), null);
 
+		    var existeOtroEvento = _eventosRepository.GetNoPropuestoByTitulo(titulo);
+            if (existeOtroEvento != null)
+                return new EventoResultado(false,
+                                           string.Format(
+                                               "Ya existe un evento con el mismo título ({0}) del {1}, por favor ingrese otro.",
+                                               titulo, existeOtroEvento.FechaInicio.Value.ToShortDateString()), null);
+
             Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo);
 
 			foreach (var e in _eventosRepository.GetActivos())
--- a/Agendas/trunk/src/Agendas.Domain/Repositories/IEventoRepository.cs	Wed Aug 24 19:27:30 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Repositories/IEventoRepository.cs	Wed Aug 24 19:49:18 2011 -0300
@@ -10,6 +10,7 @@
 		IList<Evento> GetByState(EventoState state);
 		IList<Evento> GetActivos();
 		Evento GetPropuestaByTitulo(string titulo);
+	    Evento GetNoPropuestoByTitulo(string titulo);
 		void Save(Evento evento);
 		void Update(Evento evento);
 	    bool ExistePonente(Persona ponente);
--- a/Agendas/trunk/src/Agendas.Repositories.Memory/EventoRepository.cs	Wed Aug 24 19:27:30 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Repositories.Memory/EventoRepository.cs	Wed Aug 24 19:49:18 2011 -0300
@@ -36,7 +36,12 @@
 			return Objects.Values.SingleOrDefault(e => e.Estado == EventoPropuestoState.GetInstance() && e.Titulo == titulo);
 		}
 
-		public static void Clear()
+	    public Evento GetNoPropuestoByTitulo(string titulo)
+	    {
+	        return Objects.Values.SingleOrDefault(e => e.Titulo == titulo && e.Estado != EventoPropuestoState.GetInstance());
+	    }
+
+	    public static void Clear()
 		{
 			Objects.Clear();
 		}
--- a/Agendas/trunk/src/Agendas.Repositories.NHibernate/EventoRepository.cs	Wed Aug 24 19:27:30 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Repositories.NHibernate/EventoRepository.cs	Wed Aug 24 19:49:18 2011 -0300
@@ -35,7 +35,14 @@
 			return Session.QueryOver<Evento>().Where(e => e.Estado == EventoPropuestoState.GetInstance() && e.Titulo==titulo).SingleOrDefault();
 		}
 
-		public void Update(Evento evento)
+	    public Evento GetNoPropuestoByTitulo(string titulo)
+	    {
+	        return
+	            Session.QueryOver<Evento>().Where(e => e.Estado != EventoPropuestoState.GetInstance() && e.Titulo == titulo)
+	                .SingleOrDefault();
+	    }
+
+	    public void Update(Evento evento)
 		{
 			//No es necesario implementarlo
 		}
--- a/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs	Wed Aug 24 19:27:30 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs	Wed Aug 24 19:49:18 2011 -0300
@@ -541,5 +541,27 @@
 			Assert.IsNull(eventoPropuesto.FechaInicio);
 			Assert.IsNull(eventoPropuesto.FechaTermino);
 		}
+
+        [Test]
+        public void Verificar_que_no_sea_posible_crear_dos_van_diferentes_con_igual_titulo()
+        {
+            var publicador1 = new Mock<IPublicador>();
+            var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
+            var fechaInicio = new DateTime(2011, 8, 20, 18, 00, 00);
+            var fechaTermino = fechaInicio.AddHours(2);
+
+            var r = agenda.Agendar("Conceptos de HTTP y Fiddler web debugger", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio,
+                           fechaTermino, string.Empty, TipoEvento.Van);
+            Assert.IsTrue(r.Succeful);
+
+            fechaInicio = new DateTime(2011, 8, 27, 05, 00, 00);
+            fechaTermino = fechaInicio.AddHours(2);
+            r = agenda.Agendar("Conceptos de HTTP y Fiddler web debugger",
+                           TestsHelper.GetOrCreatePonente("alabra"),
+                           fechaInicio,
+                           fechaTermino, string.Empty, TipoEvento.Van);
+            
+            Assert.IsFalse(r.Succeful);
+        }
 	}
 }
\ No newline at end of file