changeset 53:d149bfea3892

Tratamos las validaciones como resultados y no como excepciones, dejamos las excepciones solo para lo que no esperamos que suceda.
author nelopauselli
date Sat, 14 May 2011 12:45:50 -0300
parents 7b3a32bbdfa0
children 3059a5f8930f
files Agendas/trunk/src/Agendas.Domain/Agenda.cs Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj Agendas/trunk/src/Agendas.Domain/Exceptions/EventoNotFoundException.cs Agendas/trunk/src/Agendas.Domain/Exceptions/UsuarioNoAutenticadoException.cs Agendas/trunk/src/Agendas.Domain/Exceptions/ValidationException.cs Agendas/trunk/src/Agendas.Domain/Resultado.cs Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Agendas/trunk/src/Agendas.Tests/SeguridadObjectMother.cs Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Agendas/trunk/src/Agendas.Web/Controllers/PropuestaController.cs
diffstat 11 files changed, 74 insertions(+), 99 deletions(-) [+]
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Sat May 14 12:17:35 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Sat May 14 12:45:50 2011 -0300
@@ -20,23 +20,25 @@
 			_recordador = recordador;
 		}
 
-        public void Publicar(string titulo, string ponenteNombre, DateTime? fecha)
+        public Resultado Publicar(string titulo, string ponenteNombre, DateTime? fecha)
         {
         	var ponente = GetPonente(ponenteNombre);
 
         	var evento = _eventosRepository.GetPropuestaByTitulo(titulo) ?? new Evento (titulo);
             evento.Publicar(ponente, fecha);
 
-        	if (!evento.Fecha.HasValue)
-        		throw new ValidationException();
-        	if (string.IsNullOrWhiteSpace(evento.Ponente.Nombre))
-        		throw new ValidationException();
+			if (!evento.Fecha.HasValue)
+				return new Resultado(false);
+			if (string.IsNullOrWhiteSpace(evento.Ponente.Nombre))
+				return new Resultado(false);
 
         	if (_publicador != null)
         		_publicador.Publicar(evento);
 
         	_eventosRepository.Save(evento);
         	_ponenteRepository.Save(ponente);
+
+        	return new Resultado(true);
         }
 
 		public void Recordar(Guid eventoId)
@@ -46,16 +48,19 @@
 				_recordador.Recordar(evento);
 		}
 
-		public void Proponer(string titulo, string ponenteNombre)
+		public Resultado Proponer(string titulo, string ponenteNombre)
 		{
 			var ponente = GetPonente(ponenteNombre);
 			var evento = new Evento (titulo);
 		    evento.Actualizar(ponente);
 
 			if (string.IsNullOrWhiteSpace(evento.Titulo))
-				throw new ValidationException();
+				return new Resultado(false);
+
 			_eventosRepository.Save(evento);
 			_ponenteRepository.Save(ponente);
+
+			return new Resultado(true);
 		}
 
         public IList<Evento> GetEventosPropuestos()
@@ -68,11 +73,11 @@
             return _eventosRepository.GetEventosConFecha() ?? new List<Evento>();
         }
 
-		public void ModificarEvento(Guid id, string titulo, string ponenteNombre, DateTime? fecha)
+		public Resultado ModificarEvento(Guid id, string titulo, string ponenteNombre, DateTime? fecha)
 		{
 			var evento = _eventosRepository.Get(id);
 			if (evento == null)
-				throw new EventoNotFoundException();
+				throw new EventoNotFoundException(id);
 
 			var ponente = GetPonente(ponenteNombre);
 
@@ -84,6 +89,8 @@
 
 		    if (_publicador != null)
 				_publicador.Publicar(evento);
+
+			return new Resultado(true);
 		}
 
 		public Evento GetEvento(Guid id)
@@ -104,9 +111,9 @@
 		    return ponente;
 		}
 
-		public void ModificarPropuesta(Guid id, string titulo, string ponenteNombre)
+		public Resultado ModificarPropuesta(Guid id, string titulo, string ponenteNombre)
 		{
-			ModificarEvento(id, titulo, ponenteNombre, null);
+			return ModificarEvento(id, titulo, ponenteNombre, null);
 		}
 
 	    public void RealizarEvento(Guid eventoId, string sintesis)
@@ -116,12 +123,4 @@
                 evento.Realizado(sintesis);
 	    }
 	}
