changeset 87:26d0513a8410

A los publicadores les llega la lista de tracks producidos en la acción realizada Quitamos el concepto de Recordador ya que el mismo es un publicador, cuándo publicar es responsabilidad de cada publicador
author nelopauselli
date Fri, 27 May 2011 14:42:38 -0300
parents 723aed93a0e6
children 05f5f7307957
files Agendas/trunk/src/Agendas.Blog/Impl/BlogPublicador.cs Agendas/trunk/src/Agendas.Domain/Agenda.cs Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj Agendas/trunk/src/Agendas.Domain/CompositePublicador.cs Agendas/trunk/src/Agendas.Domain/Evento.cs Agendas/trunk/src/Agendas.Domain/IPublicador.cs Agendas/trunk/src/Agendas.Domain/IRecordador.cs Agendas/trunk/src/Agendas.Factories/AgendaFactory.cs Agendas/trunk/src/Agendas.Google/GooglePublicador.cs Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Agendas/trunk/src/Agendas.Tests/TrackTests.cs Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs Agendas/trunk/src/Agendas.Tests/Workflows/WorkflowTests.cs Agendas/trunk/src/Agendas.Twitter/TwitterPublicador.cs
diffstat 17 files changed, 88 insertions(+), 108 deletions(-) [+]
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Blog/Impl/BlogPublicador.cs	Wed May 25 01:53:31 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Blog/Impl/BlogPublicador.cs	Fri May 27 14:42:38 2011 -0300
@@ -1,4 +1,5 @@
-using AltNetHispano.Agendas.Domain;
+using System.Collections.Generic;
+using AltNetHispano.Agendas.Domain;
 
 namespace Agendas.Blog.Impl
 {
@@ -11,10 +12,10 @@
       _postWriterFactory = postWriterFactory;
     }
 
-    public void Publicar(Evento evento)
+    public void Publicar(IEnumerable<Track> tracks)
     {
-      foreach (var track in evento.Tracks)
-        _postWriterFactory.GetPostWriter(track.Accion).WritePost(evento);
+      foreach (var track in tracks)
+        _postWriterFactory.GetPostWriter(track.Accion).WritePost(track.Evento);
     }
   }
 }
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Wed May 25 01:53:31 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Fri May 27 14:42:38 2011 -0300
@@ -10,15 +10,13 @@
 		private readonly IEventoRepository _eventosRepository;
 		private readonly IPonenteRepository _ponenteRepository;
 		private readonly IPublicador _publicador;
-		private readonly IRecordador _recordador;
 
-		public Agenda(IPublicador publicador, IRecordador recordador, IEventoRepository eventosRepository,
+		public Agenda(IPublicador publicador, IEventoRepository eventosRepository,
 		              IPonenteRepository ponenteRepository)
 		{
 			_publicador = publicador;
 			_ponenteRepository = ponenteRepository;
 			_eventosRepository = eventosRepository;
-			_recordador = recordador;
 		}
 
 		public Evento GetEvento(Guid eventoId)
@@ -130,17 +128,11 @@
 			return new Resultado(true);
 		}
 
-		public void Recordar(Guid eventoId)
-		{
-			Evento evento = _eventosRepository.Get(eventoId);
-			if (_recordador != null)
-				_recordador.Recordar(evento);
-		}
-
 		private void Notify(Evento evento)
 		{
+			var tracks = evento.GetTrackNews();
 			if (_publicador != null)
-				_publicador.Publicar(evento);
+				_publicador.Publicar(tracks);
 		}
 
 		public void RegistrarPonente(string nombre, string mail, string twitter, string blog)
--- a/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj	Wed May 25 01:53:31 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj	Fri May 27 14:42:38 2011 -0300
@@ -48,7 +48,6 @@
     <Compile Include="Exceptions\UsuarioNoAutenticadoException.cs" />
     <Compile Include="Identificable.cs" />
     <Compile Include="IdentityContext.cs" />
