# HG changeset patch # User juanjose.montesdeocaarbos # Date 1324920104 10800 # Node ID bc8dfbde05239f789a6554e6fee2293d77f2fb4a # Parent 6382e35625c517eefe88dc7fa9f0e038e937015c #123: Patrocinadores de las vans: Se verifica que para publicar una Van, debe tener al menos un Patrocinador. diff -r 6382e35625c5 -r bc8dfbde0523 Agendas/trunk/src/Agendas.Domain/Agenda.cs --- 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); diff -r 6382e35625c5 -r bc8dfbde0523 Agendas/trunk/src/Agendas.Repositories.Tests/Infraestructure/NhHelperTest.cs --- 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 diff -r 6382e35625c5 -r bc8dfbde0523 Agendas/trunk/src/Agendas.Repositories.Tests/TestsHelper.cs --- 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 diff -r 6382e35625c5 -r bc8dfbde0523 Agendas/trunk/src/Agendas.Repositories.Tests/Workflow.cs --- 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 {_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); } diff -r 6382e35625c5 -r bc8dfbde0523 Agendas/trunk/src/Agendas.Tests/AgendarTests.cs --- 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 { 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 { 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 { TestsHelper.GetOrCreatePatrocinador("Apress") }); + Assert.IsFalse(evento.Estado.GetType() == typeof(EventoConfirmadoState)); Assert.Throws(() => agenda.Publicar(evento.Id, 1, urlWiki, duracion)); } diff -r 6382e35625c5 -r bc8dfbde0523 Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs --- 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 { 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 {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 diff -r 6382e35625c5 -r bc8dfbde0523 Agendas/trunk/src/Agendas.Tests/TestsHelper.cs --- 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