# HG changeset patch # User nelopauselli # Date 1312817437 10800 # Node ID 33e57fd1a6c925df531738989935fc26e0af5b03 # Parent 784d81e32366a80656e5f7bd1190179233c44ab3 Roles: en dominio y autoregistración diff -r 784d81e32366 -r 33e57fd1a6c9 Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj --- 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 @@ + diff -r 784d81e32366 -r 33e57fd1a6c9 Agendas/trunk/src/Agendas.Domain/Persona.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(); + Roles = new List(); } public virtual string Nombre { get; set; } @@ -33,6 +34,8 @@ public virtual string Blog { get; set; } + public virtual IList Roles { get; set; } + public virtual IEnumerable Cuentas { get { return _cuentas; } diff -r 784d81e32366 -r 33e57fd1a6c9 Agendas/trunk/src/Agendas.Domain/Rol.cs --- /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 diff -r 784d81e32366 -r 33e57fd1a6c9 Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs --- 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); } diff -r 784d81e32366 -r 33e57fd1a6c9 Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj --- 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 @@ + + + + diff -r 784d81e32366 -r 33e57fd1a6c9 Agendas/trunk/src/Agendas.Tests/Cruds/IPersonaCrudTest.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 diff -r 784d81e32366 -r 33e57fd1a6c9 Agendas/trunk/src/Agendas.Tests/Cruds/PersonaCrud.cs --- /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 _requestEmulator; + private readonly PersonaService _personaService; + + public PersonaCrud(Func createpersonaRepository, Func 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 diff -r 784d81e32366 -r 33e57fd1a6c9 Agendas/trunk/src/Agendas.Tests/Cruds/PersonaCrudMemoryTests.cs --- /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(); + seguridad.Setup(s => s.GetUserName()).Returns("neluz"); + IdentityContext.Init(seguridad.Object, new PersonaRepository()); + } + + [SetUp] + public void CreateCrud() + { + _test = new PersonaCrud(() => new PersonaRepository(), () => new Mock().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 diff -r 784d81e32366 -r 33e57fd1a6c9 Agendas/trunk/src/Agendas.Tests/Cruds/PersonaCrudNhTests.cs --- /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(); + 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