# HG changeset patch # User nelopauselli # Date 1305340145 10800 # Node ID 3ebe89c88caa18b651a67a4341f13c80309ffdf4 # Parent be7a9720fb96af1c93fb4cec9b3e7e30011865c4 Agregando propiedad al Evento sobre el Usuario que lo crea o que realizó la última modificación. diff -r be7a9720fb96 -r 3ebe89c88caa Agendas/trunk/src/Agendas.Domain/Agenda.cs --- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs Fri May 13 22:59:00 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs Fri May 13 23:29:05 2011 -0300 @@ -9,17 +9,15 @@ { private readonly IPublicador _publicador; private readonly IRecordador _recordador; - private readonly ISeguridad _seguridad; - private readonly IEventoRepository _eventosRepository; + private readonly IEventoRepository _eventosRepository; private readonly IPonenteRepository _ponenteRepository; - public Agenda(IPublicador publicador, IRecordador recordador, ISeguridad seguridad, IEventoRepository eventosRepository, IPonenteRepository ponenteRepository) + public Agenda(IPublicador publicador, IRecordador recordador, IEventoRepository eventosRepository, IPonenteRepository ponenteRepository) { _publicador = publicador; _ponenteRepository = ponenteRepository; _eventosRepository = eventosRepository; _recordador = recordador; - _seguridad = seguridad; } public void Publicar(string titulo, string ponenteNombre, DateTime? fecha) @@ -31,8 +29,6 @@ if (!evento.Fecha.HasValue) throw new ValidationException(); - if (NoEstaAutenticado(_seguridad)) - throw new UsuarioNoAutenticadoException(); if (string.IsNullOrWhiteSpace(evento.Ponente.Nombre)) throw new ValidationException(); @@ -58,8 +54,6 @@ if (string.IsNullOrWhiteSpace(evento.Titulo)) throw new ValidationException(); - if (NoEstaAutenticado(_seguridad)) - throw new UsuarioNoAutenticadoException(); _eventosRepository.Save(evento); _ponenteRepository.Save(ponente); } @@ -74,12 +68,6 @@ return _eventosRepository.GetEventosConFecha() ?? new List(); } - private static bool NoEstaAutenticado(ISeguridad seguridad) - { - return seguridad == null || seguridad.GetPrincipal() == null - || string.IsNullOrWhiteSpace(seguridad.GetPrincipal().Identity.Name); - } - public void ModificarEvento(Guid id, string titulo, string ponenteNombre, DateTime? fecha) { var evento = _eventosRepository.Get(id); diff -r be7a9720fb96 -r 3ebe89c88caa Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj --- a/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj Fri May 13 22:59:00 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj Fri May 13 23:29:05 2011 -0300 @@ -43,7 +43,9 @@ + + diff -r be7a9720fb96 -r 3ebe89c88caa Agendas/trunk/src/Agendas.Domain/Evento.cs --- a/Agendas/trunk/src/Agendas.Domain/Evento.cs Fri May 13 22:59:00 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs Fri May 13 23:29:05 2011 -0300 @@ -19,6 +19,7 @@ public DateTime? Fecha { get; private set; } public string Sintesis { get; private set; } public Ponente Ponente { get; private set; } + protected string Usuario { get; private set; } private IList _enlaces; @@ -35,6 +36,7 @@ public void Actualizar(Ponente ponente, DateTime? fecha) { + Usuario = IdentityContext.GetUserName(); Ponente = ponente; Fecha = fecha; @@ -43,18 +45,21 @@ public void Actualizar(Ponente ponente) { - Ponente = ponente; + Usuario = IdentityContext.GetUserName(); + Ponente = ponente; } public void CambiarTitulo(string titulo) { - Titulo = titulo; + Usuario = IdentityContext.GetUserName(); + Titulo = titulo; AddTracks(new Track(Accion.CambiarTitulo)); } public void Realizado(DateTime fecha, string sintesis, IList enlaces) { - Fecha = fecha; + Usuario = IdentityContext.GetUserName(); + Fecha = fecha; Sintesis = sintesis; _enlaces = enlaces; } @@ -66,12 +71,14 @@ public void Realizado(string sintesis) { - Sintesis = sintesis; + Usuario = IdentityContext.GetUserName(); + Sintesis = sintesis; AddTracks(new Track(Accion.Realizar)); } public void Publicar(Ponente ponente, DateTime? fecha) { + Usuario = IdentityContext.GetUserName(); Ponente = ponente; Fecha = fecha; AddTracks(new Track(Accion.Publicar)); diff -r be7a9720fb96 -r 3ebe89c88caa Agendas/trunk/src/Agendas.Domain/Exceptions/IdentityContextNotConfiguredException.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Domain/Exceptions/IdentityContextNotConfiguredException.cs Fri May 13 23:29:05 2011 -0300 @@ -0,0 +1,8 @@ +using System; + +namespace AltNetHispano.Agendas.Domain.Exceptions +{ + public class IdentityContextNotConfiguredException : Exception + { + } +} \ No newline at end of file diff -r be7a9720fb96 -r 3ebe89c88caa Agendas/trunk/src/Agendas.Domain/ISeguridad.cs --- a/Agendas/trunk/src/Agendas.Domain/ISeguridad.cs Fri May 13 22:59:00 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/ISeguridad.cs Fri May 13 23:29:05 2011 -0300 @@ -1,8 +1,7 @@ -using System.Security.Principal; -namespace AltNetHispano.Agendas.Domain +namespace AltNetHispano.Agendas.Domain { public interface ISeguridad { - IPrincipal GetPrincipal(); + string GetUserName(); } } diff -r be7a9720fb96 -r 3ebe89c88caa Agendas/trunk/src/Agendas.Domain/IdentityContext.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Domain/IdentityContext.cs Fri May 13 23:29:05 2011 -0300 @@ -0,0 +1,29 @@ +using AltNetHispano.Agendas.Domain.Exceptions; + +namespace AltNetHispano.Agendas.Domain +{ + public class IdentityContext + { + private static ISeguridad _current; + + public static ISeguridad Current + { + private get { + if (_current == null) + throw new IdentityContextNotConfiguredException(); + return _current; + } + set { + _current = value; + } + } + + public static string GetUserName() + { + var username = Current.GetUserName(); + if (string.IsNullOrWhiteSpace(username)) + throw new UsuarioNoAutenticadoException(); + return username; + } + } +} \ No newline at end of file diff -r be7a9720fb96 -r 3ebe89c88caa Agendas/trunk/src/Agendas.Factories/AgendaFactory.cs --- a/Agendas/trunk/src/Agendas.Factories/AgendaFactory.cs Fri May 13 22:59:00 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Factories/AgendaFactory.cs Fri May 13 23:29:05 2011 -0300 @@ -6,19 +6,10 @@ public static class AgendaFactory { private static Agenda _agenda; - private static ISeguridad _seguridad; - public static Agenda GetAgenda() + public static Agenda GetAgenda() { - if (_agenda==null) - _agenda = new Agenda(null, null, _seguridad, new EventoRepository(), new PonenteRepository()); - - return _agenda; + return _agenda ?? (_agenda = new Agenda(null, null, new EventoRepository(), new PonenteRepository())); } - - public static void SetIdentityProvider(ISeguridad seguridad) - { - _seguridad = seguridad; - } } } \ No newline at end of file diff -r be7a9720fb96 -r 3ebe89c88caa Agendas/trunk/src/Agendas.Tests/EventoTests.cs --- a/Agendas/trunk/src/Agendas.Tests/EventoTests.cs Fri May 13 22:59:00 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/EventoTests.cs Fri May 13 23:29:05 2011 -0300 @@ -8,7 +8,7 @@ namespace AltNetHispano.Agendas.Tests { [TestFixture] - public class EventoTests + public class EventoTests : TestBase { [Test] public void Van_crud() diff -r be7a9720fb96 -r 3ebe89c88caa Agendas/trunk/src/Agendas.Tests/PonentesTests.cs --- a/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Fri May 13 22:59:00 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Fri May 13 23:29:05 2011 -0300 @@ -15,7 +15,7 @@ Evento evento = null; publicador.Setup(p => p.Publicar(It.IsAny())).Callback(e => evento = e); - var agenda = new Agenda(publicador.Object, null, SeguridadServiceDefault, DefaultEventoRepository, DefaultPonenteRepository); + var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository); agenda.RegistrarPonente("Fabio Maulo", "fabiomaulo@gmail.com", "@fabiomaulo", "http://fabiomaulo.blogspot.com"); @@ -39,7 +39,7 @@ Evento evento = null; publicador.Setup(p => p.Publicar(It.IsAny())).Callback(e => evento = e); - var agenda = new Agenda(publicador.Object, null, SeguridadServiceDefault, DefaultEventoRepository, DefaultPonenteRepository); + var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository); agenda.Publicar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26)); @@ -57,7 +57,7 @@ { var publicador = new Mock(); - var agenda = new Agenda(publicador.Object, null, SeguridadServiceDefault, DefaultEventoRepository, DefaultPonenteRepository); + var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository); agenda.Publicar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26)); agenda.Publicar("Conform - Parte 2", "Fabio Maulo", new DateTime(2011, 3, 5)); diff -r be7a9720fb96 -r 3ebe89c88caa Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs --- a/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Fri May 13 22:59:00 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Fri May 13 23:29:05 2011 -0300 @@ -15,10 +15,7 @@ [Test] public void Propuesta_de_van_con_usuario_autenticado() { - var seguridad = new Mock(); - var agenda = new Agenda(null, null, seguridad.Object, DefaultEventoRepository, DefaultPonenteRepository); - - seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalAutenticadoSinRoles()); + var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); agenda.Proponer("Van propuesta", null); IList eventosPropuestos = agenda.GetEventosPropuestos(); @@ -30,7 +27,7 @@ [Test] public void Verificar_propuesta_separada_de_publicacion() { - var agenda = new Agenda(null, null, SeguridadServiceDefault, DefaultEventoRepository, DefaultPonenteRepository); + var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); agenda.Proponer("Van propuesta", null); agenda.Publicar("Van publicada", "jjmontes", DateTime.Now); @@ -47,8 +44,7 @@ { var repository = new Mock(); - var seguridad = new Mock(); - var agenda = new Agenda(null, null, seguridad.Object, repository.Object, DefaultPonenteRepository); + var agenda = new Agenda(null, null, repository.Object, DefaultPonenteRepository); Assert.Throws(() => agenda.Proponer(string.Empty, null)); @@ -58,11 +54,8 @@ [Test] public void Agendar_van_propuesta_sin_fecha() { - var seguridad = new Mock(); - var agenda = new Agenda(null, null, seguridad.Object, DefaultEventoRepository, DefaultPonenteRepository); + var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); - seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalAutenticadoSinRoles()); - { agenda.Proponer("Van propuesta", null); } @@ -77,11 +70,8 @@ [Test] public void Agendar_van_propuesta_sin_ponente() { - var seguridad = new Mock(); - var agenda = new Agenda(null, null, seguridad.Object, DefaultEventoRepository, DefaultPonenteRepository); + var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); - seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalAutenticadoSinRoles()); - { agenda.Proponer("Van propuesta", null); } @@ -98,7 +88,7 @@ [Test] public void Modificar_y_publicar_van_propuesta() { - var agenda = new Agenda(null, null, SeguridadServiceDefault, DefaultEventoRepository, DefaultPonenteRepository); + var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); agenda.Proponer("Van", null); { @@ -132,10 +122,9 @@ [Test] public void Propuesta_de_van_sin_autenticacion() { - var seguridad = new Mock(); - var agenda = new Agenda(null, null, seguridad.Object, DefaultEventoRepository, DefaultPonenteRepository); + var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); - seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalSinAutenticar()); + SetCurrentUser(null); Assert.Throws(() => agenda.Proponer("Inmortalidad de la meduza.", null)); } @@ -145,11 +134,7 @@ { var idEventoNoExistente = new Guid("99999999999999999999999999999999"); - var seguridad = new Mock(); - var agenda = new Agenda(null, null, seguridad.Object, DefaultEventoRepository, DefaultPonenteRepository); - - seguridad.Setup(s => s.GetPrincipal()).Returns( - SeguridadObjectMother.GetGenericPrincipalAutenticadoSinRoles()); + var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); Assert.IsNull(agenda.GetEvento(idEventoNoExistente)); } diff -r be7a9720fb96 -r 3ebe89c88caa Agendas/trunk/src/Agendas.Tests/PulicarTests.cs --- a/Agendas/trunk/src/Agendas.Tests/PulicarTests.cs Fri May 13 22:59:00 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PulicarTests.cs Fri May 13 23:29:05 2011 -0300 @@ -1,6 +1,7 @@ using System; using System.Linq; using AltNetHispano.Agendas.Domain; +using AltNetHispano.Agendas.Domain.Exceptions; using AltNetHispano.Agendas.Domain.Repositories; using Moq; using NUnit.Framework; @@ -15,7 +16,7 @@ { var publicador = new Mock(); - var agenda = new Agenda(publicador.Object, null, SeguridadServiceDefault, DefaultEventoRepository, DefaultPonenteRepository); + var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository); agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now); Assert.AreEqual(1, agenda.GetEventosPublicados().Count); @@ -24,14 +25,14 @@ } [Test] - public void Publicar_van_sin_usuario_autenticado() { - var seguridad = new Mock(); - seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalSinAutenticar()); + public void Publicar_van_sin_usuario_autenticado() + { + SetCurrentUser(null); var publicador = new Mock(); var repository = new Mock(); - var agenda = new Agenda(publicador.Object, null, seguridad.Object, repository.Object, DefaultPonenteRepository); + var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository); Assert.Throws(() => agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now)); @@ -42,12 +43,14 @@ [Test] public void Publicar_van_sin_servicio_de_seguridad() { + IdentityContext.Current = null; + var publicador = new Mock(); var repository = new Mock(); - var agenda = new Agenda(publicador.Object, null, null, repository.Object, DefaultPonenteRepository); + var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository); - Assert.Throws(() => agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now)); + Assert.Throws(() => agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now)); repository.Verify(p => p.Save(It.IsAny()), Times.Exactly(0)); } @@ -59,7 +62,7 @@ publicador.Setup(p => p.Publicar(It.IsAny())).Throws(new Exception("Error intencional")); - var agenda = new Agenda(publicador.Object, null, SeguridadServiceDefault, repository.Object, DefaultPonenteRepository); + var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository); Assert.Throws(() => agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now)); Assert.AreEqual(0, agenda.GetEventosPublicados().Count); @@ -76,7 +79,7 @@ var repository = new Mock(); - var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), null, SeguridadServiceDefault, repository.Object, DefaultPonenteRepository); + var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), null, repository.Object, DefaultPonenteRepository); agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now); @@ -92,7 +95,7 @@ var publicador2 = new Mock(); var recordador1 = new Mock(); - var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), recordador1.Object, SeguridadServiceDefault, DefaultEventoRepository, DefaultPonenteRepository); + var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), recordador1.Object, DefaultEventoRepository, DefaultPonenteRepository); agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now); @@ -110,7 +113,7 @@ var repository = DefaultEventoRepository; var publicador = new Mock(); - var agenda = new Agenda(publicador.Object, null, SeguridadServiceDefault, repository, DefaultPonenteRepository); + var agenda = new Agenda(publicador.Object, null, repository, DefaultPonenteRepository); agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now); diff -r be7a9720fb96 -r 3ebe89c88caa Agendas/trunk/src/Agendas.Tests/TestBase.cs --- a/Agendas/trunk/src/Agendas.Tests/TestBase.cs Fri May 13 22:59:00 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/TestBase.cs Fri May 13 23:29:05 2011 -0300 @@ -8,14 +8,11 @@ { public class TestBase { - protected static ISeguridad SeguridadServiceDefault + protected static void SetCurrentUser(string username) { - get - { - var seguridad = new Mock(); - seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalAutenticadoSinRoles()); - return seguridad.Object; - } + var seguridad = new Mock(); + seguridad.Setup(s => s.GetUserName()).Returns(username); + IdentityContext.Current = seguridad.Object; } protected static IEventoRepository DefaultEventoRepository @@ -39,5 +36,12 @@ { PonenteRepository.Clear(); } - } + + [SetUp] + public void SetearUsuario() + { + SetCurrentUser("neluz"); + } + + } } \ No newline at end of file diff -r be7a9720fb96 -r 3ebe89c88caa Agendas/trunk/src/Agendas.Tests/TrackTests.cs --- a/Agendas/trunk/src/Agendas.Tests/TrackTests.cs Fri May 13 22:59:00 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/TrackTests.cs Fri May 13 23:29:05 2011 -0300 @@ -13,7 +13,7 @@ { var repository = DefaultEventoRepository; - var agenda = new Agenda(null, null, SeguridadServiceDefault, repository, DefaultPonenteRepository); + var agenda = new Agenda(null, null, repository, DefaultPonenteRepository); var fecha = DateTime.Now.AddDays(5); agenda.Publicar("Html 5", "jjmontes", fecha); @@ -36,7 +36,7 @@ { var repository = DefaultEventoRepository; - var agenda = new Agenda(null, null, SeguridadServiceDefault, repository, DefaultPonenteRepository); + var agenda = new Agenda(null, null, repository, DefaultPonenteRepository); agenda.Publicar("Html 5", "jjmontes", DateTime.Now); var evento = repository.GetEventosConFecha().First(); diff -r be7a9720fb96 -r 3ebe89c88caa Agendas/trunk/src/Agendas.Web/Global.asax.cs --- a/Agendas/trunk/src/Agendas.Web/Global.asax.cs Fri May 13 22:59:00 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Global.asax.cs Fri May 13 23:29:05 2011 -0300 @@ -1,5 +1,6 @@ using System.Web.Mvc; using System.Web.Routing; +using AltNetHispano.Agendas.Domain; using AltNetHispano.Agendas.Factories; namespace AltNetHispano.Agendas.Web @@ -33,7 +34,7 @@ RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); - AgendaFactory.SetIdentityProvider(new HttpContextIdentityProvider()); + IdentityContext.Current = new HttpContextIdentityProvider(); } } } \ No newline at end of file diff -r be7a9720fb96 -r 3ebe89c88caa Agendas/trunk/src/Agendas.Web/HttpContextIdentityProvider.cs --- a/Agendas/trunk/src/Agendas.Web/HttpContextIdentityProvider.cs Fri May 13 22:59:00 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/HttpContextIdentityProvider.cs Fri May 13 23:29:05 2011 -0300 @@ -1,14 +1,13 @@ -using System.Security.Principal; -using System.Web; +using System.Web; using AltNetHispano.Agendas.Domain; namespace AltNetHispano.Agendas.Web { public class HttpContextIdentityProvider : ISeguridad { - public IPrincipal GetPrincipal() + public string GetUserName() { - return HttpContext.Current.User; + return HttpContext.Current.User.Identity.Name; } } } \ No newline at end of file