changeset 29:016b9b9b8d3a

Cuando se publica una van con el mismo titulo que una propuesta, se utiliza esta Ășltima promoviendola a evento publicado.
author nelo@MTEySS.neluz.int
date Wed, 16 Mar 2011 08:25:02 -0300
parents 18bb9fe40517
children 3e5b80e58b1d
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.Tests/PropuestasTests.cs
diffstat 4 files changed, 47 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Tue Mar 15 09:28:04 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Wed Mar 16 08:25:02 2011 -0300
@@ -26,20 +26,24 @@
         {
         	var ponente = GetPonente(ponenteNombre);
 
-            var evento = new Evento{Titulo=titulo, Ponente = ponente, Fecha = fecha};
+
+        	var evento = _eventosRepository.GetPropuestaByTitulo(titulo) ?? new Evento {Titulo = titulo};
+        	evento.Ponente = ponente;
+        	evento.Fecha = fecha;
+
 
-			if (!evento.Fecha.HasValue)
-				throw new ValidationException();
-            if (NoEstaAutenticado(_seguridad))
-                throw new UsuarioNoAutenticadoException();
-            if (string.IsNullOrWhiteSpace(evento.Ponente.Nombre))
-                throw new ValidationException();
+        	if (!evento.Fecha.HasValue)
+        		throw new ValidationException();
+        	if (NoEstaAutenticado(_seguridad))
+        		throw new UsuarioNoAutenticadoException();
+        	if (string.IsNullOrWhiteSpace(evento.Ponente.Nombre))
+        		throw new ValidationException();
 
-			if (_publicador != null)
-				_publicador.Publicar(evento);
-			_eventosRepository.Save(evento);
-			_ponenteRepository.Save(ponente);
-		}
+        	if (_publicador != null)
+        		_publicador.Publicar(evento);
+        	_eventosRepository.Save(evento);
+        	_ponenteRepository.Save(ponente);
+        }
 
 		public void Recordar(Guid eventoId)
 		{
--- a/Agendas/trunk/src/Agendas.Domain/Repositories/IEventoRepository.cs	Tue Mar 15 09:28:04 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Repositories/IEventoRepository.cs	Wed Mar 16 08:25:02 2011 -0300
@@ -11,6 +11,7 @@
         Evento Get(Guid vanId);
 		IList<Evento> GetEventosSinFecha();
 		IList<Evento> GetEventosConFecha();
+		Evento GetPropuestaByTitulo(string titulo);
 	}
 
 	public interface IPonenteRepository
--- a/Agendas/trunk/src/Agendas.Repositories.Memory/EventoRepository.cs	Tue Mar 15 09:28:04 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Repositories.Memory/EventoRepository.cs	Wed Mar 16 08:25:02 2011 -0300
@@ -43,6 +43,11 @@
 			return Objects.Values.Where(e => e.Fecha != null).ToList();
 		}
 
+		public Evento GetPropuestaByTitulo(string titulo)
+		{
+			return Objects.Values.SingleOrDefault(e => e.Fecha == null && e.Titulo == titulo);
+		}
+
 		public static void Clear()
 		{
 			Objects.Clear();
--- a/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs	Tue Mar 15 09:28:04 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs	Wed Mar 16 08:25:02 2011 -0300
@@ -94,5 +94,30 @@
 				Assert.Throws<ValidationException>(() => agenda.Publicar(van.Titulo, string.Empty, van.Fecha));
 			}
 		}
+
+		[Test]
+		public void Publicar_van_propuesta()
+		{
+			var agenda = new Agenda(null, null, SeguridadServiceDefault, DefaultEventoRepository, DefaultPonenteRepository);
+
+			agenda.Proponer("Van", null);
+			{
+				IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
+				IList<Evento> eventosPublicados = agenda.GetEventosPublicados();
+
+				Assert.AreEqual(1, eventosPropuestos.Count);
+				Assert.AreEqual(0, eventosPublicados.Count);
+			}
+			
+			agenda.Publicar("Van", "jjmontes", DateTime.Now);
+			{
+				IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
+				IList<Evento> eventosPublicados = agenda.GetEventosPublicados();
+
+				Assert.AreEqual(0, eventosPropuestos.Count);
+				Assert.AreEqual(1, eventosPublicados.Count);
+			}
+		}
+
 	}
 }
\ No newline at end of file