changeset 70:c7264bfc4b71

agregado de properties en clase Evento (UrlInvitacion, UrlWiki, NumeroOrden) modificaciones en proyecto Agendas.Blog modificacion de viewmodel EventoModel - agregado de UrlInvitacion (no requerido)
author jorge.rowies
date Fri, 20 May 2011 12:21:07 -0300
parents 8becac0977d7
children 902de1d006c2
files Agendas/trunk/src/Agendas.Blog/Impl/PostWriter.cs Agendas/trunk/src/Agendas.Blog/Impl/PublicarReunionPostWriter.cs Agendas/trunk/src/Agendas.Blog/Impl/RealizarReunionPostWriter.cs Agendas/trunk/src/Agendas.Domain/Agenda.cs Agendas/trunk/src/Agendas.Domain/Evento.cs Agendas/trunk/src/Agendas.Domain/Track.cs Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Agendas/trunk/src/Agendas.Tests/PulicarTests.cs Agendas/trunk/src/Agendas.Tests/TrackTests.cs Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs
diffstat 12 files changed, 120 insertions(+), 78 deletions(-) [+]
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Blog/Impl/PostWriter.cs	Thu May 19 01:32:29 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Blog/Impl/PostWriter.cs	Fri May 20 12:21:07 2011 -0300
@@ -1,4 +1,5 @@
 using System;
+using System.Linq;
 using AltNetHispano.Agendas.Domain;
 
 namespace Agendas.Blog.Impl
@@ -18,8 +19,7 @@
 
     protected string GetNombreUsuario(Evento evento)
     {
-      return string.Empty;
-      //return evento.Tracks.Single(t => t.Accion == Accion.Realizar).Usuario; TODO (property Usuario debe ser publica)
+      return evento.Tracks.Single(t => t.Accion == Accion.Realizar).Usuario;
     }
 
     protected void ExecuteService(string title, string body)
