# 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