# HG changeset patch # User juanjose.montesdeocaarbos # Date 1313208114 10800 # Node ID 4d0b2552edb2fe910f8c8d7cbd1d586645a441c1 # Parent 21ad1c337c94d7c3ed8ac4293cf0f8e3446644fc Ticket 170: Cuando se agenda o confirma un evento, verificar que no existan otros dentro del rango horario en que se desarrollará el evento actual. diff -r 21ad1c337c94 -r 4d0b2552edb2 Agendas/trunk/src/Agendas.Domain/Agenda.cs --- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs Fri Aug 12 23:55:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs Sat Aug 13 01:01:54 2011 -0300 @@ -104,12 +104,20 @@ return new EventoResultado(false, string.Format("No se encontró el ponente indicado ({0})", ponenteId), null); Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo); - if (evento == null) + + if (evento == null) evento = Evento.Agendar(titulo, persona, fechaInicio.Value, fechaTermino.Value, urlInvitacion, tipo); else evento.Agendar(persona, fechaInicio, fechaTermino, urlInvitacion); - Notify(evento); + foreach (var e in _eventosRepository.GetActivos()) + { + if (!e.Equals(evento) && (evento.FechaInicio <= e.FechaTermino && evento.FechaTermino >= e.FechaInicio)) + { + return new EventoResultado(false, string.Format("El evento que está intentando agendar entra en conflicto con '{0}'", evento.Titulo), null); + } + } + Notify(evento); _eventosRepository.Save(evento); diff -r 21ad1c337c94 -r 4d0b2552edb2 Agendas/trunk/src/Agendas.Tests/AgendarTests.cs --- a/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Fri Aug 12 23:55:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Sat Aug 13 01:01:54 2011 -0300 @@ -28,7 +28,7 @@ var repository = new Mock(); publicador.Setup(p => p.Publicar(It.IsAny>())).Throws(new Exception("Error intencional")); - + repository.Setup(r => r.GetActivos()).Returns(new List()); var agenda = new Agenda(publicador.Object, repository.Object, DefaultPersonaRepository, DefaultPatrocinadorRepository); var fechaInicio = DateTime.Now.ToUniversalTime(); @@ -102,7 +102,7 @@ var publicador2 = new Mock(); var repository = new Mock(); - + repository.Setup(r => r.GetActivos()).Returns(new List()); var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), repository.Object, DefaultPersonaRepository, DefaultPatrocinadorRepository); @@ -463,5 +463,57 @@ Assert.Throws(() => agenda.Publicar(evento.Id, 1, urlWiki, new TimeSpan(0, 0, 0))); Assert.Throws(() => agenda.Publicar(evento.Id, 1, urlWiki, new TimeSpan(0, 0, 59))); } + + [Test] + public void Verificar_que_no_se_puedan_agendar_dos_eventos_para_el_mismo_intervalo() + { + var publicador1 = new Mock(); + var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, + DefaultPatrocinadorRepository); + var fechaInicio = new DateTime(2011, 7, 1, 18, 00, 00); + var fechaTermino = fechaInicio.AddHours(2); + + var r = agenda.Agendar("Conceptos de HTTP y Fiddler web debugger", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, + fechaTermino, string.Empty, TipoEvento.Van); + Assert.IsTrue(r.Succeful); + + fechaInicio = new DateTime(2011, 7, 1, 05, 00, 00); + fechaTermino = fechaInicio.AddHours(2); + r = agenda.Agendar("Una primer van que NO se superpone", + TestsHelper.GetOrCreatePonente("jjmontes"), + fechaInicio, + fechaTermino, string.Empty, TipoEvento.Van); + Assert.IsTrue(r.Succeful); + + r = agenda.Agendar("Otra van que se superpone", + TestsHelper.GetOrCreatePonente("jjmontes"), + fechaInicio, + fechaTermino, string.Empty, TipoEvento.Van); + Assert.IsFalse(r.Succeful); + + fechaInicio = new DateTime(2011, 7, 1, 17, 00, 00); + fechaTermino = fechaInicio.AddHours(2); + r = agenda.Agendar("Otra van que se superpone", + TestsHelper.GetOrCreatePonente("jjmontes"), + fechaInicio, + fechaTermino, string.Empty, TipoEvento.Van); + Assert.IsFalse(r.Succeful); + + fechaInicio = new DateTime(2011, 7, 1, 19, 00, 00); + fechaTermino = fechaInicio.AddHours(2); + r = agenda.Agendar("Otra van que se superpone", + TestsHelper.GetOrCreatePonente("jjmontes"), + fechaInicio, + fechaTermino, string.Empty, TipoEvento.Van); + Assert.IsFalse(r.Succeful); + + fechaInicio = new DateTime(2011, 7, 1, 21, 00, 00); + fechaTermino = fechaInicio.AddHours(2); + r = agenda.Agendar("Una segunda van que NO se superpone", + TestsHelper.GetOrCreatePonente("jjmontes"), + fechaInicio, + fechaTermino, string.Empty, TipoEvento.Van); + Assert.IsTrue(r.Succeful); + } } } \ No newline at end of file