-
-	public class EventoNotFoundException : Exception
-	{
-	}
-
-	public class UsuarioNoAutenticadoException : Exception
-    {
-    }
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj	Sat May 14 12:17:35 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj	Sat May 14 12:45:50 2011 -0300
@@ -43,8 +43,9 @@
     <Compile Include="Agenda.cs" />
     <Compile Include="CompositePublicador.cs" />
     <Compile Include="Evento.cs" />
+    <Compile Include="Exceptions\EventoNotFoundException.cs" />
     <Compile Include="Exceptions\IdentityContextNotConfiguredException.cs" />
-    <Compile Include="Exceptions\ValidationException.cs" />
+    <Compile Include="Exceptions\UsuarioNoAutenticadoException.cs" />
     <Compile Include="IdentityContext.cs" />
     <Compile Include="IRecordador.cs" />
     <Compile Include="ISeguridad.cs" />
@@ -52,6 +53,7 @@
     <Compile Include="Repositories\IEventoRepository.cs" />
     <Compile Include="IPublicador.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Resultado.cs" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Domain/Exceptions/EventoNotFoundException.cs	Sat May 14 12:45:50 2011 -0300
@@ -0,0 +1,11 @@
+using System;
+
+namespace AltNetHispano.Agendas.Domain.Exceptions
+{
+	public class EventoNotFoundException : Exception
+	{
+		public EventoNotFoundException(Guid eventoId)
+			: base(string.Format("No es posible encontrar el evento con id: {0}", eventoId))
+		{ }
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Domain/Exceptions/UsuarioNoAutenticadoException.cs	Sat May 14 12:45:50 2011 -0300
@@ -0,0 +1,8 @@
+using System;
+
+namespace AltNetHispano.Agendas.Domain.Exceptions
+{
+	public class UsuarioNoAutenticadoException : Exception
+	{
+	}
+}
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/Exceptions/ValidationException.cs	Sat May 14 12:17:35 2011 -0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-using System;
-
-namespace AltNetHispano.Agendas.Domain.Exceptions
-{
-	public class ValidationException : Exception
-	{
-	}
-}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Domain/Resultado.cs	Sat May 14 12:45:50 2011 -0300
@@ -0,0 +1,12 @@
+namespace AltNetHispano.Agendas.Domain
+{
+	public class Resultado
+	{
+		public Resultado(bool succeful)
+		{
+			Succeful = succeful;
+		}
+
+		public bool Succeful { get; private set; }
+	}
+}
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj	Sat May 14 12:17:35 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj	Sat May 14 12:45:50 2011 -0300
@@ -51,7 +51,6 @@
     <Compile Include="EventoTests.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="PulicarTests.cs" />
-    <Compile Include="SeguridadObjectMother.cs" />
     <Compile Include="TestBase.cs" />
     <Compile Include="TrackTests.cs" />
   </ItemGroup>
--- a/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs	Sat May 14 12:17:35 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs	Sat May 14 12:45:50 2011 -0300
@@ -30,7 +30,8 @@
             var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository);
 
 			agenda.Proponer("Van propuesta", null);
-            agenda.Publicar("Van publicada", "jjmontes", DateTime.Now);
+            var r = agenda.Publicar("Van publicada", "jjmontes", DateTime.Now);
+			Assert.IsTrue(r.Succeful);
 
             IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
             IList<Evento> eventosPublicados = agenda.GetEventosPublicados();
@@ -46,7 +47,8 @@
 
             var agenda = new Agenda(null, null, repository.Object, DefaultPonenteRepository);
 
-			Assert.Throws<ValidationException>(() => agenda.Proponer(string.Empty, null));
+			var r = agenda.Proponer(string.Empty, null);
+			Assert.IsFalse(r.Succeful);
 
 			repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0));
 		}
@@ -63,7 +65,8 @@
 			{
 				var van = agenda.GetEventosPropuestos().FirstOrDefault();
 				Assert.IsNotNull(van);
-				Assert.Throws<ValidationException>(() => agenda.Publicar(van.Titulo, "Ponente", null));
+				var r = agenda.Publicar(van.Titulo, "Ponente", null);
+				Assert.IsFalse(r.Succeful);
 			}
 		}
 
@@ -81,7 +84,8 @@
 				Assert.IsNotNull(van);
 
 				van.Actualizar(null, DateTime.Today.AddDays(5));
