changeset 143:2dbb15f4510f

Asociar Twitter a Persona existente
author Nelo@Guinea.neluz.int
date Mon, 01 Aug 2011 09:41:29 -0300
parents 62dc9fb3a03e
children a2b14da4902f
files Agendas/trunk/src/Agendas.Domain/Repositories/IPersonaRepository.cs Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs Agendas/trunk/src/Agendas.NHibernate/NhHelper.cs Agendas/trunk/src/Agendas.Repositories.Memory/PonenteRepository.cs Agendas/trunk/src/Agendas.Repositories.NHibernate/PonenteRepository.cs Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs
diffstat 7 files changed, 58 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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)
--- 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<Persona>(a => a.Property(p => p.Nombre, m => m.Unique(true)));
+                mapper.Customize<Persona>(a => a.Property(p => p.Twitter, m => m.Unique(true)));
+
 				mapper.AddPropertyPattern(p => p.DeclaringType == typeof(Evento) && p.Name == "Estado", a => a.Type<EventoStateType>());
 
 				var mapping = mapper.CompileMappingFor(typeof(Evento).Assembly.GetTypes());
--- 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<Persona> GetAll()
+	    public Persona GetByTwitter(string username)
+	    {
+	        return Objects.Values.SingleOrDefault(p => p.Twitter == username);
+	    }
+
+	    public IList<Persona> GetAll()
 		{
 			return Objects.Values.ToList();
 		}
--- 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<Cuenta>().Where(c => c.IdentityProvider == identityProvider && c.LogonName == username).
 					SingleOrDefault();
 		}
+
+	    public Persona GetByTwitter(string username)
+	    {
+	        return Session.QueryOver<Persona>().Where(p => p.Twitter == username).SingleOrDefault();
+	    }
 	}
 }
\ No newline at end of file
--- 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);
--- 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()
 		{