changeset 138:62791999ad01

Agregando relación entre Evento y Patrocinador
author nelopauselli
date Thu, 28 Jul 2011 10:13:28 -0300
parents 2d1adbaf0373
children 18e5a78186e4
files Agendas/trunk/src/Agendas.Domain/Agenda.cs Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj Agendas/trunk/src/Agendas.Domain/Evento.cs Agendas/trunk/src/Agendas.Domain/Patrocinador.cs Agendas/trunk/src/Agendas.Factories/AgendaFactory.cs Agendas/trunk/src/Agendas.Google.Test/PublicadorTest.cs Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj Agendas/trunk/src/Agendas.Tests/Cruds/PatrocinadorCrud.cs Agendas/trunk/src/Agendas.Tests/Eventos_y_patrocinadores_tests.cs Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Agendas/trunk/src/Agendas.Tests/TestBase.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.Tests/images/jetbrains.png Agendas/trunk/src/Agendas.Twitter.Tests/Publicador_tests.cs
diffstat 18 files changed, 241 insertions(+), 59 deletions(-) [+]
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Thu Jul 28 10:13:28 2011 -0300
@@ -1,5 +1,7 @@
 using System;
+using System.Collections;
 using System.Collections.Generic;
+using System.Linq;
 using AltNetHispano.Agendas.Domain.Exceptions;
 using AltNetHispano.Agendas.Domain.Repositories;
 
@@ -9,12 +11,15 @@
 	{
 		private readonly IEventoRepository _eventosRepository;
 		private readonly IPersonaRepository _personaRepository;
+		private readonly IPatrocinadorRepository _patrocinadorRepository;
+
 		private readonly IPublicador _publicador;
 
 		public Agenda(IPublicador publicador, IEventoRepository eventosRepository,
-		              IPersonaRepository personaRepository)
+		              IPersonaRepository personaRepository, IPatrocinadorRepository patrocinadorRepository)
 		{
 			_publicador = publicador;
+			_patrocinadorRepository = patrocinadorRepository;
 			_personaRepository = personaRepository;
 			_eventosRepository = eventosRepository;
 		}
@@ -204,5 +209,34 @@
 
             return new Resultado(true);
 	    }
+
+		public void IndicarPatrocinadores(Guid eventoId, Guid[] patrocinadores)
+		{
+			var evento = GetEvento(eventoId);
+
+			var agregar = new List<Patrocinador>();
+			var quitar = new List<Patrocinador>();
+
+			foreach (var patrocinadorId in patrocinadores)
+			{
+				if (!evento.Patrocinadores.Any(p => p.Id == patrocinadorId))
+				{
+					var patrocinador = _patrocinadorRepository.Get(patrocinadorId);
+					agregar.Add(patrocinador);
+				}
+			}
+
+			foreach (var patrocinador in evento.Patrocinadores)
+			{
+				if (!patrocinadores.Any(p => p == patrocinador.Id))
+					quitar.Add(patrocinador);
+			}
+
+			foreach (var patrocinador in agregar)
+				evento.AddPatrocinador(patrocinador);
+
+			foreach (var patrocinador in quitar)
+				evento.RemovePatrocinador(patrocinador);
+		}
 	}
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj	Thu Jul 28 10:13:28 2011 -0300
@@ -33,6 +33,7 @@
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
     <Reference Include="Microsoft.CSharp" />
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs	Thu Jul 28 10:13:28 2011 -0300
@@ -1,4 +1,5 @@
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using AltNetHispano.Agendas.Domain.Exceptions;
 
@@ -9,6 +10,7 @@
 		protected Evento()
 		{
 			_tracks = new List<Track>();
+			_patrocinadores=new List<Patrocinador>();
 		}
 
 		#region Propiedades del Evento
@@ -89,8 +91,9 @@
 	    }
 
 	    private EventoState _eventoState;
+		private IList<Patrocinador> _patrocinadores;
 
-	  /// <summary>
+		/// <summary>
     /// Obtiene una instancia de la clase que representa el estado del evento
     /// </summary>
     public virtual EventoState GetEstado()
@@ -112,7 +115,25 @@
 
     public virtual TipoEvento Tipo { get; private set; }
 