--- a/Agendas/trunk/src/Agendas.Blog/Impl/PublicarReunionPostWriter.cs	Thu May 19 01:32:29 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Blog/Impl/PublicarReunionPostWriter.cs	Fri May 20 12:21:07 2011 -0300
@@ -10,7 +10,7 @@
     protected override string GetTitle(Evento evento)
     {
       return string.Format(CultureInfo.InvariantCulture, Resources.VAN_Publicacion_Title,
-                           string.Empty, //# de VAN en el historial TODO
+                           evento.NumeroOrden, //# de VAN en el historial
                            evento.Ponente.Nombre //Nombre y apellido del ponente
 
         );
@@ -19,15 +19,9 @@
     protected override string GetBody(Evento evento)
     {
       return string.Format(CultureInfo.InvariantCulture, Resources.VAN_Realizacion_Body,
-                           getUrlPublicacionEnWiki(evento), //Url al video publicado en la wiki
+													 evento.UrlWiki, //Url al video publicado en la wiki
                            GetNombreUsuario(evento) //Usuario que postea en el blog
         );
     }
-
-    private string getUrlPublicacionEnWiki(Evento evento)
-    {
-      //TODO
-      throw new NotImplementedException();
-    }
   }
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Blog/Impl/RealizarReunionPostWriter.cs	Thu May 19 01:32:29 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Blog/Impl/RealizarReunionPostWriter.cs	Fri May 20 12:21:07 2011 -0300
@@ -6,45 +6,50 @@
 
 namespace Agendas.Blog.Impl
 {
-  public class RealizarReunionPostWriter : PostWriter
-  {
-    protected override string GetTitle(Evento evento)
-    {
-      return string.Format(CultureInfo.InvariantCulture, Resources.VAN_Realizacion_Title,
-                           evento.Ponente.Nombre, //Nombre y apellido del ponente
-                           evento.Titulo //Tema a tratar en la reunion
-        );
-    }
+	public class RealizarReunionPostWriter : PostWriter
+	{
+		protected override string GetTitle(Evento evento)
+		{
+			return string.Format(CultureInfo.InvariantCulture, Resources.VAN_Realizacion_Title,
+													 evento.Ponente.Nombre, //Nombre y apellido del ponente
+													 evento.Titulo //Tema a tratar en la reunion
+				);
+		}
+
+		protected override string GetBody(Evento evento)
+		{
+			var fecha = getFechaFormateada(evento.Fecha);
+			return string.Format(CultureInfo.InvariantCulture, Resources.VAN_Realizacion_Body,
+													 fecha, //Fecha y hora en GMT+0
+													 evento.Ponente.Nombre, //Nombre y apellido del ponente
+													 evento.Titulo, //Tema a tratar en la reunion
+													 getUrlInvitacion(evento), //Url a la invitacion realizada por el ponente (por lo general es el thread en la lista de correo)
+													 GetNombreUsuario(evento) //Usuario que postea en el blog
+				);
+		}
 
-    protected override string GetBody(Evento evento)
-    {
-      var fecha = getFechaFormateada(evento.Fecha);
-      return string.Format(CultureInfo.InvariantCulture, Resources.VAN_Realizacion_Body,
-                           fecha, //Fecha y hora en GMT+0
-                           evento.Ponente.Nombre, //Nombre y apellido del ponente
-                           evento.Titulo, //Tema a tratar en la reunion
-                           getUrlThreadListaCorreo(evento), //Url al thread en la lista de correo
-                           GetNombreUsuario(evento) //Usuario que postea en el blog
-        );
-    }
+		private string getFechaFormateada(DateTime? fecha)
+		{
+			if (fecha == null)
+				throw new ArgumentNullException("fecha");
+
+			var fechaCast = (DateTime)fecha;
+			var culture = CultureInfo.CreateSpecificCulture("es-ES");
+			var result = fechaCast.ToString("D", culture) + " a las " +
+										 fechaCast.ToString("t", culture) + " UTC/GMT";
+
+			return result;
+		}
 
-    private string getFechaFormateada(DateTime? fecha)
-    {
-      if (fecha == null)
-        throw new ArgumentNullException("fecha");
-
-      var fechaCast = (DateTime)fecha;
-      var culture = CultureInfo.CreateSpecificCulture("es-ES");
-      var result = fechaCast.ToString("D", culture) + " a las " +
-                     fechaCast.ToString("t", culture) + " UTC/GMT";
+		private string getUrlInvitacion(Evento evento)
+		{
+			if (!string.IsNullOrEmpty(evento.UrlInvitacion))
+			{
+				return string.Format(CultureInfo.InvariantCulture, Resources.VAN_Realizacion_Body_UrlListaCorreo,
+														 evento.UrlInvitacion); 
+			}
 
-      return result;
-    }
-
-    private string getUrlThreadListaCorreo(Evento evento)
-    {
-      return string.Format(CultureInfo.InvariantCulture, Resources.VAN_Realizacion_Body_UrlListaCorreo,
-                           string.Empty /*evento.UrlListaCorreo*/);//TODO
-    }
-  }
+			return string.Empty;
+		}
+	}
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Thu May 19 01:32:29 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Fri May 20 12:21:07 2011 -0300
@@ -77,7 +77,7 @@
 			return new Resultado(true);
 		}
 
-		public Resultado Publicar(string titulo, string ponenteNombre, DateTime? fecha)
+    public Resultado Publicar(string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion)
 		{
 			if (!fecha.HasValue)
 				return new Resultado(false);
@@ -88,9 +88,9 @@
 
 			Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo);
 			if (evento == null)
-				evento = Evento.Publicar(titulo, ponente, fecha.Value);
+				evento = Evento.Publicar(titulo, ponente, fecha.Value, urlInvitacion);
 			else
-				evento.Publicar(ponente, fecha);
+				evento.Publicar(ponente, fecha, urlInvitacion);
 
 			if (_publicador != null)
 				_publicador.Publicar(evento);
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs	Thu May 19 01:32:29 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs	Fri May 20 12:21:07 2011 -0300
@@ -16,10 +16,10 @@
 			return evento;
 		}
 