-    <Compile Include="IRecordador.cs" />
     <Compile Include="ISeguridad.cs" />
     <Compile Include="Ponente.cs" />
     <Compile Include="Repositories\IEventoRepository.cs" />
--- a/Agendas/trunk/src/Agendas.Domain/CompositePublicador.cs	Wed May 25 01:53:31 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/CompositePublicador.cs	Fri May 27 14:42:38 2011 -0300
@@ -16,10 +16,10 @@
 
 		#region IPublicador Members
 
-		public void Publicar(Evento evento)
+		public void Publicar(IEnumerable<Track> tracks)
 		{
 			foreach (IPublicador publicador in _publicadores)
-				publicador.Publicar(evento);
+				publicador.Publicar(tracks);
 		}
 
 		#endregion
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs	Wed May 25 01:53:31 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs	Fri May 27 14:42:38 2011 -0300
@@ -14,6 +14,7 @@
 
 		private readonly IList<Track> _tracks;
 		private Ponente _ponente;
+		private readonly ICollection<Track> _newTracks = new List<Track>();
 
 		/// <summary>
 		/// Título del evento
@@ -77,7 +78,7 @@
 		public static Evento Proponer(string titulo, Ponente ponente, string urlInvitacion)
 		{
 			var evento = new Evento {Titulo = titulo, Ponente = ponente, UrlInvitacion = urlInvitacion};
-			evento.AddTracks(new Track(evento, Accion.Proponer));
+			evento.AddTrack(new Track(evento, Accion.Proponer));
 
 			return evento;
 		}
@@ -109,7 +110,7 @@
 			Ponente = ponente;
 			Fecha = fecha;
 			UrlInvitacion = urlInvitacion;
-			AddTracks(new Track(this, Accion.Agendar));
+			AddTrack(new Track(this, Accion.Agendar));
 		}
 
 		public virtual void Actualizar(Ponente ponente, DateTime? fecha, string urlInvitacion)
@@ -118,31 +119,36 @@
 			Fecha = fecha;
 			UrlInvitacion = urlInvitacion;
 
-			AddTracks(new Track(this, Accion.Modificar));
+			AddTrack(new Track(this, Accion.Modificar));
 		}
 
 		public virtual void CambiarTitulo(string titulo)
 		{
 			Titulo = titulo;
-			AddTracks(new Track(this, Accion.CambiarTitulo));
+			AddTrack(new Track(this, Accion.CambiarTitulo));
 		}
 
 		public virtual void Confirmar()
 		{
-			AddTracks(new Track(this, Accion.Confirmar));
+			AddTrack(new Track(this, Accion.Confirmar));
 		}
 
 		public virtual void Publicar()
 		{
-			AddTracks(new Track(this, Accion.Publicar));
+			AddTrack(new Track(this, Accion.Publicar));
 		}
 
 		#endregion
 
-		private void AddTracks(Track track)
+		private void AddTrack(Track track)
 		{
+			_newTracks.Add(track);
 			_tracks.Add(track);
 		}
 
+		public virtual IEnumerable<Track> GetTrackNews()
+		{
+			return _newTracks;
+		}
 	}
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/IPublicador.cs	Wed May 25 01:53:31 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/IPublicador.cs	Fri May 27 14:42:38 2011 -0300
@@ -1,7 +1,9 @@
-namespace AltNetHispano.Agendas.Domain
+using System.Collections.Generic;
+
+namespace AltNetHispano.Agendas.Domain
 {
 	public interface IPublicador
 	{
-		void Publicar(Evento evento);
+		void Publicar(IEnumerable<Track> tracks);
 	}
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/IRecordador.cs	Wed May 25 01:53:31 2011 -0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-namespace AltNetHispano.Agendas.Domain
-{
-	public interface IRecordador
-	{
-		void Recordar(Evento evento);
-	}
-}
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Factories/AgendaFactory.cs	Wed May 25 01:53:31 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Factories/AgendaFactory.cs	Fri May 27 14:42:38 2011 -0300
@@ -13,7 +13,7 @@
 		public static Agenda GetAgenda()
 		{
 			ISessionFactory sessionFactory = NhHelper.GetSessionFactory();
-			return _agenda ?? (_agenda = new Agenda(null, null, new EventoRepository(sessionFactory), new PonenteRepository(sessionFactory)));
+			return _agenda ?? (_agenda = new Agenda(null, new EventoRepository(sessionFactory), new PonenteRepository(sessionFactory)));
 		}
 	}
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Google/GooglePublicador.cs	Wed May 25 01:53:31 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Google/GooglePublicador.cs	Fri May 27 14:42:38 2011 -0300
@@ -1,17 +1,14 @@
 using System;