-	  #endregion
+		public IEnumerable<Patrocinador> Patrocinadores
+		{
+			get {
+				return _patrocinadores;
+			}
+		}
+
+		internal virtual void AddPatrocinador(Patrocinador patrocinador)
+		{
+			_patrocinadores.Add(patrocinador);
+		}
+
+		internal virtual void RemovePatrocinador(Patrocinador patrocinador)
+		{
+			_patrocinadores.Remove(patrocinador);
+		}
+		
+
+		#endregion
 
 		#region Acciones sobre el evento
 
--- a/Agendas/trunk/src/Agendas.Domain/Patrocinador.cs	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Patrocinador.cs	Thu Jul 28 10:13:28 2011 -0300
@@ -1,4 +1,7 @@
-using System;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.IO;
 
 namespace AltNetHispano.Agendas.Domain
 {
@@ -15,5 +18,13 @@
 		protected Patrocinador()
 		{
 		}
+
+		public virtual void LoadLogo(string path)
+		{
+			var image = Image.FromFile(path);
+			var ms = new MemoryStream();
+			image.Save(ms, image.RawFormat);
+			Logo = ms.ToArray();
+		}
 	}
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Factories/AgendaFactory.cs	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Factories/AgendaFactory.cs	Thu Jul 28 10:13:28 2011 -0300
@@ -19,7 +19,7 @@
 			return _agenda ??
 			       (_agenda =
 			        new Agenda(new TwitterPublicador(), new EventoRepository(sessionFactory),
-			                   new PersonaRepository(sessionFactory)));
+			                   new PersonaRepository(sessionFactory), new PatrocinadorRepository(sessionFactory)));
 		}
 
 		public static IPersonaRepository GetPersonaRepository()
--- a/Agendas/trunk/src/Agendas.Google.Test/PublicadorTest.cs	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Google.Test/PublicadorTest.cs	Thu Jul 28 10:13:28 2011 -0300
@@ -20,7 +20,7 @@
             adapter.Setup(ad => ad.CreateEvent(It.IsAny<IGEventDetail>(), out message)).Returns(true);
 
             var publicador = new GooglePublicador(adapter.Object);
-            var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
             
             agenda.Proponer("Agile Patterns", null, null, TipoEvento.Van);
             adapter.Verify(ad => ad.CreateEvent(It.IsAny<IGEventDetail>(), out message), Times.Never());
@@ -36,7 +36,7 @@
             var detail = new VanGEventDetail();
 
             var publicador = new GooglePublicador(adapter.Object);
-            var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
             agenda.Proponer("Agile Patterns", null, null, TipoEvento.Van);
             agenda.Agendar("Agile Patterns", "Alejandro Labra", new DateTime(2011, 07, 09), "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", TipoEvento.Van);
 
@@ -72,7 +72,7 @@
             var detail = new CafeGEventDetail();
 
             var publicador = new GooglePublicador(adapter.Object);
-            var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
             agenda.Proponer("Agile Patterns", null, null, TipoEvento.Cafe);
             agenda.Agendar("Agile Patterns", "Alejandro Labra", new DateTime(2011, 07, 09), "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", TipoEvento.Cafe);
 
@@ -108,7 +108,7 @@
             var detail = new EstudioGEventDetail();
 
             var publicador = new GooglePublicador(adapter.Object);
-            var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
             agenda.Proponer("Agile Patterns", null, null, TipoEvento.GrupoEstudio);
             agenda.Agendar("Agile Patterns", "Alejandro Labra", new DateTime(2011, 07, 09), "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", TipoEvento.GrupoEstudio);
 
@@ -145,7 +145,7 @@
             adapter.Setup(ad => ad.DeleteEvent(It.IsAny<DateTime>(), It.IsAny<DateTime>(), out message)).Returns(true);
 
             var publicador = new GooglePublicador(adapter.Object);
-            var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
             agenda.Proponer("Agile Patterns", null, null, TipoEvento.Van);
             adapter.Verify(ad => ad.DeleteEvent(It.IsAny<DateTime>(), It.IsAny<DateTime>(), out message), Times.Never());
--- a/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs	Thu Jul 28 10:13:28 2011 -0300
@@ -29,7 +29,7 @@
 
 			publicador.Setup(p => p.Publicar(It.IsAny<IEnumerable<Track>>())).Throws(new Exception("Error intencional"));
 
-			var agenda = new Agenda(publicador.Object, repository.Object, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador.Object, repository.Object, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			Assert.Throws<Exception>(
 				() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion, TipoEvento.Van));
