# HG changeset patch # User juanjose.montesdeocaarbos # Date 1312645306 10800 # Node ID 5c94b052d838aea77a48d443eb6d54f1974e079a # Parent 97e51ddeeb58caf12939e392c0cead02758d8a8f Ticket 153: UI de Publicar. Faltaba la DuraciĆ³n del evento en la capa de negocios. diff -r 97e51ddeeb58 -r 5c94b052d838 Agendas/trunk/src/Agendas.Domain/Agenda.cs --- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs Sat Aug 06 03:34:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs Sat Aug 06 12:41:46 2011 -0300 @@ -123,7 +123,7 @@ return new Resultado(true); } - public Resultado Publicar(Guid eventoId, short numeroOrden, string urlWiki) + public Resultado Publicar(Guid eventoId, short numeroOrden, string urlWiki, TimeSpan duracion) { if (numeroOrden <= 0) throw new ArgumentOutOfRangeException("numeroOrden"); @@ -131,9 +131,12 @@ if (string.IsNullOrWhiteSpace(urlWiki)) throw new ArgumentException("urlWiki"); + if (duracion.Hours.Equals(0) && duracion.Minutes.Equals(0)) + throw new ArgumentOutOfRangeException("duracion"); + Evento evento = GetEvento(eventoId); - evento.Publicar(numeroOrden, urlWiki); + evento.Publicar(numeroOrden, urlWiki, duracion); Notify(evento); diff -r 97e51ddeeb58 -r 5c94b052d838 Agendas/trunk/src/Agendas.Domain/Evento.cs --- a/Agendas/trunk/src/Agendas.Domain/Evento.cs Sat Aug 06 03:34:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs Sat Aug 06 12:41:46 2011 -0300 @@ -78,6 +78,14 @@ } } + /// + /// Determina la duraciĆ³n de un evento. + /// + public virtual TimeSpan Duracion + { + get; set; + } + protected internal virtual void AddPatrocinador(Patrocinador patrocinador) { _patrocinadores.Add(patrocinador); @@ -137,7 +145,7 @@ Ponente = persona; Fecha = fecha; UrlInvitacion = urlInvitacion; - this.Estado.Promover(this, Accion.Agendar); + Estado.Promover(this, Accion.Agendar); } public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion) @@ -157,14 +165,15 @@ public virtual void Confirmar() { - this.Estado.Promover(this, Accion.Confirmar); + Estado.Promover(this, Accion.Confirmar); } - public virtual void Publicar(short numeroOrden, string urlWiki) + public virtual void Publicar(short numeroOrden, string urlWiki, TimeSpan duracion) { - this.NumeroOrden = numeroOrden; - this.UrlWiki = urlWiki; - this.Estado.Promover(this, Accion.Publicar); + NumeroOrden = numeroOrden; + UrlWiki = urlWiki; + Duracion = duracion; + Estado.Promover(this, Accion.Publicar); } public virtual void Cancelar() diff -r 97e51ddeeb58 -r 5c94b052d838 Agendas/trunk/src/Agendas.Tests/AgendarTests.cs --- a/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Sat Aug 06 03:34:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Sat Aug 06 12:41:46 2011 -0300 @@ -288,7 +288,8 @@ [Test] public void Al_publicar_un_evento_debe_quedar_con_estado_EventoPublicadoState_y_debe_generar_el_track_correspondiente() { - const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; + const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; + var duracion = new TimeSpan(1, 34, 00); var publicador1 = new Mock(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); @@ -297,15 +298,17 @@ var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); agenda.Confirmar(evento.Id); - agenda.Publicar(evento.Id, 1, urlWiki); + agenda.Publicar(evento.Id, 1, urlWiki, duracion); Assert.IsInstanceOf(typeof(EventoPublicadoState), evento.Estado); Assert.That(evento.GetTrackNews().Count(t => t.Accion == Accion.Publicar) == 1); } [Test] - public void Al_publicar_un_evento_debe_asignarse_el_nro_de_reunion_y_la_url_de_la_wiki() + public void Al_publicar_un_evento_debe_asignarse_el_nro_de_reunion_la_url_de_la_wiki_y_la_duracion() { + const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; + var duracion = new TimeSpan(1, 34, 00); var publicador1 = new Mock(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); @@ -314,11 +317,11 @@ var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); agenda.Confirmar(evento.Id); - const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; - agenda.Publicar(evento.Id, 71, urlWiki); + agenda.Publicar(evento.Id, 71, urlWiki, duracion); Assert.AreEqual(71, evento.NumeroOrden); Assert.AreEqual(urlWiki, evento.UrlWiki); + Assert.AreEqual(duracion, evento.Duracion); } [Test] @@ -342,6 +345,8 @@ [ExpectedException(typeof(AccionNoSoportadaException))] public void Al_publicar_sin_confirmar_debe_lanzarse_excepcion() { + const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; + var duracion = new TimeSpan(1, 34, 00); var publicador1 = new Mock(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); @@ -351,13 +356,13 @@ DefaultEventoRepository.GetByState(EventoPropuestoState.GetInstance()).Single(e => e.Titulo == "Html 5"); Assert.IsFalse(evento.Estado.GetType() == typeof(EventoConfirmadoState)); - const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; - agenda.Publicar(evento.Id, 1, urlWiki); + agenda.Publicar(evento.Id, 1, urlWiki, duracion); } [Test] public void Publicar_Evento_Con_NroOrden_Invalido_Genera_Excepcion() { + var duracion = new TimeSpan(1, 34, 00); var publicador1 = new Mock(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); @@ -368,13 +373,14 @@ const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; - Assert.Throws(() => agenda.Publicar(evento.Id, 0, urlWiki)); - Assert.Throws(() => agenda.Publicar(evento.Id, -1, urlWiki)); + Assert.Throws(() => agenda.Publicar(evento.Id, 0, urlWiki, duracion)); + Assert.Throws(() => agenda.Publicar(evento.Id, -1, urlWiki, duracion)); } [Test] public void Publicar_Evento_Con_Url_Invalida_Genera_Excepcion() { + var duracion = new TimeSpan(1, 34, 00); var publicador1 = new Mock(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); @@ -383,8 +389,24 @@ var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); agenda.Confirmar(evento.Id); - Assert.Throws(() => agenda.Publicar(evento.Id, 1, "")); - Assert.Throws(() => agenda.Publicar(evento.Id, 1, " ")); + Assert.Throws(() => agenda.Publicar(evento.Id, 1, "", duracion)); + Assert.Throws(() => agenda.Publicar(evento.Id, 1, " ", duracion)); } - } + + [Test] + public void Publicar_Evento_Con_Duracion_Invalida_Genera_Excepcion() + { + const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; + var publicador1 = new Mock(); + + var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); + agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.MinValue, urlInvitacion, TipoEvento.Van); + + var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); + agenda.Confirmar(evento.Id); + + 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))); + } + } } \ No newline at end of file diff -r 97e51ddeeb58 -r 5c94b052d838 Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs --- a/Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs Sat Aug 06 03:34:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs Sat Aug 06 12:41:46 2011 -0300 @@ -149,7 +149,7 @@ Evento evento = _eventoRepository.Get(eventoId); Assert.AreEqual(EventoConfirmadoState.GetInstance(), evento.Estado); - evento.Publicar(1, null); + evento.Publicar(1, null, new TimeSpan(0, 0, 0)); } using (_requestEmulator.Invoke()) diff -r 97e51ddeeb58 -r 5c94b052d838 Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs --- a/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs Sat Aug 06 03:34:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs Sat Aug 06 12:41:46 2011 -0300 @@ -36,7 +36,7 @@ public void Publicar(Guid eventoId) { - var resultado = _agenda.Publicar(eventoId, 1, "http://www.altnethispano.org/"); + var resultado = _agenda.Publicar(eventoId, 1, "http://www.altnethispano.org/", new TimeSpan(2, 11, 0)); Assert.IsTrue(resultado.Succeful); } diff -r 97e51ddeeb58 -r 5c94b052d838 Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs --- a/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Sat Aug 06 03:34:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Sat Aug 06 12:41:46 2011 -0300 @@ -102,7 +102,7 @@ { var agenda = AgendaFactory.GetAgenda(); - var r = agenda.Publicar(new Guid(model.Id), model.NroOrden, model.UrlWiki); + var r = agenda.Publicar(new Guid(model.Id), model.NroOrden, model.UrlWiki, model.DuracionReal); if (r.Succeful) { this.AddNotification(string.Format("Evento publicado {0}", model.Titulo));