-				Assert.Throws<ValidationException>(() => agenda.Publicar(van.Titulo, string.Empty, van.Fecha));
+				var r = agenda.Publicar(van.Titulo, string.Empty, van.Fecha);
+				Assert.IsFalse(r.Succeful);
 			}
 		}
 
@@ -109,7 +113,8 @@
                 Assert.AreEqual("otro ponente", evento.Ponente.Nombre);
 			}
 			
-			agenda.Publicar("Van 2", "jjmontes", DateTime.Now);
+			var r = agenda.Publicar("Van 2", "jjmontes", DateTime.Now);
+			Assert.IsTrue(r.Succeful);
 			{
 				IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
 				IList<Evento> eventosPublicados = agenda.GetEventosPublicados();
--- a/Agendas/trunk/src/Agendas.Tests/SeguridadObjectMother.cs	Sat May 14 12:17:35 2011 -0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-using System.Security.Principal;
-
-namespace AltNetHispano.Agendas.Tests
-{
-    public static class SeguridadObjectMother
-    {
-        public static GenericPrincipal GetGenericPrincipalAutenticadoSinRoles()
-        {
-            return new GenericPrincipal(GetGenericIdentityAutenticado(), null);
-        }
-
-        public static GenericPrincipal GetGenericPrincipalSinAutenticar()
-        {
-            return new GenericPrincipal(GetGenericIdentitySinAutenticar(), null);
-        }
-
-        public static GenericIdentity GetGenericIdentityAutenticado()
-        {
-            return new GenericIdentity("neluz");
-        }
-
-        public static GenericIdentity GetGenericIdentitySinAutenticar()
-        {
-            return new GenericIdentity("");
-        }
-
-        
-    }
-}
--- a/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs	Sat May 14 12:17:35 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs	Sat May 14 12:45:50 2011 -0300
@@ -36,16 +36,10 @@
             {
                 var agenda = AgendaFactory.GetAgenda();
 
-                try
-                {
-                    agenda.Publicar(model.Titulo, model.Ponente, model.Fecha);
-
+                var r = agenda.Publicar(model.Titulo, model.Ponente, model.Fecha);
+				if (r.Succeful)
 					return RedirectToAction("Index");
-                }
-                catch (ValidationException ex)
-                {
-                    ModelState.AddModelError("error", ex.ToString());
-                }
+                ModelState.AddModelError("error", r.ToString());
             }
             return View(model);
         }
@@ -78,16 +72,10 @@
 			{
 				var agenda = AgendaFactory.GetAgenda();
 
-				try
-				{
-					agenda.ModificarEvento(new Guid(model.Id), model.Titulo, model.Ponente, model.Fecha);
-
+				var r =agenda.ModificarEvento(new Guid(model.Id), model.Titulo, model.Ponente, model.Fecha);
+				if (r.Succeful)
 					return RedirectToAction("Index");
-				}
-				catch (ValidationException ex)
-				{
-					ModelState.AddModelError("error", ex.ToString());
-				}
+				ModelState.AddModelError("error", r.ToString());
 			}
 			return View(model);
 		}
--- a/Agendas/trunk/src/Agendas.Web/Controllers/PropuestaController.cs	Sat May 14 12:17:35 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Controllers/PropuestaController.cs	Sat May 14 12:45:50 2011 -0300
@@ -36,16 +36,10 @@
 			{
 				var agenda = AgendaFactory.GetAgenda();
 
-				try
-				{
-					agenda.Proponer(model.Titulo, model.Ponente);
-
+				var r = agenda.Proponer(model.Titulo, model.Ponente);
+				if (r.Succeful)
 					return RedirectToAction("Index");
-				}
-				catch (ValidationException ex)
-				{
-					ModelState.AddModelError("error", ex.ToString());
-				}
+				ModelState.AddModelError("error", r.ToString());
 			}
 			return View(model);
 		}
@@ -77,16 +71,10 @@
 			{
 				var agenda = AgendaFactory.GetAgenda();
 
-				try
-				{
-					agenda.ModificarPropuesta(new Guid(model.Id), model.Titulo, model.Ponente);
-
+				var r = agenda.ModificarPropuesta(new Guid(model.Id), model.Titulo, model.Ponente);
+				if (r.Succeful)
 					return RedirectToAction("Index");
-				}
-				catch (ValidationException ex)
-				{
-					ModelState.AddModelError("error", ex.ToString());
-				}
+				ModelState.AddModelError("error", r.ToString());
 			}
 			return View(model);
 		}