@@ -47,7 +47,7 @@
 			var publicador = new Mock<IPublicador>();
 			var repository = new Mock<IEventoRepository>();
 
-			var agenda = new Agenda(publicador.Object, repository.Object, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador.Object, repository.Object, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			Assert.Throws<IdentityContextNotConfiguredException>(
 				() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
@@ -63,7 +63,7 @@
 			var publicador = new Mock<IPublicador>();
 			var repository = new Mock<IEventoRepository>();
 
-			var agenda = new Agenda(publicador.Object, repository.Object, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador.Object, repository.Object, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
 		urlInvitacion, TipoEvento.Van));
@@ -75,7 +75,7 @@
 		[Test]
 		public void Intentar_agendar_evento_sin_ponente()
 		{
-			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			var r = agenda.Agendar("Van para publicar", string.Empty, DateTime.Now,
 		urlInvitacion, TipoEvento.Van);
@@ -92,7 +92,7 @@
 			var repository = new Mock<IEventoRepository>();
 
 			var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }),
-															repository.Object, DefaultPersonaRepository);
+															repository.Object, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
 		urlInvitacion, TipoEvento.Van);
@@ -107,7 +107,7 @@
 		{
 			var publicador = new Mock<IPublicador>();
 
-			var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
 		urlInvitacion, TipoEvento.Van);
@@ -130,7 +130,7 @@
 			var repository = DefaultEventoRepository;
 			var publicador = new Mock<IPublicador>();
 
-			var agenda = new Agenda(publicador.Object, repository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador.Object, repository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
 		urlInvitacion, TipoEvento.Van);
@@ -163,7 +163,7 @@
 			var publicador2 = new Mock<IPublicador>();
 
 			var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }),
-															DefaultEventoRepository, DefaultPersonaRepository);
+															DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
 		urlInvitacion, TipoEvento.Van);
@@ -183,7 +183,7 @@
 			var publicador2 = new Mock<IPublicador>();
 
 			var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }),
-															DefaultEventoRepository, DefaultPersonaRepository);
+															DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			agenda.Proponer("Html 5", "jjmontes", urlInvitacion, TipoEvento.Van);
 			Assert.AreEqual(1, agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).Count);
