# HG changeset patch # User nelopauselli # Date 1315491730 10800 # Node ID b9850b647a4ea39174afa4947e3d360907c698b0 # Parent cc1ed131c9e61e9d2ed03cb5c3ad2477780ca052 Agregando alta de ponente durante la carga del evento diff -r cc1ed131c9e6 -r b9850b647a4e Agendas/trunk/src/Agendas.Domain/Resultado.cs --- a/Agendas/trunk/src/Agendas.Domain/Resultado.cs Thu Sep 08 09:38:47 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Resultado.cs Thu Sep 08 11:22:10 2011 -0300 @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; namespace AltNetHispano.Agendas.Domain { @@ -14,6 +15,22 @@ public string Message { get; internal set; } } + public class ResultadoAdd : Resultado + { + public Guid Id { get; set; } + public string Nombre { get; set; } + + public ResultadoAdd(bool succeful, string message, Guid id, string nombre) : base(succeful, message) + { + Id = id; + Nombre = nombre; + } + + public ResultadoAdd(string message) : base(false, message) + { + } + } + public class EventoResultado : Resultado { public EventoResultado(bool succeful, string message, IEnumerable warnings) diff -r cc1ed131c9e6 -r b9850b647a4e Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs --- a/Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs Thu Sep 08 09:38:47 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs Thu Sep 08 11:22:10 2011 -0300 @@ -81,9 +81,17 @@ return _personaRepository.Get(id); } - public Resultado Add(string nombre, string twitter, string mail, string blog, IEnumerable roles) - { - var persona = new Persona(nombre) {Twitter = twitter, Mail = mail, Blog = blog}; + public ResultadoAdd Add(string nombre, string twitter, string mail, string blog, IEnumerable roles) + { + var persona = _personaRepository.GetByNombre(nombre); + if (persona!=null) + return new ResultadoAdd("Ya existe una persona con el nombre " + nombre); + + persona = _personaRepository.GetByTwitter(twitter); + if (persona != null) + return new ResultadoAdd("Ya existe una persona con el twitter " + twitter); + + persona = new Persona(nombre) {Twitter = twitter, Mail = mail, Blog = blog}; if (!string.IsNullOrWhiteSpace(twitter)) persona.AddCuenta(new Cuenta(IdentityProviderEnum.Twitter, twitter)); @@ -101,7 +109,7 @@ _personaRepository.Save(persona); - return new Resultado(true, "Persona Agregada"); + return new ResultadoAdd(true, "Persona Agregada", persona.Id, persona.Nombre); } public Resultado Update(Guid id, string nombre, string twitter, string mail, string blog, IEnumerable roles) diff -r cc1ed131c9e6 -r b9850b647a4e Agendas/trunk/src/Agendas.Tests/Cruds/PersonaCrud.cs --- a/Agendas/trunk/src/Agendas.Tests/Cruds/PersonaCrud.cs Thu Sep 08 09:38:47 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Cruds/PersonaCrud.cs Thu Sep 08 11:22:10 2011 -0300 @@ -24,15 +24,21 @@ public Guid CreateAdministrador() { + Guid id; using (_requestEmulator.Invoke()) { - _personaService.Add("Nelo Pauselli", "nelopauselli", "nelopauselli@gmail.com", "http://nelopauselli.blogspot.com", null); + var r = _personaService.Add("Nelo Pauselli", "nelopauselli", "nelopauselli@gmail.com", "http://nelopauselli.blogspot.com", null); + Assert.AreEqual("Nelo Pauselli", r.Nombre); + Assert.AreNotEqual(Guid.Empty, r.Id); + + id = r.Id; } using (_requestEmulator.Invoke()) { var persona = _personaRepository.GetByNombre("Nelo Pauselli"); Assert.IsNotNull(persona); + Assert.AreEqual(id, persona.Id); return persona.Id; } } diff -r cc1ed131c9e6 -r b9850b647a4e Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs --- a/Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs Thu Sep 08 09:38:47 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs Thu Sep 08 11:22:10 2011 -0300 @@ -37,6 +37,38 @@ Assert.AreEqual(1, persona.Cuentas.Count()); } + [Test] + public void Crear_persona_duplicada_por_nombre() + { + var personaRepository = new Mock(); + + var persona = new Persona("Nelo Pauselli"); + personaRepository.Setup(r => r.GetByNombre(It.IsAny())).Returns(persona); + var personaService = new PersonaService(personaRepository.Object, DefaultEventoRepository); + + var result = personaService.Add("Nelo Pauselli", "nelopauselli", "nelopauselli@gmail.com", null, null); + Assert.IsFalse(result.Succeful); + Assert.AreEqual("Ya existe una persona con el nombre Nelo Pauselli", result.Message); + + personaRepository.Verify(r => r.Save(It.IsAny()), Times.Never()); + } + + [Test] + public void Crear_persona_duplicada_por_twitter() + { + var personaRepository = new Mock(); + + var persona = new Persona("Nelo Pauselli"); + personaRepository.Setup(r => r.GetByTwitter(It.IsAny())).Returns(persona); + var personaService = new PersonaService(personaRepository.Object, DefaultEventoRepository); + + var result = personaService.Add("Nelo Pauselli", "nelopauselli", "nelopauselli@gmail.com", null, null); + Assert.IsFalse(result.Succeful); + Assert.AreEqual("Ya existe una persona con el twitter nelopauselli", result.Message); + + personaRepository.Verify(r => r.Save(It.IsAny()), Times.Never()); + } + [Test] public void Asociar_persona_existente_por_twitter() { diff -r cc1ed131c9e6 -r b9850b647a4e Agendas/trunk/src/Agendas.Web.Tests/AutorizationsTests.cs --- a/Agendas/trunk/src/Agendas.Web.Tests/AutorizationsTests.cs Thu Sep 08 09:38:47 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web.Tests/AutorizationsTests.cs Thu Sep 08 11:22:10 2011 -0300 @@ -93,7 +93,7 @@ "EventoController.Publicar", "EventoController.Modificar", "EventoController.Proponer", "EventoController.Cancelar", "EventoController.Descartar", "EventoController.ReAgendar", "EventoController.ReProponer", "PersonaController.Nueva", "PersonaController.Modificar", - "PersonaController.Quitar" + "PersonaController.Quitar", "PersonaApiController.Nueva" }; VerficarAccionesSeguras(acciones, Roles.Administrador, "debe ser de uso exclusivo de los administradores"); diff -r cc1ed131c9e6 -r b9850b647a4e Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj --- a/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Thu Sep 08 09:38:47 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Thu Sep 08 11:22:10 2011 -0300 @@ -68,6 +68,7 @@ + @@ -92,7 +93,9 @@ + + @@ -106,6 +109,7 @@ Always + Designer @@ -239,6 +243,9 @@ + + +