Mercurial > altnet-hispano
changeset 24:41b283d27e3e
Ponentes como entidad
Agenda no es una entidad persistente (por ahora)
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs Tue Mar 15 06:57:58 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs Tue Mar 15 07:49:53 2011 -0300 @@ -11,31 +11,34 @@ private readonly IRecordador _recordador; private readonly ISeguridad _seguridad; private readonly IEventoRepository _eventosRepository; + private readonly IPonenteRepository _ponenteRepository; - public Agenda(IPublicador publicador, IRecordador recordador, ISeguridad seguridad, IEventoRepository eventosRepository) + public Agenda(IPublicador publicador, IRecordador recordador, ISeguridad seguridad, IEventoRepository eventosRepository, IPonenteRepository ponenteRepository) { _publicador = publicador; + _ponenteRepository = ponenteRepository; _eventosRepository = eventosRepository; _recordador = recordador; _seguridad = seguridad; } - public Guid Id { get; set; } + public void Publicar(string titulo, string ponenteNombre, DateTime? fecha) + { + var ponente = GetPonente(ponenteNombre); - public void Publicar(string titulo, string ponente, DateTime? fecha) - { var evento = new Evento{Titulo=titulo, Ponente = ponente, Fecha = fecha}; if (!evento.Fecha.HasValue) throw new ValidationException(); if (NoEstaAutenticado(_seguridad)) throw new UsuarioNoAutenticadoException(); - if (string.IsNullOrWhiteSpace(evento.Ponente)) + if (string.IsNullOrWhiteSpace(evento.Ponente.Nombre)) throw new ValidationException(); if (_publicador != null) _publicador.Publicar(evento); _eventosRepository.Save(evento); + _ponenteRepository.Save(ponente); } public void Recordar(Guid eventoId) @@ -72,11 +75,14 @@ || string.IsNullOrWhiteSpace(seguridad.GetPrincipal().Identity.Name); } - public void ModificarEvento(Guid id, string titulo, string ponente, DateTime? fecha) + public void ModificarEvento(Guid id, string titulo, string ponenteNombre, DateTime? fecha) { var evento = _eventosRepository.Get(id); if (evento == null) throw new EventoNotFoundException(); + + var ponente = GetPonente(ponenteNombre); + evento.Titulo = titulo; evento.Ponente = ponente; evento.Fecha = fecha; @@ -86,6 +92,18 @@ { return _eventosRepository.Get(id); } + + public void RegistrarPonente(string nombre, string mail, string twitter, string blog) + { + var ponente = new Ponente {Nombre = nombre, Mail = mail, Twitter = twitter, Blog = blog}; + _ponenteRepository.Save(ponente); + } + + private Ponente GetPonente(string nombre) + { + return _ponenteRepository.GetByNombre(nombre) ?? new Ponente { Nombre = nombre }; + } + } public class EventoNotFoundException : Exception
--- a/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj Tue Mar 15 06:57:58 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agendas.Domain.csproj Tue Mar 15 07:49:53 2011 -0300 @@ -46,6 +46,7 @@ <Compile Include="Exceptions\ValidationException.cs" /> <Compile Include="IRecordador.cs" /> <Compile Include="ISeguridad.cs" /> + <Compile Include="Ponente.cs" /> <Compile Include="Repositories\IEventoRepository.cs" /> <Compile Include="IPublicador.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs Tue Mar 15 06:57:58 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs Tue Mar 15 07:49:53 2011 -0300 @@ -9,7 +9,7 @@ public string Titulo { get; set; } public DateTime? Fecha { get; set; } public string Sintesis { get; set; } - public string Ponente { get; set; } + public Ponente Ponente { get; set; } public IList<string> Enlaces { get; set; } } } \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Domain/Ponente.cs Tue Mar 15 07:49:53 2011 -0300 @@ -0,0 +1,17 @@ +using System; + +namespace AltNetHispano.Agendas.Domain +{ + public class Ponente { + public Guid Id { get; set; } + + public string Nombre { get; set; } + + public string Mail { get; set; } + + public string Twitter { get; set; } + + public string Blog { get; set; } + + } +} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/Repositories/IEventoRepository.cs Tue Mar 15 06:57:58 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Repositories/IEventoRepository.cs Tue Mar 15 07:49:53 2011 -0300 @@ -13,11 +13,10 @@ IList<Evento> GetEventosConFecha(); } - public interface IAgendaRepository + public interface IPonenteRepository { - void Save(Agenda agenda); - void Delete(Agenda agenda); - void Update(Agenda agenda); - Agenda Get(Guid agendaId); + void Save(Ponente ponente); + Ponente GetByNombre(string ponenteNombre); + IList<Ponente> GetAll(); } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Factories/AgendaFactory.cs Tue Mar 15 06:57:58 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Factories/AgendaFactory.cs Tue Mar 15 07:49:53 2011 -0300 @@ -11,7 +11,7 @@ public static Agenda GetAgenda() { if (_agenda==null) - _agenda = new Agenda(null, null, _seguridad, new EventoRepository()); + _agenda = new Agenda(null, null, _seguridad, new EventoRepository(), new PonenteRepository()); return _agenda; }
--- a/Agendas/trunk/src/Agendas.Repositories.Memory/AgendaRepository.cs Tue Mar 15 06:57:58 2011 -0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -using System; -using AltNetHispano.Agendas.Domain; -using AltNetHispano.Agendas.Domain.Repositories; - -namespace Agendas.Repositories.Memory -{ - public class AgendaRepository : RepositoryBase<Agenda>, IAgendaRepository - { - #region IAgendaRepository Members - - public void Save(Agenda agenda) - { - if (Guid.Empty.Equals(agenda.Id)) - { - agenda.Id = Guid.NewGuid(); - Objects.Add(agenda.Id, agenda); - } - } - - public void Update(Agenda agenda) - { - //nada que hacer en este método para este repositorio - } - - public Agenda Get(Guid agendaId) - { - Agenda agenda; - return Objects.TryGetValue(agendaId, out agenda) ? agenda : null; - } - - public void Delete(Agenda agenda) - { - Objects.Remove(agenda.Id); - } - - #endregion - } -} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Repositories.Memory/Agendas.Repositories.Memory.csproj Tue Mar 15 06:57:58 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Repositories.Memory/Agendas.Repositories.Memory.csproj Tue Mar 15 07:49:53 2011 -0300 @@ -40,8 +40,8 @@ <Reference Include="System.Xml" /> </ItemGroup> <ItemGroup> - <Compile Include="AgendaRepository.cs" /> <Compile Include="EventoRepository.cs" /> + <Compile Include="PonenteRepository.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="RepositoryBase.cs" /> </ItemGroup>
--- a/Agendas/trunk/src/Agendas.Repositories.Memory/EventoRepository.cs Tue Mar 15 06:57:58 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Repositories.Memory/EventoRepository.cs Tue Mar 15 07:49:53 2011 -0300 @@ -42,5 +42,10 @@ { return Objects.Values.Where(e => e.Fecha != null).ToList(); } + + public static void Clear() + { + Objects.Clear(); + } } } \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Repositories.Memory/PonenteRepository.cs Tue Mar 15 07:49:53 2011 -0300 @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using AltNetHispano.Agendas.Domain; +using AltNetHispano.Agendas.Domain.Repositories; + +namespace Agendas.Repositories.Memory +{ + public class PonenteRepository : RepositoryBase<Ponente>, IPonenteRepository + { + public void Save(Ponente ponente) + { + if (Guid.Empty.Equals(ponente.Id)) + { + ponente.Id = Guid.NewGuid(); + Objects.Add(ponente.Id, ponente); + } + } + + public void Update(Ponente ponente) + { + //nada que hacer en este método para este repositorio + } + + public Ponente Get(Guid vanId) + { + Ponente ponente; + return Objects.TryGetValue(vanId, out ponente) ? ponente : null; + } + + + public Ponente GetByNombre(string nombre) + { + return Objects.Values.SingleOrDefault(p => p.Nombre == nombre); + } + + public IList<Ponente> GetAll() + { + return Objects.Values.ToList(); + } + + public static void Clear() + { + Objects.Clear(); + } + } +} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj Tue Mar 15 06:57:58 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj Tue Mar 15 07:49:53 2011 -0300 @@ -46,6 +46,7 @@ <Reference Include="System.Xml" /> </ItemGroup> <ItemGroup> + <Compile Include="PonentesTests.cs" /> <Compile Include="PropuestasTests.cs" /> <Compile Include="EventoObjectMother.cs" /> <Compile Include="EventoTests.cs" />
--- a/Agendas/trunk/src/Agendas.Tests/EventoObjectMother.cs Tue Mar 15 06:57:58 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/EventoObjectMother.cs Tue Mar 15 07:49:53 2011 -0300 @@ -5,9 +5,5 @@ { public static class EventoObjectMother { - public static Evento GetVanValidaParaPublicar() - { - return new Evento { Fecha = DateTime.Now, Ponente = "jjmontes" }; - } } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/EventoTests.cs Tue Mar 15 06:57:58 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/EventoTests.cs Tue Mar 15 07:49:53 2011 -0300 @@ -17,7 +17,7 @@ var van = new Evento { Titulo = "TDD - Diseño Basado en Ejemplos", - Ponente = "Carlos Blé", + Ponente = new Ponente {Nombre = "Carlos Blé"}, Fecha = new DateTime(2010, 04, 16) }; IEventoRepository eventoRepository = new EventoRepository(); @@ -35,7 +35,7 @@ Evento van = eventoRepository.Get(vanId); Assert.IsNotNull(van); - Assert.AreEqual("Carlos Blé", van.Ponente); + Assert.AreEqual("Carlos Blé", van.Ponente.Nombre); Assert.AreEqual("TDD - Diseño Basado en Ejemplos", van.Titulo); Assert.AreEqual(new DateTime(2010, 04, 16), van.Fecha); @@ -52,7 +52,7 @@ Evento van = eventoRepository.Get(vanId); Assert.IsNotNull(van); - Assert.AreEqual("Carlos Blé", van.Ponente); + Assert.AreEqual("Carlos Blé", van.Ponente.Nombre); Assert.AreEqual("TDD - Diseño Basado en Ejemplos", van.Titulo); Assert.AreEqual(new DateTime(2010, 04, 17), van.Fecha); Assert.AreEqual(sintesis, van.Sintesis);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Tue Mar 15 07:49:53 2011 -0300 @@ -0,0 +1,72 @@ +using System; +using AltNetHispano.Agendas.Domain; +using Moq; +using NUnit.Framework; + +namespace AltNetHispano.Agendas.Tests +{ + [TestFixture] + public class PonentesTests : TestBase + { + [Test] + public void Publicar_van_con_ponente_registrado() + { + var publicador = new Mock<IPublicador>(); + Evento evento = null; + publicador.Setup(p => p.Publicar(It.IsAny<Evento>())).Callback<Evento>(e => evento = e); + + var agenda = new Agenda(publicador.Object, null, SeguridadServiceDefault, DefaultEventoRepository, DefaultPonenteRepository); + + 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)); + + Assert.AreEqual(1, agenda.GetEventosPublicados().Count); + + publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); + + Assert.IsNotNull(evento); + Assert.AreEqual("Fabio Maulo", evento.Ponente.Nombre); + Assert.AreEqual("fabiomaulo@gmail.com", evento.Ponente.Mail); + Assert.AreEqual("@fabiomaulo", evento.Ponente.Twitter); + Assert.AreEqual("http://fabiomaulo.blogspot.com", evento.Ponente.Blog); + } + + [Test] + public void Publicar_van_sin_ponente_registrado() + { + var publicador = new Mock<IPublicador>(); + Evento evento = null; + publicador.Setup(p => p.Publicar(It.IsAny<Evento>())).Callback<Evento>(e => evento = e); + + var agenda = new Agenda(publicador.Object, null, SeguridadServiceDefault, DefaultEventoRepository, DefaultPonenteRepository); + + agenda.Publicar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26)); + + Assert.AreEqual(1, agenda.GetEventosPublicados().Count); + + publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); + + Assert.IsNotNull(evento); + Assert.AreEqual("Fabio Maulo", evento.Ponente.Nombre); + Assert.IsNullOrEmpty(evento.Ponente.Twitter); + } + + [Test] + public void Publicar_dos_vans_sin_ponente_registrado() + { + var publicador = new Mock<IPublicador>(); + + var agenda = new Agenda(publicador.Object, null, SeguridadServiceDefault, 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)); + + Assert.AreEqual(2, agenda.GetEventosPublicados().Count); + + publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(2)); + + Assert.AreEqual(1, DefaultPonenteRepository.GetAll().Count); + } + } +} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Tue Mar 15 06:57:58 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Tue Mar 15 07:49:53 2011 -0300 @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using Agendas.Repositories.Memory; using AltNetHispano.Agendas.Domain; using AltNetHispano.Agendas.Domain.Exceptions; using AltNetHispano.Agendas.Domain.Repositories; @@ -17,7 +16,7 @@ public void Propuesta_de_van_con_usuario_autenticado() { var seguridad = new Mock<ISeguridad>(); - var agenda = new Agenda(null, null, seguridad.Object, DefaultEventoRepository); + var agenda = new Agenda(null, null, seguridad.Object, DefaultEventoRepository, DefaultPonenteRepository); seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalAutenticadoSinRoles()); agenda.Proponer("Van propuesta"); @@ -31,12 +30,10 @@ [Test] public void Verificar_propuesta_separada_de_publicacion() { - var agenda = new Agenda(null, null, SeguridadServiceDefault, new EventoRepository()); - - var vanPublicada = EventoObjectMother.GetVanValidaParaPublicar(); + var agenda = new Agenda(null, null, SeguridadServiceDefault, DefaultEventoRepository, DefaultPonenteRepository); agenda.Proponer("Van propuesta"); - agenda.Publicar(vanPublicada.Titulo, vanPublicada.Ponente, vanPublicada.Fecha); + agenda.Publicar("Van publicada", "jjmontes", DateTime.Now); IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos(); IList<Evento> eventosPublicados = agenda.GetEventosPublicados(); @@ -51,7 +48,7 @@ var repository = new Mock<IEventoRepository>(); var seguridad = new Mock<ISeguridad>(); - var agenda = new Agenda(null, null, seguridad.Object, repository.Object); + var agenda = new Agenda(null, null, seguridad.Object, repository.Object, DefaultPonenteRepository); Assert.Throws<ValidationException>(() => agenda.Proponer(string.Empty)); @@ -62,7 +59,7 @@ public void Agendar_van_propuesta_sin_fecha() { var seguridad = new Mock<ISeguridad>(); - var agenda = new Agenda(null, null, seguridad.Object, DefaultEventoRepository); + var agenda = new Agenda(null, null, seguridad.Object, DefaultEventoRepository, DefaultPonenteRepository); seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalAutenticadoSinRoles()); @@ -73,7 +70,7 @@ { var van = agenda.GetEventosPropuestos().FirstOrDefault(); Assert.IsNotNull(van); - Assert.Throws<ValidationException>(() => agenda.Publicar(van.Titulo, van.Ponente, van.Fecha)); + Assert.Throws<ValidationException>(() => agenda.Publicar(van.Titulo, string.Empty, van.Fecha)); } } @@ -81,7 +78,7 @@ public void Agendar_van_propuesta_sin_ponente() { var seguridad = new Mock<ISeguridad>(); - var agenda = new Agenda(null, null, seguridad.Object, DefaultEventoRepository); + var agenda = new Agenda(null, null, seguridad.Object, DefaultEventoRepository, DefaultPonenteRepository); seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalAutenticadoSinRoles()); @@ -94,55 +91,7 @@ Assert.IsNotNull(van); van.Fecha = DateTime.Today.AddDays(5); - Assert.Throws<ValidationException>(() => agenda.Publicar(van.Titulo, van.Ponente, van.Fecha)); - } - } - - [Test] - public void Van_crud() - { - var van = EventoObjectMother.GetVanValidaParaPublicar(); - - Guid vanId; - { - var agenda = new Agenda(null, null, SeguridadServiceDefault, new EventoRepository()); - agenda.Publicar(van.Titulo, van.Ponente, van.Fecha); - - IAgendaRepository agendaRepository = new AgendaRepository(); - - agendaRepository.Save(agenda); - vanId = agenda.Id; - } - - { - IAgendaRepository agendaRepository = new AgendaRepository(); - - Agenda agenda = agendaRepository.Get(vanId); - - Assert.IsNotNull(agenda); - Assert.AreEqual(1, agenda.GetEventosPublicados().Count); - agenda.Publicar(van.Titulo, van.Ponente, van.Fecha); - - agendaRepository.Update(agenda); - } - - { - IAgendaRepository agendaRepository = new AgendaRepository(); - - Agenda agenda = agendaRepository.Get(vanId); - - Assert.IsNotNull(agenda); - Assert.AreEqual(2, agenda.GetEventosPublicados().Count); - - agendaRepository.Delete(agenda); - } - - { - IAgendaRepository agendaRepository = new AgendaRepository(); - - Agenda agenda = agendaRepository.Get(vanId); - - Assert.IsNull(agenda); + Assert.Throws<ValidationException>(() => agenda.Publicar(van.Titulo, string.Empty, van.Fecha)); } } }
--- a/Agendas/trunk/src/Agendas.Tests/PulicarTests.cs Tue Mar 15 06:57:58 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PulicarTests.cs Tue Mar 15 07:49:53 2011 -0300 @@ -15,11 +15,9 @@ { var publicador = new Mock<IPublicador>(); - var agenda = new Agenda(publicador.Object, null, SeguridadServiceDefault, DefaultEventoRepository); + var agenda = new Agenda(publicador.Object, null, SeguridadServiceDefault, DefaultEventoRepository, DefaultPonenteRepository); - var van = EventoObjectMother.GetVanValidaParaPublicar(); - - agenda.Publicar(van.Titulo, van.Ponente, van.Fecha); + agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now); Assert.AreEqual(1, agenda.GetEventosPublicados().Count); publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); @@ -33,11 +31,9 @@ var publicador = new Mock<IPublicador>(); var repository = new Mock<IEventoRepository>(); - var agenda = new Agenda(publicador.Object, null, seguridad.Object, repository.Object); + var agenda = new Agenda(publicador.Object, null, seguridad.Object, repository.Object, DefaultPonenteRepository); - var van = EventoObjectMother.GetVanValidaParaPublicar(); - - Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Publicar(van.Titulo, van.Ponente, van.Fecha)); + Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now)); publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(0)); repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); @@ -49,11 +45,9 @@ var publicador = new Mock<IPublicador>(); var repository = new Mock<IEventoRepository>(); - var agenda = new Agenda(publicador.Object, null, null, repository.Object); + var agenda = new Agenda(publicador.Object, null, null, repository.Object, DefaultPonenteRepository); - var van = EventoObjectMother.GetVanValidaParaPublicar(); - - Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Publicar(van.Titulo, van.Ponente, van.Fecha)); + Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now)); repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); } @@ -65,10 +59,9 @@ publicador.Setup(p => p.Publicar(It.IsAny<Evento>())).Throws(new Exception("Error intencional")); - var agenda = new Agenda(publicador.Object, null, SeguridadServiceDefault, repository.Object); + var agenda = new Agenda(publicador.Object, null, SeguridadServiceDefault, repository.Object, DefaultPonenteRepository); - var van = EventoObjectMother.GetVanValidaParaPublicar(); - Assert.Throws<Exception>(() => agenda.Publicar(van.Titulo, van.Ponente, van.Fecha)); + Assert.Throws<Exception>(() => agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now)); Assert.AreEqual(0, agenda.GetEventosPublicados().Count); publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); @@ -83,10 +76,9 @@ var repository = new Mock<IEventoRepository>(); - var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), null, SeguridadServiceDefault, repository.Object); + var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), null, SeguridadServiceDefault, repository.Object, DefaultPonenteRepository); - var van = EventoObjectMother.GetVanValidaParaPublicar(); - agenda.Publicar(van.Titulo, van.Ponente, van.Fecha); + agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now); publicador1.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); publicador2.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); @@ -96,24 +88,20 @@ [Test] public void Publicar_y_recordar_van() { - var repository = new Mock<IEventoRepository>(); - 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, SeguridadServiceDefault, repository.Object); + var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), recordador1.Object, SeguridadServiceDefault, DefaultEventoRepository, DefaultPonenteRepository); - var van = EventoObjectMother.GetVanValidaParaPublicar(); - agenda.Publicar(van.Titulo, van.Ponente, van.Fecha); + agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now); + var van = agenda.GetEventosPublicados().Single(v => v.Titulo == "Van para publicar"); 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)); - - repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(1)); } [Test] @@ -121,10 +109,9 @@ { var repository = DefaultEventoRepository; - var agenda = new Agenda(null, null, SeguridadServiceDefault, repository); + var agenda = new Agenda(null, null, SeguridadServiceDefault, repository, DefaultPonenteRepository); - var van = EventoObjectMother.GetVanValidaParaPublicar(); - agenda.Publicar(van.Titulo, van.Ponente, van.Fecha); + agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now); var evento = repository.GetEventosConFecha().First(); Assert.AreNotEqual(Guid.Empty, evento.Id); @@ -135,7 +122,7 @@ evento = repository.GetEventosConFecha().First(); Assert.AreEqual("otro titulo", evento.Titulo); - Assert.AreEqual("otro ponente", evento.Ponente); + Assert.AreEqual("otro ponente", evento.Ponente.Nombre); Assert.AreEqual(fecha, evento.Fecha); } }
--- a/Agendas/trunk/src/Agendas.Tests/TestBase.cs Tue Mar 15 06:57:58 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/TestBase.cs Tue Mar 15 07:49:53 2011 -0300 @@ -23,14 +23,21 @@ get { return new EventoRepository(); } } + protected static IPonenteRepository DefaultPonenteRepository + { + get { return new PonenteRepository(); } + } + [SetUp] public void LimpiarEventos() { - var repository = new EventoRepository(); - foreach (Evento evento in repository.GetEventosConFecha()) - repository.Delete(evento); - foreach (Evento evento in repository.GetEventosSinFecha()) - repository.Delete(evento); + EventoRepository.Clear(); + } + + [SetUp] + public void LimpiarPonentes() + { + PonenteRepository.Clear(); } } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Web/Controllers/AgendaController.cs Tue Mar 15 06:57:58 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/AgendaController.cs Tue Mar 15 07:49:53 2011 -0300 @@ -61,7 +61,13 @@ var evento = agenda.GetEventoPublicado(new Guid(id)); if (evento!=null) { - var model = new AgendaEditModel {Id = id, Titulo = evento.Titulo, Ponente = evento.Ponente, Fecha = evento.Fecha}; + var model = new AgendaEditModel + { + Id = id, + Titulo = evento.Titulo, + Ponente = evento.Ponente != null ? evento.Ponente.Nombre : string.Empty, + Fecha = evento.Fecha + }; return View(model); } ModelState.AddModelError("error","No se encontró el evento que quiere modificar");