changeset 61:cb3f7b47c1f0

Relación de Ponente a Eventos de los que es el ponente.
author nelopauselli
date Tue, 17 May 2011 01:27:03 -0300
parents 02e163f2ca38
children c40b97bbed01
files Agendas/trunk/src/Agendas.Domain/Evento.cs Agendas/trunk/src/Agendas.Domain/Ponente.cs Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Agendas/trunk/src/Agendas.Tests/PulicarTests.cs
diffstat 4 files changed, 101 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs	Mon May 16 21:40:40 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs	Tue May 17 01:27:03 2011 -0300
@@ -12,7 +12,7 @@
 		{
 			var evento = new Evento { Titulo = titulo, Ponente = ponente };
 			evento.AddTracks(new Track(Accion.Proponer));
-
+			
 			return evento;
 		}
 
@@ -33,7 +33,20 @@
 		public string Titulo { get; private set; }
 		public DateTime? Fecha { get; private set; }
 		public string Sintesis { get; private set; }
-		public Ponente Ponente { get; private set; }
+		
+		private Ponente _ponente;
+		public Ponente Ponente
+		{
+			get { return _ponente; }
+			private set
+			{
+				if (value == null && _ponente != null || value != _ponente && _ponente != null)
+					_ponente.RemoveEvento(this);
+				if (value != null)
+					value.AddEvento(this);
+				_ponente = value;
+			}
+		}
 
 		public IEnumerable<string> Enlaces
 		{
--- a/Agendas/trunk/src/Agendas.Domain/Ponente.cs	Mon May 16 21:40:40 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Ponente.cs	Tue May 17 01:27:03 2011 -0300
@@ -1,7 +1,12 @@
-namespace AltNetHispano.Agendas.Domain
+using System;
+using System.Collections.Generic;
+
+namespace AltNetHispano.Agendas.Domain
 {
 	public class Ponente : Identificable
 	{
+		private readonly IList<Evento> _eventos;
+
 		public Ponente(string nombre, string mail, string twitter, string blog)
 			: this(nombre)
 		{
@@ -13,6 +18,7 @@
 		public Ponente(string nombre)
 		{
 			Nombre = nombre;
+			_eventos = new List<Evento>();
 		}
 
 		public string Nombre { get; private set; }
@@ -22,5 +28,22 @@
 		public string Twitter { get; private set; }
 
 		public string Blog { get; private set; }
+
+		public IEnumerable<Evento> Eventos
+		{
+			get { return _eventos; }
+		}
+
+		public void AddEvento(Evento evento)
+		{
+			if (!_eventos.Contains(evento))
+				_eventos.Add(evento);
+		}
+
+		public void RemoveEvento(Evento evento)
+		{
+			if (_eventos.Contains(evento))
+				_eventos.Remove(evento);
+		}
 	}
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs	Mon May 16 21:40:40 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs	Tue May 17 01:27:03 2011 -0300
@@ -1,4 +1,6 @@
 using System;
+using System.Collections.Generic;
+using System.Linq;
 using AltNetHispano.Agendas.Domain;
 using Moq;
 using NUnit.Framework;
@@ -18,11 +20,20 @@
 			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));
 
-			Assert.AreEqual(2, agenda.GetEventosPublicados().Count);
+			var eventos = agenda.GetEventosPublicados();
+			Assert.AreEqual(2, eventos.Count);
 
 			publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(2));
 
 			Assert.AreEqual(1, DefaultPonenteRepository.GetAll().Count);
+
+			var evento = eventos[0];
+
+			Assert.IsNotNull(evento.Ponente);
+			var ponente = evento.Ponente;
+			Assert.IsNotNull(evento.Ponente.Eventos);
+			Assert.Contains(eventos[0], new List<Evento>(ponente.Eventos));
+			Assert.Contains(eventos[1], new List<Evento>(ponente.Eventos));
 		}
 
 		[Test]
@@ -78,6 +89,7 @@
 			Guid eventoId;
 
 			agenda.Proponer(titulo, "Fabio");
+			Ponente ponente;
 			{
 				var eventos = agenda.GetEventosPropuestos();
 				Assert.AreEqual(1, eventos.Count);
@@ -86,6 +98,7 @@
 				Assert.AreEqual("Fabio", evento.Ponente.Nombre);
 
 				eventoId = evento.Id;
+				ponente = evento.Ponente;
 			}
 
 			agenda.ModificarPropuesta(eventoId, titulo, null);
@@ -96,6 +109,44 @@
 				Evento evento = eventos[0];
 				Assert.IsNull(evento.Ponente);
 			}
+
+			Assert.AreEqual(0, ponente.Eventos.Count());
+		}
+
+		[Test]
+		public void Cambiar_ponente_de_un_evento()
+		{
+			var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository);
+
+			const string titulo = "Audit (parallel model) con NHibernate 3";
+			Guid eventoId;
+
+			agenda.Proponer(titulo, "Fabio");
+			Ponente ponente1;
+			{
+				var eventos = agenda.GetEventosPropuestos();
+				Assert.AreEqual(1, eventos.Count);
+
+				Evento evento = eventos[0];
+				Assert.AreEqual("Fabio", evento.Ponente.Nombre);
+
+				eventoId = evento.Id;
+				ponente1 = evento.Ponente;
+			}
+
+			agenda.ModificarPropuesta(eventoId, titulo, "José");
+			Ponente ponente2;
+			{
+				var eventos = agenda.GetEventosPropuestos();
+				Assert.AreEqual(1, eventos.Count);
+
+				Evento evento = eventos[0];
+				Assert.IsNotNull(evento.Ponente);
+				ponente2 = evento.Ponente;
+			}
+
+			Assert.AreEqual(0, ponente1.Eventos.Count());
+			Assert.AreEqual(1, ponente2.Eventos.Count());
 		}
 	}
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/PulicarTests.cs	Mon May 16 21:40:40 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/PulicarTests.cs	Tue May 17 01:27:03 2011 -0300
@@ -101,9 +101,18 @@
 			var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository);
 
 			agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now);
-			Assert.AreEqual(1, agenda.GetEventosPublicados().Count);
+			var eventos = agenda.GetEventosPublicados();
+			Assert.AreEqual(1, eventos.Count);
 
 			publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
+
+			var evento = eventos[0];
+			
+			Assert.IsNotNull(evento.Ponente);
+			Assert.IsNotNull(evento.Ponente.Eventos);
+			Assert.AreEqual(1, evento.Ponente.Eventos.Count());
+			Assert.AreEqual(evento, evento.Ponente.Eventos.First());
+
 		}
 
 		[Test]