Mercurial > altnet-hispano
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); }