changeset 282:bc8dfbde0523

#123: Patrocinadores de las vans: Se verifica que para publicar una Van, debe tener al menos un Patrocinador.
author juanjose.montesdeocaarbos
date Mon, 26 Dec 2011 14:21:44 -0300
parents 6382e35625c5
children 2e17dfd1ba35
files Agendas/trunk/src/Agendas.Domain/Agenda.cs Agendas/trunk/src/Agendas.Repositories.Tests/Infraestructure/NhHelperTest.cs Agendas/trunk/src/Agendas.Repositories.Tests/TestsHelper.cs Agendas/trunk/src/Agendas.Repositories.Tests/Workflow.cs Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Agendas/trunk/src/Agendas.Tests/TestsHelper.cs
diffstat 7 files changed, 76 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Mon Dec 26 13:48:21 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Mon Dec 26 14:21:44 2011 -0300
@@ -187,7 +187,10 @@
 				return new EventoResultado(false, "El nĂºmero de evento ya se encuentra en uso", null);
 			}
 
-			Evento evento = GetEvento(eventoId);
+			var evento = GetEvento(eventoId);
+
+			if (/*evento.Tipo == TipoEvento.Van &&*/ evento.Patrocinadores.Count() == 0)
+				return new EventoResultado(false, "La VAN debe tener al menos un Patrocinador para ser publicada.", null);
 
 			evento.Publicar(numeroOrden, urlWiki, duracion);
 
--- a/Agendas/trunk/src/Agendas.Repositories.Tests/Infraestructure/NhHelperTest.cs	Mon Dec 26 13:48:21 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Repositories.Tests/Infraestructure/NhHelperTest.cs	Mon Dec 26 14:21:44 2011 -0300
@@ -10,9 +10,9 @@
 
 			var session = sf.OpenStatelessSession();
 			session.CreateSQLQuery("DELETE FROM Ponentes").ExecuteUpdate();
+			session.CreateSQLQuery("DELETE FROM Patrocinador").ExecuteUpdate();
 			session.CreateSQLQuery("DELETE FROM Evento").ExecuteUpdate();
 			session.CreateSQLQuery("DELETE FROM Persona").ExecuteUpdate();
