# HG changeset patch # User nelopauselli # Date 1305606423 10800 # Node ID cb3f7b47c1f0106ad1fe749519c637c53b835ae2 # Parent 02e163f2ca3882e2cd729c4d3da1bd16ad0fbc6f Relación de Ponente a Eventos de los que es el ponente. diff -r 02e163f2ca38 -r cb3f7b47c1f0 Agendas/trunk/src/Agendas.Domain/Evento.cs --- 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 Enlaces { diff -r 02e163f2ca38 -r cb3f7b47c1f0 Agendas/trunk/src/Agendas.Domain/Ponente.cs --- 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 _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(); } public string Nombre { get; private set; } @@ -22,5 +28,22 @@ public string Twitter { get; private set; } public string Blog { get; private set; } + + public IEnumerable 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 diff -r 02e163f2ca38 -r cb3f7b47c1f0 Agendas/trunk/src/Agendas.Tests/PonentesTests.cs --- 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()), 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(ponente.Eventos)); + Assert.Contains(eventos[1], new List(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 diff -r 02e163f2ca38 -r cb3f7b47c1f0 Agendas/trunk/src/Agendas.Tests/PulicarTests.cs --- 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()), 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]