changeset 8:cae27d7eb697

Se agregó ISeguridad para validar autenticaciones de usuarios. Agenda.Proponer modificado para validar que solo pueden Proponer eventos los usuarios autenticados.
author juanjose.montesdeocaarbos
date Sat, 12 Feb 2011 11:12:18 -0300
parents deee2ca97f5b
children c90492faf268
files Agendas/trunk/src/Agendas.Domain/Agenda.cs Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj Agendas/trunk/src/Agendas.Domain/ISeguridad.cs Agendas/trunk/src/Agendas.Tests/AgendaTests.cs Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj Agendas/trunk/src/Agendas.Tests/SeguridadObjectMother.cs
diffstat 6 files changed, 64 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Tue Feb 08 07:56:53 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Sat Feb 12 11:12:18 2011 -0300
@@ -10,11 +10,13 @@
         private readonly IList<Evento> _eventosPublicados;
 		private readonly IPublicador _publicador;
 		private readonly IRecordador _recordador;
+        private readonly ISeguridad _seguridad;
 
-		public Agenda(IPublicador publicador, IRecordador recordador)
+        public Agenda(IPublicador publicador, IRecordador recordador, ISeguridad seguridad)
 		{
 			_publicador = publicador;
 			_recordador = recordador;
+            _seguridad = seguridad;
 			_eventosPropuestos = new List<Evento>();
             _eventosPublicados = new List<Evento>();
 		}
@@ -48,6 +50,8 @@
 		{
 			if (string.IsNullOrWhiteSpace(van.Titulo))
 				throw new ValidationException();
+            if (_seguridad.GetPrincipal() == null || _seguridad.GetPrincipal().Identity == null)
+                throw new ValidationException();
 			_eventosPropuestos.Add(van);
 		}
 
--- a/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj	Tue Feb 08 07:56:53 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj	Sat Feb 12 11:12:18 2011 -0300
@@ -46,6 +46,7 @@
     <Compile Include="Evento.cs" />
     <Compile Include="Exceptions\ValidationException.cs" />
     <Compile Include="IRecordador.cs" />
+    <Compile Include="ISeguridad.cs" />
     <Compile Include="Repositories\IEventoRepository.cs" />
     <Compile Include="IPublicador.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Domain/ISeguridad.cs	Sat Feb 12 11:12:18 2011 -0300
@@ -0,0 +1,8 @@
+using System.Security.Principal;
+namespace AltNetHispano.Agendas.Domain
+{
+    public interface ISeguridad
+    {
+        IPrincipal GetPrincipal();
+    }
+}
--- a/Agendas/trunk/src/Agendas.Tests/AgendaTests.cs	Tue Feb 08 07:56:53 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/AgendaTests.cs	Sat Feb 12 11:12:18 2011 -0300
@@ -7,6 +7,7 @@
 using AltNetHispano.Agendas.Domain.Repositories;
 using Moq;
 using NUnit.Framework;
+using System.Security.Principal;
 
 namespace AltNetHispano.Agendas.Tests
 {
@@ -18,7 +19,7 @@
 		{
 			var publicador = new Mock<IPublicador>();
 
-			var agenda = new Agenda(publicador.Object, null);
+			var agenda = new Agenda(publicador.Object, null, null);
 
 			var cafe = EventoObjectMother.GetCafeValidoParaPublicar();
 			agenda.Publicar(cafe);
@@ -31,7 +32,7 @@
 		{
 			var publicador = new Mock<IPublicador>();
 
-			var agenda = new Agenda(publicador.Object, null);
+			var agenda = new Agenda(publicador.Object, null, null);
 
 			var van = EventoObjectMother.GetVanValidaParaPublicar();
 
@@ -47,7 +48,7 @@
 			var publicador = new Mock<IPublicador>();
 			publicador.Setup(p => p.Publicar(It.IsAny<Evento>())).Throws(new Exception("Error intencional"));
 
-			var agenda = new Agenda(publicador.Object, null);
+			var agenda = new Agenda(publicador.Object, null, null);
 
 			var van = EventoObjectMother.GetVanValidaParaPublicar();
 			Assert.Throws<Exception>(() => agenda.Publicar(van));
@@ -62,7 +63,7 @@
 			var publicador1 = new Mock<IPublicador>();
 			var publicador2 = new Mock<IPublicador>();
 
-			var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), null);
+			var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), null, null);
 
 			var van = EventoObjectMother.GetVanValidaParaPublicar();
 			agenda.Publicar(van);