-		public static Evento Publicar(string titulo, Ponente ponente, DateTime fecha)
+		public static Evento Publicar(string titulo, Ponente ponente, DateTime fecha, string urlInvitacion)
 		{
 			var evento = new Evento { Titulo = titulo };
-			evento.Publicar(ponente, fecha);
+			evento.Publicar(ponente, fecha, urlInvitacion);
 
 			return evento;
 		}
@@ -33,7 +33,22 @@
 		public virtual string Titulo { get; private set; }
 		public virtual DateTime? Fecha { get; private set; }
 		public virtual string Sintesis { get; private set; }
-		
+
+		/// <summary>
+		/// Url con la invitacion realizada por el ponente (en la mayoria de los casos va a ser un link al thread de la lista de correo)
+		/// </summary>
+		public virtual string UrlInvitacion { get; private set; }
+
+		/// <summary>
+		/// Url a la pagina de la wiki con el video de la reunion virtual
+		/// </summary>
+		public virtual string UrlWiki { get; private set; }
+
+		/// <summary>
+		/// Numero de orden en el historico de reuniones virtuales
+		/// </summary>
+		public virtual short NumeroOrden { get; private set; }
+
 		private Ponente _ponente;
 		public virtual Ponente Ponente
 		{
@@ -72,18 +87,21 @@
 			AddTracks(new Track(Accion.CambiarTitulo));
 		}
 
-		public virtual void Publicar(Ponente ponente, DateTime? fecha)
+		public virtual void Publicar(Ponente ponente, DateTime? fecha, string urlInvitacion)
 		{
 			Ponente = ponente;
 			Fecha = fecha;
+			UrlInvitacion = urlInvitacion;
 			AddTracks(new Track(Accion.Publicar));
 		}
 
-		public virtual void Realizado(DateTime fecha, string sintesis, IList<string> enlaces)
+		public virtual void Realizado(DateTime fecha, string sintesis, IList<string> enlaces, string urlWiki, short numeroOrden)
 		{
 			Fecha = fecha;
 			Sintesis = sintesis;
 			_enlaces = enlaces;
+			UrlWiki = urlWiki;
+			NumeroOrden = numeroOrden;
 		}
 
 		public virtual void Realizado(string sintesis)
--- a/Agendas/trunk/src/Agendas.Domain/Track.cs	Thu May 19 01:32:29 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Track.cs	Fri May 20 12:21:07 2011 -0300
@@ -14,7 +14,7 @@
 		}
 
 		public virtual Accion Accion { get; private set; }
-		protected virtual string Usuario { get; private set; }
+		public virtual string Usuario { get; private set; }
 	}
 
 	public enum Accion
--- a/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs	Thu May 19 01:32:29 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs	Fri May 20 12:21:07 2011 -0300
@@ -10,6 +10,8 @@
 	[TestFixture]
 	public class PonentesTests : TestBase
 	{
+		private const string urlInvitacion = "http://groups.google.com/group/altnet-hispano/browse_thread/thread/65d6d26eb381386e";
+
 		[Test]
 		public void Publicar_dos_eventos_con_el_mismo_ponente_no_registrado()
 		{
@@ -17,8 +19,10 @@
 
 			var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository);
 
-			agenda.Publicar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26));
-			agenda.Publicar("Conform - Parte 2", "Fabio Maulo", new DateTime(2011, 3, 5));
+			agenda.Publicar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), 
+				urlInvitacion);
+			agenda.Publicar("Conform - Parte 2", "Fabio Maulo", new DateTime(2011, 3, 5),
+				urlInvitacion);
 
 			var eventos = agenda.GetEventosPublicados();
 			Assert.AreEqual(2, eventos.Count);
@@ -47,7 +51,7 @@
 
 			agenda.RegistrarPonente("Fabio Maulo", "fabiomaulo@gmail.com", "@fabiomaulo", "http://fabiomaulo.blogspot.com");
 