+using System.Collections.Generic;
 using AltNetHispano.Agendas.Domain;
 
 namespace AltNetHispano.Agendas.Google
 {
 	public class GooglePublicador : IPublicador
 	{
-		#region IPublicador Members
-
-		public void Publicar(Evento evento)
+		public void Publicar(IEnumerable<Track> tracks)
 		{
 			throw new NotImplementedException();
 		}
-
-		#endregion
 	}
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs	Wed May 25 01:53:31 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs	Fri May 27 14:42:38 2011 -0300
@@ -1,4 +1,5 @@
 using System;
+using System.Collections.Generic;
 using System.Linq;
 using AltNetHispano.Agendas.Domain;
 using AltNetHispano.Agendas.Domain.Exceptions;
@@ -25,14 +26,14 @@
 			var publicador = new Mock<IPublicador>();
 			var repository = new Mock<IEventoRepository>();
 
-			publicador.Setup(p => p.Publicar(It.IsAny<Evento>())).Throws(new Exception("Error intencional"));
+			publicador.Setup(p => p.Publicar(It.IsAny<IEnumerable<Track>>())).Throws(new Exception("Error intencional"));
 
-			var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository);
+			var agenda = new Agenda(publicador.Object, repository.Object, DefaultPonenteRepository);
 
 			Assert.Throws<Exception>(() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion));
 			Assert.AreEqual(0, agenda.GetEventosAgendados().Count);
 
-			publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
+			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
 			repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0));
 		}
 
@@ -44,7 +45,7 @@
 			var publicador = new Mock<IPublicador>();
 			var repository = new Mock<IEventoRepository>();
 
-			var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository);
+			var agenda = new Agenda(publicador.Object, repository.Object, DefaultPonenteRepository);
 
 			Assert.Throws<IdentityContextNotConfiguredException>(
 				() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
@@ -60,19 +61,19 @@
 			var publicador = new Mock<IPublicador>();
 			var repository = new Mock<IEventoRepository>();
 
-			var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository);
+			var agenda = new Agenda(publicador.Object, repository.Object, DefaultPonenteRepository);
 
 			Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
 				urlInvitacion));
 
-			publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(0));
+			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(0));
 			repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0));
 		}
 
 		[Test]
 		public void Intentar_agendar_evento_sin_ponente()
 		{
-			var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPonenteRepository);
 
 			var r = agenda.Agendar("Van para publicar", string.Empty, DateTime.Now,
 				urlInvitacion);
@@ -88,14 +89,14 @@
 
 			var repository = new Mock<IEventoRepository>();
 
-			var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), null,
+			var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}),
 															repository.Object, DefaultPonenteRepository);
 
 			agenda.Agendar("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));
+			publicador1.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
+			publicador2.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
 			repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(1));
 		}
 
@@ -104,7 +105,7 @@
 		{
 			var publicador = new Mock<IPublicador>();
 
-			var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository);
+			var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPonenteRepository);
 
 			agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
 				urlInvitacion);
@@ -114,7 +115,7 @@
 			var eventos = agenda.GetEventosAgendados();
 			Assert.AreEqual(1, eventos.Count);
 
-			publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
+			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
 
 			var evento = eventos[0];
 			
@@ -131,12 +132,12 @@
 			var repository = DefaultEventoRepository;
 			var publicador = new Mock<IPublicador>();
 
