changeset 178:33e57fd1a6c9

Roles: en dominio y autoregistración
author nelopauselli
date Mon, 08 Aug 2011 12:30:37 -0300
parents 784d81e32366
children 1deccd6c3cb2
files Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj Agendas/trunk/src/Agendas.Domain/Persona.cs Agendas/trunk/src/Agendas.Domain/Rol.cs Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj Agendas/trunk/src/Agendas.Tests/Cruds/IPersonaCrudTest.cs Agendas/trunk/src/Agendas.Tests/Cruds/PersonaCrud.cs Agendas/trunk/src/Agendas.Tests/Cruds/PersonaCrudMemoryTests.cs Agendas/trunk/src/Agendas.Tests/Cruds/PersonaCrudNhTests.cs
diffstat 9 files changed, 324 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj	Mon Aug 08 10:22:22 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj	Mon Aug 08 12:30:37 2011 -0300
@@ -70,6 +70,7 @@
     <Compile Include="Repositories\IPatrocinadorRepository.cs" />
     <Compile Include="Repositories\IPersonaRepository.cs" />
     <Compile Include="Resultado.cs" />
+    <Compile Include="Rol.cs" />
     <Compile Include="Services\PersonaService.cs" />
     <Compile Include="TipoEvento.cs" />
     <Compile Include="Track.cs" />
--- a/Agendas/trunk/src/Agendas.Domain/Persona.cs	Mon Aug 08 10:22:22 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Persona.cs	Mon Aug 08 12:30:37 2011 -0300
@@ -23,6 +23,7 @@
 		{
 			Nombre = nombre;
 			_cuentas = new List<Cuenta>();
+			Roles = new List<string>();
 		}
 
 		public virtual string Nombre { get; set; }
@@ -33,6 +34,8 @@
 
 		public virtual string Blog { get; set; }
 
+		public virtual IList<string> Roles { get; set; }
+
 		public virtual IEnumerable<Cuenta> Cuentas
 		{
 			get { return _cuentas; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Domain/Rol.cs	Mon Aug 08 12:30:37 2011 -0300
@@ -0,0 +1,8 @@
+namespace AltNetHispano.Agendas.Domain
+{
+	public static class Roles
+	{
+		public const string Administrador = "Administrador";
+		public const string Usuario = "Usuario";
+	}
+}
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs	Mon Aug 08 10:22:22 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs	Mon Aug 08 12:30:37 2011 -0300
@@ -31,11 +31,26 @@
                 if (identityProvider == IdentityProviderEnum.Twitter)
                     persona.Twitter = username;
 
+            	SetDefaultGroups(persona);
+
                 _personaRepository.Save(persona);
             }
 		    return true;
 		}
 