@@ -210,7 +210,7 @@
 		{
 			var publicador1 = new Mock<IPublicador>();
 
-			var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 			agenda.Proponer("Html 5", "jjmontes", urlInvitacion, TipoEvento.Van);
 
 			var evento =
@@ -225,7 +225,7 @@
 		{
 			var publicador1 = new Mock<IPublicador>();
 
-			var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 			agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van);
 
 			var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5");
@@ -239,7 +239,7 @@
         {
             var publicador1 = new Mock<IPublicador>();
 
-            var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
             agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van);
 
             var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5");
@@ -256,7 +256,7 @@
         {
             var publicador1 = new Mock<IPublicador>();
 
-            var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
             agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van);
 
             var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5");
@@ -274,7 +274,7 @@
 		{
 			var publicador1 = new Mock<IPublicador>();
 
-			var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 			agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van);
 
 			var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5");
@@ -290,7 +290,7 @@
 		{
 			var publicador1 = new Mock<IPublicador>();
 
-			var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 			agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van);
 
 			var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5");
@@ -307,7 +307,7 @@
 		{
 			var publicador1 = new Mock<IPublicador>();
 
-			var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 			agenda.Agendar("Html 5", "jjmontes", DateTime.MinValue, urlInvitacion, TipoEvento.Van);
 
 			var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5");
@@ -326,7 +326,7 @@
 		{
 			var publicador1 = new Mock<IPublicador>();
 
-			var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 			agenda.Proponer("Html 5", "jjmontes", urlInvitacion, TipoEvento.Van);
 
 			var evento =
@@ -343,7 +343,7 @@
 		{
 			var publicador1 = new Mock<IPublicador>();
 
-			var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 			agenda.Proponer("Html 5", "jjmontes", urlInvitacion, TipoEvento.Van);
 
 			var evento =
--- a/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj	Thu Jul 28 10:13:28 2011 -0300
@@ -64,7 +64,6 @@
     <Reference Include="System" />
     <Reference Include="System.Configuration" />
     <Reference Include="System.Core" />
-    <Reference Include="System.Drawing" />
     <Reference Include="System.ServiceModel" />
     <Reference Include="System.Xml.Linq" />
     <Reference Include="System.Data.DataSetExtensions" />
@@ -82,6 +81,7 @@
     <Compile Include="Cruds\PatrocinadorCrudNhTests.cs" />
     <Compile Include="Cruds\RequestEmulator.cs" />
     <Compile Include="DateTimeFormattingTests.cs" />
+    <Compile Include="Eventos_y_patrocinadores_tests.cs" />
     <Compile Include="PersonaServiceTests.cs" />
     <Compile Include="PonentesTests.cs" />
     <Compile Include="PropuestasTests.cs" />
@@ -132,6 +132,9 @@
     <Content Include="images\apress.gif">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </Content>
+    <Content Include="images\jetbrains.png">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </Content>
   </ItemGroup>
   <ItemGroup />
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
--- a/Agendas/trunk/src/Agendas.Tests/Cruds/PatrocinadorCrud.cs	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/Cruds/PatrocinadorCrud.cs	Thu Jul 28 10:13:28 2011 -0300
@@ -1,7 +1,4 @@
 using System;
-using System.Drawing;
-using System.IO;
-using System.Linq;
 using AltNetHispano.Agendas.Domain;
 using AltNetHispano.Agendas.Domain.Repositories;
 using NUnit.Framework;
@@ -26,12 +23,8 @@
 			{
 				var patrocinador = new Patrocinador("APRESS");
 
-				var image = Image.FromFile("images/apress.gif");
-				var ms = new MemoryStream();
-				image.Save(ms, image.RawFormat);
-				_logo = ms.ToArray();
-
-				patrocinador.Logo = _logo;
+				patrocinador.LoadLogo("images/apress.gif");
+				_logo = patrocinador.Logo;
 
 				_patrocinadorRepository.Save(patrocinador);
 				return patrocinador.Id;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Tests/Eventos_y_patrocinadores_tests.cs	Thu Jul 28 10:13:28 2011 -0300
@@ -0,0 +1,108 @@
+using System;
+using System.Linq;
+using AltNetHispano.Agendas.Domain;
+using Moq;
+using NUnit.Framework;
+
+namespace AltNetHispano.Agendas.Tests
+{
+	[TestFixture]
+	public class Eventos_y_patrocinadores_tests : TestBase
+	{
+		private Guid _apressId;
+		private Guid _jetbrainsId;
+		private Guid _eventoId;
+		private Agenda _agenda;
+
+		[SetUp]
+		public void CrearDatos()
+		{
+			_agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
+
+			_apressId = CrearPatrocinador("Apress", "images/apress.gif");
+			_jetbrainsId = CrearPatrocinador("jetbrains", "images/jetbrains.png");
+			_eventoId = CrearEvento();
+		}
+
+		[Test]
+		public void Indicar_patrociadores()
+		{
+			_agenda.IndicarPatrocinadores(_eventoId, new[] { _apressId, _jetbrainsId });
+
+			var evento = DefaultEventoRepository.GetActivos().First();
+			Assert.AreNotEqual(Guid.Empty, evento.Id);
+			Assert.IsNotNull(evento.Fecha);
+			Assert.IsNotNull(evento.Patrocinadores);
+			Assert.IsTrue(evento.Patrocinadores.Any());
+			Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "Apress"));
+			Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "jetbrains"));
+		}
+
+		[Test]
+		public void Agregar_patrociador()
+		{
+			{
+				_agenda.IndicarPatrocinadores(_eventoId, new[] {_apressId});
+
+				var evento = DefaultEventoRepository.GetActivos().First();
+				Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "Apress"));
+				Assert.IsFalse(evento.Patrocinadores.Any(p => p.Nombre == "jetbrains"));
+			}
+
+			{
+				_agenda.IndicarPatrocinadores(_eventoId, new[] { _apressId, _jetbrainsId });
+
+				var evento = DefaultEventoRepository.GetActivos().First();
+				Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "Apress"));
+				Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "jetbrains"));
+			}
+		}
+
+		[Test]
+		public void Quitar_patrociador()
+		{
+			{
+				_agenda.IndicarPatrocinadores(_eventoId, new[] { _apressId, _jetbrainsId });
+
+				var evento = DefaultEventoRepository.GetActivos().First();
+				Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "Apress"));
+				Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "jetbrains"));
+			}
+
+			{
+				_agenda.IndicarPatrocinadores(_eventoId, new[] { _apressId });
+
+				var evento = DefaultEventoRepository.GetActivos().First();
+				Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "Apress"));
+				Assert.IsFalse(evento.Patrocinadores.Any(p => p.Nombre == "jetbrains"));
+			}
+
+			{
+				_agenda.IndicarPatrocinadores(_eventoId, new Guid[] {});
+
+				var evento = DefaultEventoRepository.GetActivos().First();
+				Assert.IsFalse(evento.Patrocinadores.Any());
+			}
+		}
+
+		private static Guid CrearPatrocinador(string nombre, string images)
+		{
+			var patrocinador = new Patrocinador(nombre);
+			patrocinador.LoadLogo(images);
+
+			var patrocinadorRepository = DefaultPatrocinadorRepository;
+			patrocinadorRepository.Save(patrocinador);
+
+			return patrocinador.Id;
+		}
+
+		private Guid CrearEvento()
+		{
+			_agenda.Agendar("ADFS", "Nelo Pauselli", DateTime.Today.AddDays(7), null, TipoEvento.Van);
+
+			var evento = DefaultEventoRepository.GetActivos().First();
+			return evento.Id;
+		}
+
+	}
+}
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs	Thu Jul 28 10:13:28 2011 -0300
@@ -18,7 +18,7 @@
 			var publicador = new Mock<IPublicador>();
 			Assert.AreEqual(1, DefaultPersonaRepository.GetAll().Count);
 