-			var agenda = new Agenda(publicador.Object, null, repository, DefaultPonenteRepository);
+			var agenda = new Agenda(publicador.Object, repository, DefaultPonenteRepository);
 
 			agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
 				urlInvitacion);
 
-			publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
+			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
 
 			var evento = repository.GetEventosConFecha().First();
 			Assert.AreNotEqual(Guid.Empty, evento.Id);
@@ -145,7 +146,7 @@
 			DateTime fecha = evento.Fecha.Value.AddDays(7);
 			agenda.ModificarEvento(evento.Id, "otro titulo", "otro ponente", fecha, urlInvitacion);
 
-			publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(2));
+			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(2));
 
 			evento = repository.GetEventosConFecha().First();
 			Assert.AreEqual("otro titulo", evento.Titulo);
@@ -157,25 +158,24 @@
 				() => agenda.ModificarEvento(idEventoNoExistente, "algún título", "un ponente", DateTime.Now, urlInvitacion));
 		}
 
-		[Test]
+		[Test, Ignore("Por ahora no existe el concepto de recordar")]
 		public void Agendar_y_recordar_evento()
 		{
 			var publicador1 = new Mock<IPublicador>();
 			var publicador2 = new Mock<IPublicador>();
-			var recordador1 = new Mock<IRecordador>();
 
-			var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), recordador1.Object,
+			var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}),
 															DefaultEventoRepository, DefaultPonenteRepository);
 
 			agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
 				urlInvitacion);
 
 			var van = agenda.GetEventosAgendados().Single(v => v.Titulo == "Van para publicar");
-			agenda.Recordar(van.Id);
+			//agenda.Recordar(van.Id);
 
-			publicador1.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
-			publicador2.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
-			recordador1.Verify(r => r.Recordar(It.IsAny<Evento>()), Times.Exactly(1));
+			publicador1.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
+			publicador2.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
+			//recordador1.Verify(r => r.Recordar(It.IsAny<Evento>()), Times.Exactly(1));
 		}
 
 		[Test]
@@ -183,9 +183,8 @@
 		{
 			var publicador1 = new Mock<IPublicador>();
 			var publicador2 = new Mock<IPublicador>();
-			var recordador1 = new Mock<IRecordador>();
 
-			var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), recordador1.Object,
+			var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }),
 															DefaultEventoRepository, DefaultPonenteRepository);
 
 			agenda.Proponer("Html 5", "jjmontes", urlInvitacion);
--- a/Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs	Wed May 25 01:53:31 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs	Fri May 27 14:42:38 2011 -0300
@@ -27,10 +27,10 @@
 				var ponente = new Ponente("Carlos Blé");
 				_ponenteRepository.Save(ponente);
 
-				var van = Evento.Proponer("TDD - Diseño Basado en Ejemplos", ponente, string.Empty);
-				_eventoRepository.Save(van);
+				var evento = Evento.Proponer("TDD - Diseño Basado en Ejemplos", ponente, string.Empty);
+				_eventoRepository.Save(evento);
 
-				return van.Id;
+				return evento.Id;
 			}
 		}
 
--- a/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs	Wed May 25 01:53:31 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs	Fri May 27 14:42:38 2011 -0300
@@ -17,7 +17,7 @@
 		{
 			var publicador = new Mock<IPublicador>();
 
-			var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository);
+			var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPonenteRepository);
 
 			agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), 
 				urlInvitacion);
@@ -27,7 +27,7 @@
 			var eventos = agenda.GetEventosAgendados();
 			Assert.AreEqual(2, eventos.Count);
 
-			publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(2));
+			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(2));
 
 			Assert.AreEqual(1, DefaultPonenteRepository.GetAll().Count);
 