-			session.CreateSQLQuery("DELETE FROM Patrocinador").ExecuteUpdate();
 		}
 	}
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Repositories.Tests/TestsHelper.cs	Mon Dec 26 13:48:21 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Repositories.Tests/TestsHelper.cs	Mon Dec 26 14:21:44 2011 -0300
@@ -7,26 +7,41 @@
 {
 	public class TestsHelper
 	{
-		private readonly IPersonaRepository _repository;
+		private readonly IPersonaRepository _repositoryPersona;
+		private readonly IPatrocinadorRepository _repositoryPatrocinador;
 		
-		public TestsHelper(IPersonaRepository repository)
+		public TestsHelper(IPersonaRepository repositoryPersona, IPatrocinadorRepository repositoryPatrocinador)
 		{
-			_repository = repository;
+			_repositoryPersona = repositoryPersona;
+			_repositoryPatrocinador = repositoryPatrocinador;
 		}
 
 		public Guid GetOrCreatePonente(string nombre)
 		{
-			var persona = _repository.GetByNombre(nombre);
+			var persona = _repositoryPersona.GetByNombre(nombre);
 			if (persona == null)
 			{
 				persona = new Persona(nombre) { Twitter = nombre.Replace(" ", string.Empty).ToLower() };
-				_repository.Save(persona);
+				_repositoryPersona.Save(persona);
 
-				if (_repository is AltNetHispano.Agendas.Repositories.NHibernate.PersonaRepository)
+				if (_repositoryPersona is AltNetHispano.Agendas.Repositories.NHibernate.PersonaRepository)
 					NhHelper.GetSessionFactory().GetCurrentSession().Flush();
 			}
 			return persona.Id;
 		}
 
+		public Guid GetOrCreatePatrocinador(string nombre)
+		{
+			var patrocinador = _repositoryPatrocinador.GetByNombre(nombre);
+			if (patrocinador == null)
+			{
+				patrocinador = new Patrocinador(nombre);
+				_repositoryPatrocinador.Save(patrocinador);
+
+				if (_repositoryPatrocinador is AltNetHispano.Agendas.Repositories.NHibernate.PatrocinadorRepository)
+					NhHelper.GetSessionFactory().GetCurrentSession().Flush();
+			}
+			return patrocinador.Id;
+		}
 	}
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Repositories.Tests/Workflow.cs	Mon Dec 26 13:48:21 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Repositories.Tests/Workflow.cs	Mon Dec 26 14:21:44 2011 -0300
@@ -3,6 +3,7 @@
 using AltNetHispano.Agendas.Domain;
 using AltNetHispano.Agendas.Domain.Repositories;
 using NUnit.Framework;
+using System.Collections.Generic;
 
 namespace Agendas.Repositories.Tests
 {
@@ -21,7 +22,7 @@
 			_eventoRepository = eventoRepository;
 
 			_agenda = new Agenda(publicador, eventoRepository, personaRepository, patrocinadorRepository);
-			_testsHelper = new TestsHelper(personaRepository);
+			_testsHelper = new TestsHelper(personaRepository, patrocinadorRepository);
 		}
 
 		public void Proponer()
@@ -74,6 +75,10 @@
 		{
 			using (_requestEmulator.Invoke())
 			{
+				_agenda.IndicarPatrocinadores(_eventoId, new List<Guid> {_testsHelper.GetOrCreatePatrocinador("Apress")});
+			}
+			using (_requestEmulator.Invoke())
+			{
 				var resultado = _agenda.Publicar(_eventoId, 1, "http://www.altnethispano.org/", new TimeSpan(2, 11, 0));
 				Assert.IsTrue(resultado.Succeful);
 			}
--- a/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs	Mon Dec 26 13:48:21 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs	Mon Dec 26 14:21:44 2011 -0300
@@ -405,6 +405,7 @@
 			var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5");
 
 			agenda.Confirmar(evento.Id);
+			agenda.IndicarPatrocinadores(evento.Id, new List<Guid> { TestsHelper.GetOrCreatePatrocinador("Apress") });
 			agenda.Publicar(evento.Id, 1, urlWiki, duracion);
 
 			Assert.IsInstanceOf(typeof(EventoPublicadoState), evento.Estado);
@@ -426,7 +427,7 @@
 
 			var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5");
 			agenda.Confirmar(evento.Id);
-
+			agenda.IndicarPatrocinadores(evento.Id, new List<Guid> { TestsHelper.GetOrCreatePatrocinador("Apress") });
 			agenda.Publicar(evento.Id, 71, urlWiki, duracion);
 
 			Assert.AreEqual(71, evento.NumeroOrden);
@@ -465,6 +466,8 @@
 			var evento =
 				DefaultEventoRepository.GetByState(EventoPropuestoState.GetInstance()).Single(e => e.Titulo == "Html 5");
 
+			agenda.IndicarPatrocinadores(evento.Id, new List<Guid> { TestsHelper.GetOrCreatePatrocinador("Apress") });
+
 			Assert.IsFalse(evento.Estado.GetType() == typeof(EventoConfirmadoState));
 			Assert.Throws<AccionNoSoportadaException>(() => agenda.Publicar(evento.Id, 1, urlWiki, duracion));
 		}
--- a/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs	Mon Dec 26 13:48:21 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs	Mon Dec 26 14:21:44 2011 -0300
@@ -179,6 +179,8 @@
 
                     agenda.Confirmar(evento.Id);
 
+					agenda.IndicarPatrocinadores(evento.Id, new List<Guid> { TestsHelper.GetOrCreatePatrocinador("Apress") });
+
                     var r = agenda.Publicar(evento.Id, 1, "http://www.url.com", new TimeSpan(1, 58, 0));
 
                     Assert.IsTrue(r.Succeful);
@@ -197,6 +199,7 @@
 
                     agenda.Confirmar(evento.Id);
 
+					agenda.IndicarPatrocinadores(evento.Id, new List<Guid> {TestsHelper.GetOrCreatePatrocinador("Apress")});
                     var r = agenda.Publicar(evento.Id, 1, "http://www.url.com", new TimeSpan(1, 58, 0));
 
                     Assert.IsFalse(r.Succeful);
@@ -204,5 +207,30 @@
                 }
             }
         }
+
+		[Test]
+		public void Publicar_sin_Patrocinado_No_Permitido()
+		{
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
+			{
+				var fechaInicio = DateTime.Now.ToUniversalTime();
+				var fechaTermino = fechaInicio.AddHours(2);
+
+				agenda.Agendar("Van", new[] { TestsHelper.GetOrCreatePonente("jjmontes") }, fechaInicio, fechaTermino,
+										   urlInvitacion, TipoEvento.Van);
+				{
+					var eventosAgendado = agenda.GetEventosActivos(EventoAgendadoState.GetInstance());
+
+					var evento = eventosAgendado.FirstOrDefault();
+
+					agenda.Confirmar(evento.Id);
+
+					var r = agenda.Publicar(evento.Id, 1, "http://www.url.com", new TimeSpan(1, 58, 0));
+
+					Assert.IsFalse(r.Succeful);
+					Assert.AreEqual("La VAN debe tener al menos un Patrocinador para ser publicada.", r.Message);
+				}
+			}
+		}
 	}
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/TestsHelper.cs	Mon Dec 26 13:48:21 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/TestsHelper.cs	Mon Dec 26 14:21:44 2011 -0300
@@ -19,5 +19,17 @@
 			return persona.Id;
 		}
 
+		public static Guid GetOrCreatePatrocinador(string nombre)
+		{
+			var repository = new PatrocinadorRepository();
+
+			var patrocinador = repository.GetByNombre(nombre);
+			if (patrocinador == null)
+			{
+				patrocinador = new Patrocinador(nombre);
+				repository.Save(patrocinador);
+			}
+			return patrocinador.Id;
+		}
 	}
 }
\ No newline at end of file