-			var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26),
         urlInvitacion, TipoEvento.Van);
@@ -45,7 +45,7 @@
 			publicador.Setup(p => p.Publicar(It.IsAny<IEnumerable<Track>>())).Callback<IEnumerable<Track>>(
 				t => evento = t.First().Evento);
 
-			var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			agenda.RegistrarPonente("Fabio Maulo", "fabiomaulo@gmail.com", "@fabiomaulo", "http://fabiomaulo.blogspot.com");
 
@@ -70,7 +70,7 @@
 			publicador.Setup(p => p.Publicar(It.IsAny<IEnumerable<Track>>())).Callback<IEnumerable<Track>>(
 				t => evento = t.First().Evento);
 
-			var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26),
         urlInvitacion, TipoEvento.Van);
@@ -87,7 +87,7 @@
 		[Test]
 		public void Quitar_ponente_de_un_evento()
 		{
-			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			const string titulo = "Audit (parallel model) con NHibernate 3";
 			Guid eventoId;
@@ -118,7 +118,7 @@
 		[Test]
 		public void Cambiar_ponente_de_un_evento()
 		{
-			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			const string titulo = "Audit (parallel model) con NHibernate 3";
 			Guid eventoId;
--- a/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs	Thu Jul 28 10:13:28 2011 -0300
@@ -17,7 +17,7 @@
 		[Test]
 		public void Crear_modificar_y_publicar_evento_propuesto()
 		{
-			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			agenda.Proponer("Van", null, urlInvitacion, TipoEvento.Van);
 			{
@@ -52,7 +52,7 @@
 		[Test]
 		public void Intentar_agendar_evento_propuesto_sin_indicar_fecha()
 		{
-			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			{
 				agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van);
@@ -70,7 +70,7 @@
 		[Test]
 		public void Intentar_agendar_evento_propuesto_sin_indicar_ponente()
 		{
-			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			{
 				agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van);
@@ -92,7 +92,7 @@
 		{
 			var idEventoNoExistente = new Guid("99999999999999999999999999999999");
 
-			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			Assert.Throws<EventoNotFoundException>(() => agenda.GetEvento(idEventoNoExistente));
 		}
@@ -102,7 +102,7 @@
 		{
 			var repository = new Mock<IEventoRepository>();
 
-			var agenda = new Agenda(null, repository.Object, DefaultPersonaRepository);
+			var agenda = new Agenda(null, repository.Object, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			var r = agenda.Proponer(string.Empty, null, urlInvitacion, TipoEvento.Van);
 			Assert.IsFalse(r.Succeful);
@@ -113,7 +113,7 @@
 		[Test]
 		public void Intentar_proponer_evento_sin_usuario_autenticado()
 		{
-			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			SetCurrentUser(null, null);
 
@@ -123,7 +123,7 @@
 		[Test]
 		public void Proponer_evento_correctamente()
 		{
-			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 			agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van);
 
 			IList<Evento> eventosPropuestos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance());
@@ -135,7 +135,7 @@
 		[Test]
 		public void Verificar_propuesta_separada_de_publicacion()
 		{
-			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van);
 			var r = agenda.Agendar("Van publicada", "jjmontes", DateTime.Now,
--- a/Agendas/trunk/src/Agendas.Tests/TestBase.cs	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/TestBase.cs	Thu Jul 28 10:13:28 2011 -0300
@@ -1,6 +1,5 @@
 using AltNetHispano.Agendas.Domain;
 using AltNetHispano.Agendas.Domain.Repositories;
-using AltNetHispano.Agendas.Domain.Services;
 using AltNetHispano.Agendas.Repositories.Memory;
 using Moq;
 using NUnit.Framework;
@@ -19,6 +18,12 @@
 			get { return new PersonaRepository(); }
 		}
 
+		protected static IPatrocinadorRepository DefaultPatrocinadorRepository
+		{
+			get { return new PatrocinadorRepository(); }
+		}
+		
+
 		[SetUp]
 		public void LimpiarEventos()
 		{
@@ -26,6 +31,12 @@
 		}
 
 		[SetUp]
+		public void PatrocinadoresEventos()
+		{
+			PatrocinadorRepository.Clear();
+		}
+
+		[SetUp]
 		public void LimpiarPonentes()
 		{
 			PersonaRepository.Clear();
--- a/Agendas/trunk/src/Agendas.Tests/TrackTests.cs	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/TrackTests.cs	Thu Jul 28 10:13:28 2011 -0300
@@ -15,7 +15,7 @@
 		{
 			var repository = DefaultEventoRepository;
 
-			var agenda = new Agenda(null, repository, DefaultPersonaRepository);
+			var agenda = new Agenda(null, repository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			var fecha = DateTime.Now.AddDays(5);
 			agenda.Agendar("Html 5", "jjmontes", fecha, urlInvitacion, TipoEvento.Van);
@@ -50,7 +50,7 @@
 		{
 			var repository = DefaultEventoRepository;
 
-			var agenda = new Agenda(null, repository, DefaultPersonaRepository);
+			var agenda = new Agenda(null, repository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			agenda.Agendar("Html 5", "jjmontes", DateTime.Now,
         urlInvitacion, TipoEvento.Van);
--- a/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs	Thu Jul 28 10:13:28 2011 -0300
@@ -9,9 +9,9 @@
 	{
 		private readonly Agenda _agenda;
 
-		public Workflow(IPublicador publicador, IEventoRepository eventoRepository, IPersonaRepository personaRepository)
+		public Workflow(IPublicador publicador, IEventoRepository eventoRepository, IPersonaRepository personaRepository, IPatrocinadorRepository patrocinadorRepository)
 		{
-			_agenda = new Agenda(publicador, eventoRepository, personaRepository);
+			_agenda = new Agenda(publicador, eventoRepository, personaRepository, patrocinadorRepository);
 		}
 
 		public void Proponer()
--- a/Agendas/trunk/src/Agendas.Tests/Workflows/WorkflowTests.cs	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/Workflows/WorkflowTests.cs	Thu Jul 28 10:13:28 2011 -0300
@@ -16,7 +16,7 @@
 		public void InitPublicador()
 		{
 			_publicador = new Mock<IPublicador>();
-			_workflow = new Workflow(_publicador.Object, DefaultEventoRepository, DefaultPersonaRepository);
+			_workflow = new Workflow(_publicador.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 		}
 
 		[Test]
Binary file Agendas/trunk/src/Agendas.Tests/images/jetbrains.png has changed
--- a/Agendas/trunk/src/Agendas.Twitter.Tests/Publicador_tests.cs	Thu Jul 28 09:26:24 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Twitter.Tests/Publicador_tests.cs	Thu Jul 28 10:13:28 2011 -0300
@@ -29,7 +29,7 @@
 
 			var publicador = new TwitterPublicador(adapter.Object);
 
-			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 
 			agenda.Proponer("Identity Providers", null, null, TipoEvento.GrupoEstudio);
 
@@ -56,7 +56,7 @@
 
 			var publicador = new TwitterPublicador(adapter.Object);
 
-			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository);
+			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
 			agenda.Proponer("Identity Providers", null, null, TipoEvento.GrupoEstudio);
 
 			adapter.Verify(a => a.UpdateStatus(It.IsAny<OAuthTokens>(), It.IsAny<string>()), Times.Once());