@@ -78,7 +79,7 @@
 			var publicador2 = new Mock<IPublicador>();
 			var recordador1 = new Mock<IRecordador>();
 
-			var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), recordador1.Object);
+			var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), recordador1.Object, null);
 
 			var van = EventoObjectMother.GetVanValidaParaPublicar();
 			agenda.Publicar(van);
@@ -93,11 +94,14 @@
 		}
 
 		[Test]
-		public void Propuesta_de_van()
+		public void Propuesta_de_van_con_usuario_autenticado()
 		{
 			var van = new Van{Titulo = "Van propuesta"};
 
-			var agenda = new Agenda(null, null);
+            var seguridad = new Mock<ISeguridad>();
+            var agenda = new Agenda(null, null, seguridad.Object);
+            
+            seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalAutenticadoSinRoles());
 			agenda.Proponer(van);
 
 			IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
@@ -109,10 +113,12 @@
         [Test]
         public void Verificar_propuesta_separada_de_publicacion()
         {
-            var agenda = new Agenda(null, null);
+            var seguridad = new Mock<ISeguridad>();
+            var agenda = new Agenda(null, null, seguridad.Object);
 
             var vanPropuesta = new Van { Titulo = "Van propuesta" };
             var vanPublicada = EventoObjectMother.GetVanValidaParaPublicar();
+            seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalAutenticadoSinRoles());
 
             agenda.Proponer(vanPropuesta);
             agenda.Publicar(vanPublicada);
@@ -129,19 +135,24 @@
 		{
 			var van = new Van();
 
-			var agenda = new Agenda(null, null);
-			Assert.Throws<ValidationException>(() => agenda.Proponer(van));
+            var seguridad = new Mock<ISeguridad>();
+            var agenda = new Agenda(null, null, seguridad.Object);
+            
+            Assert.Throws<ValidationException>(() => agenda.Proponer(van));
 			Assert.AreEqual(Guid.Empty, van.Id);
 		}
 
 		[Test]
 		public void Agendar_van_propuesta_sin_fecha()
 		{
-			var agenda = new Agenda(null, null);
+            var seguridad = new Mock<ISeguridad>();
+            var agenda = new Agenda(null, null, seguridad.Object);
+            
+            seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalAutenticadoSinRoles());
 
 			{
 				var van = new Van {Titulo = "Van propuesta"};
-				agenda.Proponer(van);
+                agenda.Proponer(van);
 			}
 
 			{
@@ -154,11 +165,14 @@
 		[Test]
 		public void Agendar_van_propuesta_sin_ponente()
 		{
-			var agenda = new Agenda(null, null);
+            var seguridad = new Mock<ISeguridad>();
+            var agenda = new Agenda(null, null, seguridad.Object);
+            
+            seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalAutenticadoSinRoles());
 
 			{
 				var van = new Van { Titulo = "Van propuesta" };
-				agenda.Proponer(van);
+                agenda.Proponer(van);
 			}
 
 			{
@@ -175,7 +189,7 @@
 		{
 			Guid vanId;
 			{
-				var agenda = new Agenda(null, null);
+				var agenda = new Agenda(null, null, null);
 				agenda.Publicar(EventoObjectMother.GetVanValidaParaPublicar());
 
 				IAgendaRepository agendaRepository = new AgendaRepository();
--- a/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj	Tue Feb 08 07:56:53 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj	Sat Feb 12 11:12:18 2011 -0300
@@ -50,6 +50,7 @@
     <Compile Include="EventoObjectMother.cs" />
     <Compile Include="EventoTests.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="SeguridadObjectMother.cs" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\Agendas.Domain\Agendas.Domain.csproj">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Tests/SeguridadObjectMother.cs	Sat Feb 12 11:12:18 2011 -0300
@@ -0,0 +1,20 @@
+using System;
+using AltNetHispano.Agendas.Domain;
+using System.Security.Principal;
+
+namespace AltNetHispano.Agendas.Tests
+{
+    public static class SeguridadObjectMother
+    {
+        public static GenericPrincipal GetGenericPrincipalAutenticadoSinRoles()
+        {
+            return new GenericPrincipal(GetGenericIdentityAutenticado(), null);
+        }
+
+        public static GenericIdentity GetGenericIdentityAutenticado() {
+            return new GenericIdentity("neluz");
+        }
+
+        
+    }
+}