+		private static void SetDefaultGroups(Persona persona)
+		{
+			persona.Roles.Add(Roles.Usuario);
+
+#if DEBUG
+			var administradores = new[] {"nelopauselli", "alabras", "jjmoa", "jrowies"};
+#else
+			var administradores = new[] {"alabras", "jrowies", "jorgegamba"};
+#endif
+			if (administradores.Contains(persona.Twitter))
+				persona.Roles.Add(Roles.Administrador);
+		}
+
 		public void AddCuenta(IdentityProviderEnum identityProvider, string username)
 		{
 			var persona = IdentityContext.GetUsuario();
@@ -66,7 +81,13 @@
         public Resultado Add(string nombre, string twitter, string mail, string blog)
         {
             var persona = new Persona(nombre) {Twitter = twitter, Mail = mail, Blog = blog};
-            _personaRepository.Save(persona);
+
+			if (!string.IsNullOrWhiteSpace(twitter))
+				persona.AddCuenta(new Cuenta(IdentityProviderEnum.Twitter, twitter));
+
+			SetDefaultGroups(persona);
+
+			_personaRepository.Save(persona);
 
             return new Resultado(true);
         }
--- a/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj	Mon Aug 08 10:22:22 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj	Mon Aug 08 12:30:37 2011 -0300
@@ -76,9 +76,13 @@
     <Compile Include="Blog\PublicadorTests.cs" />
     <Compile Include="Cruds\EventoCrud.cs" />
     <Compile Include="Cruds\EventoCrudNhTests.cs" />
+    <Compile Include="Cruds\IPersonaCrudTest.cs" />
     <Compile Include="Cruds\PatrocinadorCrud.cs" />
     <Compile Include="Cruds\PatrocinadorCrudMemoryTests.cs" />
     <Compile Include="Cruds\PatrocinadorCrudNhTests.cs" />
+    <Compile Include="Cruds\PersonaCrud.cs" />
+    <Compile Include="Cruds\PersonaCrudMemoryTests.cs" />
+    <Compile Include="Cruds\PersonaCrudNhTests.cs" />
     <Compile Include="Cruds\RequestEmulator.cs" />
     <Compile Include="DateTimeFormattingTests.cs" />
     <Compile Include="EventoStateTests.cs" />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Tests/Cruds/IPersonaCrudTest.cs	Mon Aug 08 12:30:37 2011 -0300
@@ -0,0 +1,22 @@
+using NUnit.Framework;
+
+namespace AltNetHispano.Agendas.Tests.Cruds
+{
+	public interface IPersonaCrudTest
+	{
+		[Test]
+		void CreateAdministrador();
+
+		[Test]
+		void ReadAdministrador();
+
+		[Test]
+		void CreateUsuario();
+
+		[Test]
+		void ReadUsuario();
+
+		[Test]
+		void Update();
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Tests/Cruds/PersonaCrud.cs	Mon Aug 08 12:30:37 2011 -0300
@@ -0,0 +1,122 @@
+using System;
+using System.Linq;
+using AltNetHispano.Agendas.Domain;
+using AltNetHispano.Agendas.Domain.Repositories;
+using AltNetHispano.Agendas.Domain.Services;
+using NUnit.Framework;
+
+namespace AltNetHispano.Agendas.Tests.Cruds
+{
+	public class PersonaCrud
+	{
+		private readonly IPersonaRepository _personaRepository;
+		private readonly Func<IDisposable> _requestEmulator;
+		private readonly PersonaService _personaService;
+
+		public PersonaCrud(Func<IPersonaRepository> createpersonaRepository, Func<IDisposable> requestEmulator)
+		{
+			_personaRepository = createpersonaRepository.Invoke();
+			_personaService = new PersonaService(_personaRepository);
+			_requestEmulator = requestEmulator;
+		}
+
+		public Guid CreateAdministrador()
+		{
+			using (_requestEmulator.Invoke())
+			{
+				_personaService.Add("Nelo Pauselli", "nelopauselli", "nelopauselli@gmail.com", "http://nelopauselli.blogspot.com");
+			}
+
+			using (_requestEmulator.Invoke())
+			{
+				var persona = _personaRepository.GetByNombre("Nelo Pauselli");
+				Assert.IsNotNull(persona);
+				return persona.Id;
+			}
+		}
+
+		public void ReadAdministrador()
+		{
+			Guid personaId = CreateAdministrador();
+
+			using (_requestEmulator.Invoke())
+			{
+				var persona = _personaRepository.Get(personaId);
+
+				Assert.IsNotNull(persona);
+				Assert.AreEqual("Nelo Pauselli", persona.Nombre);
+				Assert.AreEqual("nelopauselli", persona.Twitter);
+				Assert.AreEqual("nelopauselli@gmail.com", persona.Mail);
+				Assert.AreEqual("http://nelopauselli.blogspot.com", persona.Blog);
+
+				Assert.IsTrue(persona.Cuentas.Any());
+				Assert.AreEqual("nelopauselli", persona.Cuentas.First().LogonName);
+				Assert.AreEqual(IdentityProviderEnum.Twitter, persona.Cuentas.First().IdentityProvider);
+
+				Assert.IsTrue(persona.Roles.Any());
+				Assert.IsTrue(persona.Roles.Contains(Roles.Usuario));
+				Assert.IsTrue(persona.Roles.Contains(Roles.Administrador));
+			}
+		}
+
+		public Guid CreateUsuario()
+		{
+			using (_requestEmulator.Invoke())
+			{
+				_personaService.Add("Pablo Morales", "pablomorales", "pablomorales@gmail.com", "http://pablomorales.blogspot.com");
+			}
+
+			using (_requestEmulator.Invoke())
+			{
+				var persona = _personaRepository.GetByNombre("Pablo Morales");
+				Assert.IsNotNull(persona);
+				return persona.Id;
+			}
+		}
+
+		public void ReadUsuario()
+		{
+			Guid personaId = CreateUsuario();
+
+			using (_requestEmulator.Invoke())
+			{
+				var persona = _personaRepository.Get(personaId);
+
+				Assert.IsNotNull(persona);
+				Assert.AreEqual("Pablo Morales", persona.Nombre);
+				Assert.AreEqual("pablomorales", persona.Twitter);
+				Assert.AreEqual("pablomorales@gmail.com", persona.Mail);
+				Assert.AreEqual("http://pablomorales.blogspot.com", persona.Blog);
+
+				Assert.IsTrue(persona.Cuentas.Any());
+				Assert.AreEqual("pablomorales", persona.Cuentas.First().LogonName);
+				Assert.AreEqual(IdentityProviderEnum.Twitter, persona.Cuentas.First().IdentityProvider);
+
+				Assert.IsTrue(persona.Roles.Any());
+				Assert.IsTrue(persona.Roles.Contains(Roles.Usuario));
+				Assert.IsFalse(persona.Roles.Contains(Roles.Administrador));
+			}
+		}
+
+		public void Update()
+		{
+			Guid personaId = CreateAdministrador();
+
+			using (_requestEmulator.Invoke())
+			{
+				var persona = _personaRepository.Get(personaId);
+				Assert.IsNotNull(persona);
+
+				persona.Nombre = "Nelo Mariano Pauselli";
+			}
+
+			using (_requestEmulator.Invoke())
+			{
+				var persona = _personaRepository.Get(personaId);
+
+				Assert.IsNotNull(persona);
+				Assert.AreEqual("Nelo Mariano Pauselli", persona.Nombre);
+			}
+		}
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Tests/Cruds/PersonaCrudMemoryTests.cs	Mon Aug 08 12:30:37 2011 -0300
@@ -0,0 +1,68 @@
+using System;
+using AltNetHispano.Agendas.Domain;
+using AltNetHispano.Agendas.Repositories.Memory;
+using Moq;
+using NUnit.Framework;
+
+namespace AltNetHispano.Agendas.Tests.Cruds
+{
+	[TestFixture]
+	public class PersonaCrudMemoryTests : IPersonaCrudTest
+	{
+		private PersonaCrud _test;
+
+		#region SetUp
+
+		[SetUp]
+		public void BorrarRepositorios()
+		{
+			PersonaRepository.Clear();
+		}
+
+		[SetUp]
+		public void SetearUsuario()
+		{
+			var seguridad = new Mock<ISeguridad>();
+			seguridad.Setup(s => s.GetUserName()).Returns("neluz");
+			IdentityContext.Init(seguridad.Object, new PersonaRepository());
+		}
+
+		[SetUp]
+		public void CreateCrud()
+		{
+			_test = new PersonaCrud(() => new PersonaRepository(), () => new Mock<IDisposable>().Object);
+		}
+
+		#endregion
+
+		[Test]
+		public void CreateAdministrador()
+		{
+			_test.CreateAdministrador();
+		}
+
+		[Test]
+		public void ReadAdministrador()
+		{
+			_test.ReadAdministrador();
+		}
+
+		[Test]
+		public void CreateUsuario()
+		{
+			_test.CreateUsuario();
+		}
+
+		[Test]
+		public void ReadUsuario()
+		{
+			_test.ReadUsuario();
+		}
+
+		[Test]
+		public void Update()
+		{
+			_test.Update();
+		}
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Tests/Cruds/PersonaCrudNhTests.cs	Mon Aug 08 12:30:37 2011 -0300
@@ -0,0 +1,74 @@
+using Agendas.NHibernate;
+using AltNetHispano.Agendas.Domain;
+using AltNetHispano.Agendas.Repositories.NHibernate;
+using Moq;
+using NHibernate;
+using NHibernate.Cfg;
+using NHibernate.Tool.hbm2ddl;
+using NUnit.Framework;
+
+namespace AltNetHispano.Agendas.Tests.Cruds
+{
+	[TestFixture]
+	public class PersonaCrudNhTests : IPersonaCrudTest
+	{
+		private PersonaCrud _test;
+
+		#region SetUp
+
+		[SetUp]
+		public void BorrarRepositorios()
+		{
+			Configuration cfg = NhHelper.GetConfiguration();
+			var schemaExport = new SchemaExport(cfg);
+			schemaExport.Create(false, true);
+		}
+
+		[SetUp]
+		public void SetearUsuario()
+		{
+			var seguridad = new Mock<ISeguridad>();
+			seguridad.Setup(s => s.GetUserName()).Returns("neluz");
+			IdentityContext.Init(seguridad.Object, new PersonaRepository(NhHelper.GetSessionFactory()));
+		}
+
+		[SetUp]
+		public void CreateCrud()
+		{
+			ISessionFactory sessionFactory = NhHelper.GetSessionFactory();
+			_test = new PersonaCrud(() => new PersonaRepository(sessionFactory), () => new RequestEmulator(sessionFactory));
+		}
+
+		#endregion
+
+		[Test]
+		public void CreateAdministrador()
+		{
+			_test.CreateAdministrador();
+		}
+
+		[Test]
+		public void ReadAdministrador()
+		{
+			_test.ReadAdministrador();
+		}
+
+		[Test]
+		public void CreateUsuario()
+		{
+			_test.CreateUsuario();
+		}
+
+		[Test]
+		public void ReadUsuario()
+		{
+			_test.ReadUsuario();
+		}
+
+		[Test]
+		public void Update()
+		{
+			_test.Update();
+		}
+	}
+}
\ No newline at end of file