changeset 169:5c94b052d838

Ticket 153: UI de Publicar. Faltaba la DuraciĆ³n del evento en la capa de negocios.
author juanjose.montesdeocaarbos
date Sat, 06 Aug 2011 12:41:46 -0300
parents 97e51ddeeb58
children 13b661a29242
files Agendas/trunk/src/Agendas.Domain/Agenda.cs Agendas/trunk/src/Agendas.Domain/Evento.cs Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs
diffstat 6 files changed, 57 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- 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);
 
--- 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 @@
 			}
 		}
 
+		/// <summary>
+		/// Determina la duraciĆ³n de un evento.
+		/// </summary>
+		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()
--- 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<IPublicador>();
 
 			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<IPublicador>();
 
 			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<IPublicador>();
 
 			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<IPublicador>();
 
             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<ArgumentOutOfRangeException>(() => agenda.Publicar(evento.Id, 0, urlWiki));
-            Assert.Throws<ArgumentOutOfRangeException>(() => agenda.Publicar(evento.Id, -1, urlWiki));
+            Assert.Throws<ArgumentOutOfRangeException>(() => agenda.Publicar(evento.Id, 0, urlWiki, duracion));
+            Assert.Throws<ArgumentOutOfRangeException>(() => 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<IPublicador>();
 
             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<ArgumentException>(() => agenda.Publicar(evento.Id, 1, ""));
-            Assert.Throws<ArgumentException>(() => agenda.Publicar(evento.Id, 1, " "));
+            Assert.Throws<ArgumentException>(() => agenda.Publicar(evento.Id, 1, "", duracion));
+            Assert.Throws<ArgumentException>(() => 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<IPublicador>();
+
+			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<ArgumentOutOfRangeException>(() => agenda.Publicar(evento.Id, 1, urlWiki, new TimeSpan(0, 0, 0)));
+			Assert.Throws<ArgumentOutOfRangeException>(() => agenda.Publicar(evento.Id, 1, urlWiki, new TimeSpan(0, 0, 59)));
+		}
+	}
 }
\ No newline at end of file
--- 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())
--- 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);
 		}
 
--- 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));