@@ -45,9 +45,10 @@
 		{
 			var publicador = new Mock<IPublicador>();
 			Evento evento = null;
-			publicador.Setup(p => p.Publicar(It.IsAny<Evento>())).Callback<Evento>(e => evento = e);
+			publicador.Setup(p => p.Publicar(It.IsAny<IEnumerable<Track>>())).Callback<IEnumerable<Track>>(
+				t => evento = t.First().Evento);
 
-			var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository);
+			var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPonenteRepository);
 
 			agenda.RegistrarPonente("Fabio Maulo", "fabiomaulo@gmail.com", "@fabiomaulo", "http://fabiomaulo.blogspot.com");
 
@@ -55,7 +56,7 @@
 
 			Assert.AreEqual(1, agenda.GetEventosAgendados().Count);
 
-			publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
+			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
 
 			Assert.IsNotNull(evento);
 			Assert.AreEqual("Fabio Maulo", evento.Ponente.Nombre);
@@ -69,16 +70,17 @@
 		{
 			var publicador = new Mock<IPublicador>();
 			Evento evento = null;
-			publicador.Setup(p => p.Publicar(It.IsAny<Evento>())).Callback<Evento>(e => evento = e);
+			publicador.Setup(p => p.Publicar(It.IsAny<IEnumerable<Track>>())).Callback<IEnumerable<Track>>(
+				t => evento = t.First().Evento);
 
-			var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository);
+			var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPonenteRepository);
 
 			agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26),
 				urlInvitacion);
 
 			Assert.AreEqual(1, agenda.GetEventosAgendados().Count);
 
-			publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
+			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
 
 			Assert.IsNotNull(evento);
 			Assert.AreEqual("Fabio Maulo", evento.Ponente.Nombre);
@@ -88,7 +90,7 @@
 		[Test]
 		public void Quitar_ponente_de_un_evento()
 		{
-			var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPonenteRepository);
 
 			const string titulo = "Audit (parallel model) con NHibernate 3";
 			Guid eventoId;
@@ -121,7 +123,7 @@
 		[Test]
 		public void Cambiar_ponente_de_un_evento()
 		{
-			var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPonenteRepository);
 
 			const string titulo = "Audit (parallel model) con NHibernate 3";
 			Guid eventoId;