-			agenda.Publicar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26));
+			agenda.Publicar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), urlInvitacion);
 
 			Assert.AreEqual(1, agenda.GetEventosPublicados().Count);
 
@@ -69,7 +73,8 @@
 
 			var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository);
 
-			agenda.Publicar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26));
+			agenda.Publicar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26),
+				urlInvitacion);
 
 			Assert.AreEqual(1, agenda.GetEventosPublicados().Count);
 
--- a/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs	Thu May 19 01:32:29 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs	Fri May 20 12:21:07 2011 -0300
@@ -12,6 +12,8 @@
 	[TestFixture]
 	public class PropuestasTests : TestBase
 	{
+		private const string urlInvitacion = "http://groups.google.com/group/altnet-hispano/browse_thread/thread/65d6d26eb381386e";
+
 		[Test]
 		public void Crear_modificar_y_publicar_evento_propuesto()
 		{
@@ -36,7 +38,7 @@
 				Assert.AreEqual("otro ponente", evento.Ponente.Nombre);
 			}
 
-			var r = agenda.Publicar("Van 2", "jjmontes", DateTime.Now);
+			var r = agenda.Publicar("Van 2", "jjmontes", DateTime.Now, urlInvitacion);
 			Assert.IsTrue(r.Succeful);
 			{
 				IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
@@ -59,7 +61,8 @@
 			{
 				var van = agenda.GetEventosPropuestos().FirstOrDefault();
 				Assert.IsNotNull(van);
-				var r = agenda.Publicar(van.Titulo, "Ponente", null);
+				var r = agenda.Publicar(van.Titulo, "Ponente", null,
+					urlInvitacion);
 				Assert.IsFalse(r.Succeful);
 			}
 		}
@@ -78,7 +81,8 @@
 				Assert.IsNotNull(van);
 
 				van.Actualizar(null, DateTime.Today.AddDays(5));
-				var r = agenda.Publicar(van.Titulo, string.Empty, van.Fecha);
+				var r = agenda.Publicar(van.Titulo, string.Empty, van.Fecha,
+					urlInvitacion);
 				Assert.IsFalse(r.Succeful);
 			}
 		}
@@ -134,7 +138,8 @@
 			var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository);
 
 			agenda.Proponer("Van propuesta", null);
-			var r = agenda.Publicar("Van publicada", "jjmontes", DateTime.Now);
+			var r = agenda.Publicar("Van publicada", "jjmontes", DateTime.Now,
+				urlInvitacion);
 			Assert.IsTrue(r.Succeful);
 
 			IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
--- a/Agendas/trunk/src/Agendas.Tests/PulicarTests.cs	Thu May 19 01:32:29 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/PulicarTests.cs	Fri May 20 12:21:07 2011 -0300
@@ -11,6 +11,8 @@
 	[TestFixture]
 	public class PulicarTests : TestBase
 	{
+		private const string urlInvitacion = "http://groups.google.com/group/altnet-hispano/browse_thread/thread/65d6d26eb381386e";
+
 		[Test]
 		public void CompositePublicador_constructor_parametro_null_debe_generar_ArgumentNullException()
 		{
@@ -27,7 +29,7 @@
 
 			var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository);
 
-			Assert.Throws<Exception>(() => agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now));
+			Assert.Throws<Exception>(() => agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion));
 			Assert.AreEqual(0, agenda.GetEventosPublicados().Count);
 
 			publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
@@ -45,7 +47,8 @@
 			var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository);
 
 			Assert.Throws<IdentityContextNotConfiguredException>(
-				() => agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now));
+				() => agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now,
+					urlInvitacion));
 			repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0));
 		}
 
@@ -59,7 +62,8 @@
 
 			var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository);
 
-			Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now));
+			Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now,
+				urlInvitacion));
 
 			publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(0));
 			repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0));
@@ -70,7 +74,8 @@
 		{
 			var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository);
 
