# HG changeset patch # User Nelo@Guinea.neluz.int # Date 1312202489 10800 # Node ID 2dbb15f4510fe22ca802fc0573e6d78e63e3f5bb # Parent 62dc9fb3a03e418ce8887490ebcf9629b802e11a Asociar Twitter a Persona existente diff -r 62dc9fb3a03e -r 2dbb15f4510f Agendas/trunk/src/Agendas.Domain/Repositories/IPersonaRepository.cs --- a/Agendas/trunk/src/Agendas.Domain/Repositories/IPersonaRepository.cs Mon Aug 01 00:28:04 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Repositories/IPersonaRepository.cs Mon Aug 01 09:41:29 2011 -0300 @@ -8,5 +8,6 @@ Persona GetByNombre(string ponenteNombre); void Save(Persona persona); Cuenta GetCuenta(IdentityProviderEnum identityProvider, string username); + Persona GetByTwitter(string username); } } \ No newline at end of file diff -r 62dc9fb3a03e -r 2dbb15f4510f Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs --- a/Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs Mon Aug 01 00:28:04 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs Mon Aug 01 09:41:29 2011 -0300 @@ -1,5 +1,4 @@ -using System; -using System.Linq; +using System.Linq; using AltNetHispano.Agendas.Domain.Repositories; namespace AltNetHispano.Agendas.Domain.Services @@ -22,17 +21,23 @@ public bool CreateIfNotExist(IdentityProviderEnum identityProvider, string username, string nombre) { var cuenta = _personaRepository.GetCuenta(identityProvider, username); - if (cuenta==null) - { - var persona = IdentityContext.IsAuthenticated() ? IdentityContext.GetUsuario() : new Persona(nombre); - persona.AddCuenta(new Cuenta(identityProvider, username)); + if (cuenta == null) + { + Persona persona = null; + if (identityProvider == IdentityProviderEnum.Twitter) + persona = _personaRepository.GetByTwitter(username); + + if(persona==null) + persona = IdentityContext.IsAuthenticated() ? IdentityContext.GetUsuario() : new Persona(nombre); - if (identityProvider == IdentityProviderEnum.Twitter) - persona.Twitter = username; + persona.AddCuenta(new Cuenta(identityProvider, username)); - _personaRepository.Save(persona); - } - return true; + if (identityProvider == IdentityProviderEnum.Twitter) + persona.Twitter = username; + + _personaRepository.Save(persona); + } + return true; } public void AddCuenta(IdentityProviderEnum identityProvider, string username) diff -r 62dc9fb3a03e -r 2dbb15f4510f Agendas/trunk/src/Agendas.NHibernate/NhHelper.cs --- a/Agendas/trunk/src/Agendas.NHibernate/NhHelper.cs Mon Aug 01 00:28:04 2011 -0300 +++ b/Agendas/trunk/src/Agendas.NHibernate/NhHelper.cs Mon Aug 01 09:41:29 2011 -0300 @@ -1,14 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Data; -using AltNetHispano.Agendas.Domain; +using AltNetHispano.Agendas.Domain; using ConfOrm; using ConfOrm.NH; using NHibernate; using NHibernate.Cfg; using NHibernate.Tool.hbm2ddl; -using NHibernate.Type; -using NHibernate.UserTypes; namespace Agendas.NHibernate { @@ -39,6 +34,9 @@ var mapper = new Mapper(orm); + mapper.Customize(a => a.Property(p => p.Nombre, m => m.Unique(true))); + mapper.Customize(a => a.Property(p => p.Twitter, m => m.Unique(true))); + mapper.AddPropertyPattern(p => p.DeclaringType == typeof(Evento) && p.Name == "Estado", a => a.Type()); var mapping = mapper.CompileMappingFor(typeof(Evento).Assembly.GetTypes()); diff -r 62dc9fb3a03e -r 2dbb15f4510f Agendas/trunk/src/Agendas.Repositories.Memory/PonenteRepository.cs --- a/Agendas/trunk/src/Agendas.Repositories.Memory/PonenteRepository.cs Mon Aug 01 00:28:04 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Repositories.Memory/PonenteRepository.cs Mon Aug 01 09:41:29 2011 -0300 @@ -21,7 +21,12 @@ return cuentas.Where(c => c != null).SingleOrDefault(); } - public IList GetAll() + public Persona GetByTwitter(string username) + { + return Objects.Values.SingleOrDefault(p => p.Twitter == username); + } + + public IList GetAll() { return Objects.Values.ToList(); } diff -r 62dc9fb3a03e -r 2dbb15f4510f Agendas/trunk/src/Agendas.Repositories.NHibernate/PonenteRepository.cs --- a/Agendas/trunk/src/Agendas.Repositories.NHibernate/PonenteRepository.cs Mon Aug 01 00:28:04 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Repositories.NHibernate/PonenteRepository.cs Mon Aug 01 09:41:29 2011 -0300 @@ -28,5 +28,10 @@ Session.QueryOver().Where(c => c.IdentityProvider == identityProvider && c.LogonName == username). SingleOrDefault(); } + + public Persona GetByTwitter(string username) + { + return Session.QueryOver().Where(p => p.Twitter == username).SingleOrDefault(); + } } } \ No newline at end of file diff -r 62dc9fb3a03e -r 2dbb15f4510f Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs --- a/Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs Mon Aug 01 00:28:04 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs Mon Aug 01 09:41:29 2011 -0300 @@ -24,10 +24,10 @@ { using (_requestEmulator.Invoke()) { - var ponente = new Persona("Carlos Blé"); + var ponente = new Persona("Carlos Blé") {Twitter = "carlosble"}; _personaRepository.Save(ponente); - var usuario = new Persona("Nelo"); + var usuario = new Persona("Nelo") {Twitter = "nelopauselli"}; _personaRepository.Save(usuario); var evento = Evento.Proponer("TDD - Diseño Basado en Ejemplos", ponente, string.Empty, TipoEvento.Van); diff -r 62dc9fb3a03e -r 2dbb15f4510f Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs --- a/Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs Mon Aug 01 00:28:04 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs Mon Aug 01 09:41:29 2011 -0300 @@ -36,6 +36,30 @@ Assert.AreEqual(1, persona.Cuentas.Count()); } + [Test] + public void Asociar_persona_existente_por_twitter() + { + var personaRepository = DefaultPersonaRepository; + + personaRepository.Save(new Persona("Mariano Pauselli", "marianopauselli@gmail.com", "marianopauselli", "http://marianopauselli.blogspot.com")); + var personaService = new PersonaService(personaRepository); + + Assert.IsTrue(personaService.CreateIfNotExist(IdentityProviderEnum.Twitter, "marianopauselli", "Mariano Pauselli")); + + var persona = personaRepository.GetByNombre("Mariano Pauselli"); + Assert.IsNotNull(persona); + Assert.AreEqual(1, persona.Cuentas.Count()); + Assert.AreEqual("marianopauselli", persona.Twitter); + + Cuenta cuenta = persona.Cuentas.First(); + Assert.AreEqual(IdentityProviderEnum.Twitter, cuenta.IdentityProvider); + Assert.AreEqual("marianopauselli", cuenta.LogonName); + + Assert.AreEqual(1, persona.Cuentas.Count()); + Assert.IsTrue(personaService.CreateIfNotExist(IdentityProviderEnum.Twitter, "marianopauselli", "Mariano Pauselli")); + Assert.AreEqual(1, persona.Cuentas.Count()); + } + [Test] public void IdentificacionGoogle() {