--- a/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs	Wed May 25 01:53:31 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs	Fri May 27 14:42:38 2011 -0300
@@ -17,7 +17,7 @@
 		[Test]
 		public void Crear_modificar_y_publicar_evento_propuesto()
 		{
-			var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPonenteRepository);
 
 			agenda.Proponer("Van", null, urlInvitacion);
 			{
@@ -52,7 +52,7 @@
 		[Test]
 		public void Intentar_agendar_evento_propuesto_sin_indicar_fecha()
 		{
-			var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPonenteRepository);
 
 			{
 				agenda.Proponer("Van propuesta", null, urlInvitacion);
@@ -70,7 +70,7 @@
 		[Test]
 		public void Intentar_agendar_evento_propuesto_sin_indicar_ponente()
 		{
-			var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPonenteRepository);
 
 			{
 				agenda.Proponer("Van propuesta", null, urlInvitacion);
@@ -92,7 +92,7 @@
 		{
 			var idEventoNoExistente = new Guid("99999999999999999999999999999999");
 
-			var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPonenteRepository);
 
 			Assert.Throws<EventoNotFoundException>(() => agenda.GetEvento(idEventoNoExistente));
 		}
@@ -102,7 +102,7 @@
 		{
 			var repository = new Mock<IEventoRepository>();
 
-			var agenda = new Agenda(null, null, repository.Object, DefaultPonenteRepository);
+			var agenda = new Agenda(null, repository.Object, DefaultPonenteRepository);
 
 			var r = agenda.Proponer(string.Empty, null, urlInvitacion);
 			Assert.IsFalse(r.Succeful);
@@ -113,7 +113,7 @@
 		[Test]
 		public void Intentar_proponer_evento_sin_usuario_autenticado()
 		{
-			var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPonenteRepository);
 
 			SetCurrentUser(null);
 
@@ -123,7 +123,7 @@
 		[Test]
 		public void Proponer_evento_correctamente()
 		{
-			var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPonenteRepository);
 			agenda.Proponer("Van propuesta", null, urlInvitacion);
 
 			IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
@@ -135,7 +135,7 @@
 		[Test]
 		public void Verificar_propuesta_separada_de_publicacion()
 		{
-			var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPonenteRepository);
 
 			agenda.Proponer("Van propuesta", null, urlInvitacion);
 			var r = agenda.Agendar("Van publicada", "jjmontes", DateTime.Now,
--- a/Agendas/trunk/src/Agendas.Tests/TrackTests.cs	Wed May 25 01:53:31 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/TrackTests.cs	Fri May 27 14:42:38 2011 -0300
@@ -15,7 +15,7 @@
 		{
 			var repository = DefaultEventoRepository;
 
-			var agenda = new Agenda(null, null, repository, DefaultPonenteRepository);
+			var agenda = new Agenda(null, repository, DefaultPonenteRepository);
 
 			var fecha = DateTime.Now.AddDays(5);
 			agenda.Agendar("Html 5", "jjmontes", fecha, urlInvitacion);
@@ -44,7 +44,7 @@
 		{
 			var repository = DefaultEventoRepository;
 
-			var agenda = new Agenda(null, null, repository, DefaultPonenteRepository);
+			var agenda = new Agenda(null, repository, DefaultPonenteRepository);
 
 			agenda.Agendar("Html 5", "jjmontes", DateTime.Now,
 				urlInvitacion);
--- a/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs	Wed May 25 01:53:31 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs	Fri May 27 14:42:38 2011 -0300
@@ -11,7 +11,7 @@
 
 		public Workflow(IPublicador publicador, IEventoRepository eventoRepository, IPonenteRepository ponenteRepository)
 		{
-			_agenda = new Agenda(publicador, null, eventoRepository, ponenteRepository);
+			_agenda = new Agenda(publicador, eventoRepository, ponenteRepository);
 		}
 
 		public void Proponer()
--- a/Agendas/trunk/src/Agendas.Tests/Workflows/WorkflowTests.cs	Wed May 25 01:53:31 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/Workflows/WorkflowTests.cs	Fri May 27 14:42:38 2011 -0300
@@ -1,4 +1,5 @@
-using System.Linq;
+using System.Collections.Generic;
+using System.Linq;
 using AltNetHispano.Agendas.Domain;
 using Moq;
 using NUnit.Framework;
@@ -22,7 +23,7 @@
 		public void Proponer()
 		{
 			_workflow.Proponer();
-			_publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Once());
+			_publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Once());
 		}
 
 		[Test]
@@ -32,7 +33,7 @@
 
 			_workflow.Agendar();
 
-			_publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(2));
+			_publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(2));
 		}
 
 		[Test]
@@ -47,7 +48,7 @@
 
 			_workflow.Confirmar(evento.Id);
 
-			_publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(3));
+			_publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(3));
 		}
 
 		[Test]
@@ -64,7 +65,7 @@
 
 			_workflow.Publicar(evento.Id);
 
-			_publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(4));
+			_publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(4));
 		}
 	}
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Twitter/TwitterPublicador.cs	Wed May 25 01:53:31 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Twitter/TwitterPublicador.cs	Fri May 27 14:42:38 2011 -0300
@@ -1,26 +1,14 @@
 using System;
+using System.Collections.Generic;
 using AltNetHispano.Agendas.Domain;
 
 namespace AltNetHispano.Agendas.Twitter
 {
-	public class TwitterPublicador : IPublicador, IRecordador
+	public class TwitterPublicador : IPublicador
 	{
-		#region IPublicador Members
-
-		public void Publicar(Evento evento)
+		public void Publicar(IEnumerable<Track> tracks)
 		{
 			throw new NotImplementedException();
 		}
-
-		#endregion
-
-		#region IRecordador Members
-
-		public void Recordar(Evento evento)
-		{
-			throw new NotImplementedException();
-		}
-
-		#endregion
 	}
 }
\ No newline at end of file