-			var r = agenda.Publicar("Van para publicar", string.Empty, DateTime.Now);
+			var r = agenda.Publicar("Van para publicar", string.Empty, DateTime.Now,
+				urlInvitacion);
 
 			Assert.IsFalse(r.Succeful);
 		}
@@ -84,9 +89,10 @@
 			var repository = new Mock<IEventoRepository>();
 
 			var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), null,
-			                        repository.Object, DefaultPonenteRepository);
+															repository.Object, DefaultPonenteRepository);
 
-			agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now);
+			agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now,
+				urlInvitacion);
 
 			publicador1.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
 			publicador2.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
@@ -100,7 +106,8 @@
 
 			var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository);
 
-			agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now);
+			agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now,
+				urlInvitacion);
 			var eventos = agenda.GetEventosPublicados();
 			Assert.AreEqual(1, eventos.Count);
 
@@ -123,7 +130,8 @@
 
 			var agenda = new Agenda(publicador.Object, null, repository, DefaultPonenteRepository);
 
-			agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now);
+			agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now,
+				urlInvitacion);
 
 			publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
 
@@ -154,9 +162,10 @@
 			var recordador1 = new Mock<IRecordador>();
 
 			var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), recordador1.Object,
-			                        DefaultEventoRepository, DefaultPonenteRepository);
+															DefaultEventoRepository, DefaultPonenteRepository);
 
-			agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now);
+			agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now,
+				urlInvitacion);
 
 			var van = agenda.GetEventosPublicados().Single(v => v.Titulo == "Van para publicar");
 			agenda.Recordar(van.Id);
--- a/Agendas/trunk/src/Agendas.Tests/TrackTests.cs	Thu May 19 01:32:29 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/TrackTests.cs	Fri May 20 12:21:07 2011 -0300
@@ -8,6 +8,8 @@
 	[TestFixture]
 	public class TrackTests : TestBase
 	{
+		private const string urlInvitacion = "http://groups.google.com/group/altnet-hispano/browse_thread/thread/65d6d26eb381386e";
+
 		[Test]
 		public void Track_al_publicar_y_modificar_evento()
 		{
@@ -16,7 +18,7 @@
 			var agenda = new Agenda(null, null, repository, DefaultPonenteRepository);
 
 			var fecha = DateTime.Now.AddDays(5);
-			agenda.Publicar("Html 5", "jjmontes", fecha);
+			agenda.Publicar("Html 5", "jjmontes", fecha, urlInvitacion);
 			var evento = repository.GetEventosConFecha().First();
 
 			Assert.AreEqual(1, evento.Tracks.Count());
@@ -38,7 +40,8 @@
 
 			var agenda = new Agenda(null, null, repository, DefaultPonenteRepository);
 
-			agenda.Publicar("Html 5", "jjmontes", DateTime.Now);
+			agenda.Publicar("Html 5", "jjmontes", DateTime.Now,
+				urlInvitacion);
 			var evento = repository.GetEventosConFecha().First();
 
 			Assert.AreEqual(1, evento.Tracks.Count());
--- a/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs	Thu May 19 01:32:29 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs	Fri May 20 12:21:07 2011 -0300
@@ -35,7 +35,8 @@
             {
                 var agenda = AgendaFactory.GetAgenda();
 
-                var r = agenda.Publicar(model.Titulo, model.Ponente, model.Fecha);
+                var r = agenda.Publicar(model.Titulo, model.Ponente, model.Fecha, 
+                  model.UrlInvitacion);
 				if (r.Succeful)
 					return RedirectToAction("Index");
                 ModelState.AddModelError("error", r.ToString());
--- a/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs	Thu May 19 01:32:29 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs	Fri May 20 12:21:07 2011 -0300
@@ -20,6 +20,8 @@
 
         [Required(ErrorMessage = "debe ingresar la fecha del evento")]
         public DateTime Fecha { get; set; }
+
+        public string UrlInvitacion { get; set; }
     }
 
     public class EventoEditModel