Mercurial > altnet-hispano
changeset 75:96d7609f2e08
Agendar evento propuesto
author | nelopauselli |
---|---|
date | Mon, 23 May 2011 20:43:01 -0300 |
parents | bc46e7426c80 |
children | 926bd1cdb98f |
files | Agendas/trunk/src/Agendas.Domain/Agenda.cs Agendas/trunk/src/Agendas.Domain/Evento.cs Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj 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/PulicarTests.cs Agendas/trunk/src/Agendas.Tests/TrackTests.cs Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Agendas/trunk/src/Agendas.Web/Controllers/PropuestaController.cs Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs Agendas/trunk/src/Agendas.Web/Models/PropuestaModel.cs Agendas/trunk/src/Agendas.Web/Views/Evento/Edit.cshtml Agendas/trunk/src/Agendas.Web/Views/Propuesta/Index.cshtml |
diffstat | 15 files changed, 269 insertions(+), 223 deletions(-) [+] |
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs Mon May 23 20:13:37 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs Mon May 23 20:43:01 2011 -0300 @@ -31,25 +31,27 @@ return _eventosRepository.GetEventosSinFecha() ?? new List<Evento>(); } - public IList<Evento> GetEventosPublicados() + public IList<Evento> GetEventosAgendados() { return _eventosRepository.GetEventosConFecha() ?? new List<Evento>(); } - public Resultado ModificarEvento(Guid id, string titulo, string ponenteNombre, DateTime? fecha) + public Resultado ModificarEvento(Guid id, string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion) { Evento evento = _eventosRepository.Get(id); if (evento == null) throw new EventoNotFoundException(id); - Ponente ponente=null; + Ponente ponente = null; if (!string.IsNullOrWhiteSpace(ponenteNombre)) ponente = GetPonente(ponenteNombre); if (evento.Titulo != titulo) evento.CambiarTitulo(titulo); - if (evento.Fecha != fecha || evento.Ponente != ponente) + if (evento.Fecha == null && fecha != null) + evento.Agendar(ponente, fecha, urlInvitacion); + else if (evento.Fecha != fecha || evento.Ponente != ponente) evento.Actualizar(ponente, fecha); if (_publicador != null) @@ -58,15 +60,15 @@ return new Resultado(true); } - public Resultado ModificarPropuesta(Guid id, string titulo, string ponenteNombre) + public Resultado ModificarPropuesta(Guid id, string titulo, string ponenteNombre, string urlInvitacion) { - return ModificarEvento(id, titulo, ponenteNombre, null); + return ModificarEvento(id, titulo, ponenteNombre, null, urlInvitacion); } - public Resultado Proponer(string titulo, string ponenteNombre) + public Resultado Proponer(string titulo, string ponenteNombre, string urlInvitacion) { Ponente ponente = GetPonente(ponenteNombre); - var evento = Evento.Proponer(titulo, ponente); + var evento = Evento.Proponer(titulo, ponente, urlInvitacion); if (string.IsNullOrWhiteSpace(evento.Titulo)) return new Resultado(false);
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs Mon May 23 20:13:37 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs Mon May 23 20:43:01 2011 -0300 @@ -74,9 +74,9 @@ /// <param name="titulo">Título del evento propuesto</param> /// <param name="ponente">Ponente para evento propuesto</param> /// <returns></returns> - public static Evento Proponer(string titulo, Ponente ponente) + public static Evento Proponer(string titulo, Ponente ponente, string urlInvitacion) { - var evento = new Evento { Titulo = titulo, Ponente = ponente }; + var evento = new Evento {Titulo = titulo, Ponente = ponente, UrlInvitacion = urlInvitacion}; evento.AddTracks(new Track(Accion.Proponer)); return evento;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Mon May 23 20:43:01 2011 -0300 @@ -0,0 +1,210 @@ +using System; +using System.Linq; +using AltNetHispano.Agendas.Domain; +using AltNetHispano.Agendas.Domain.Exceptions; +using AltNetHispano.Agendas.Domain.Repositories; +using Moq; +using NUnit.Framework; + +namespace AltNetHispano.Agendas.Tests +{ + [TestFixture] + public class AgendarTests : TestBase + { + private const string urlInvitacion = "http://groups.google.com/group/altnet-hispano/browse_thread/thread/65d6d26eb381386e"; + + [Test] + public void CompositePublicador_constructor_parametro_null_debe_generar_ArgumentNullException() + { + Assert.Throws<ArgumentNullException>(() => new CompositePublicador(null)); + } + + [Test] + public void Intentar_agendar_evento_donde_ocurre_una_excepcion_no_manejada() + { + var publicador = new Mock<IPublicador>(); + var repository = new Mock<IEventoRepository>(); + + publicador.Setup(p => p.Publicar(It.IsAny<Evento>())).Throws(new Exception("Error intencional")); + + var agenda = new Agenda(publicador.Object, null, 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)); + repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); + } + + [Test] + public void Intentar_agendar_evento_sin_servicio_de_seguridad() + { + IdentityContext.Current = null; + + var publicador = new Mock<IPublicador>(); + var repository = new Mock<IEventoRepository>(); + + var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository); + + Assert.Throws<IdentityContextNotConfiguredException>( + () => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, + urlInvitacion)); + repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); + } + + [Test] + public void Intentar_agendar_evento_sin_usuario_autenticado() + { + SetCurrentUser(null); + + var publicador = new Mock<IPublicador>(); + var repository = new Mock<IEventoRepository>(); + + var agenda = new Agenda(publicador.Object, null, 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)); + 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 r = agenda.Agendar("Van para publicar", string.Empty, DateTime.Now, + urlInvitacion); + + Assert.IsFalse(r.Succeful); + } + + [Test] + public void Agendar_evento_con_multiples_publicadores() + { + var publicador1 = new Mock<IPublicador>(); + var publicador2 = new Mock<IPublicador>(); + + var repository = new Mock<IEventoRepository>(); + + var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), null, + 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)); + repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(1)); + } + + [Test] + public void Agendar_evento_correctamente() + { + var publicador = new Mock<IPublicador>(); + + var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository); + + agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, + urlInvitacion); + + Assert.AreEqual(0, agenda.GetEventosPropuestos().Count); + + var eventos = agenda.GetEventosAgendados(); + 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] + public void Agendar_y_modificar_evento() + { + var repository = DefaultEventoRepository; + var publicador = new Mock<IPublicador>(); + + var agenda = new Agenda(publicador.Object, null, repository, DefaultPonenteRepository); + + agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, + urlInvitacion); + + publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); + + var evento = repository.GetEventosConFecha().First(); + Assert.AreNotEqual(Guid.Empty, evento.Id); + Assert.IsNotNull(evento.Fecha); + + 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)); + + evento = repository.GetEventosConFecha().First(); + Assert.AreEqual("otro titulo", evento.Titulo); + Assert.AreEqual("otro ponente", evento.Ponente.Nombre); + Assert.AreEqual(fecha, evento.Fecha); + + var idEventoNoExistente = new Guid("99999999999999999999999999999999"); + Assert.Throws<EventoNotFoundException>( + () => agenda.ModificarEvento(idEventoNoExistente, "algún título", "un ponente", DateTime.Now, urlInvitacion)); + } + + [Test] + 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, + 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); + + 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)); + } + + [Test] + public void Agendar_evento_propuesto() + { + 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, + DefaultEventoRepository, DefaultPonenteRepository); + + agenda.Proponer("Html 5", "jjmontes", urlInvitacion); + Assert.AreEqual(1, agenda.GetEventosPropuestos().Count); + Assert.AreEqual(0, agenda.GetEventosAgendados().Count); + + var publicado = agenda.GetEventosPropuestos().First(); + Assert.AreEqual(1, publicado.Tracks.Count()); + + agenda.Agendar("Html 5", "jjmontes", DateTime.Today.AddDays(5), urlInvitacion); + Assert.AreEqual(0, agenda.GetEventosPropuestos().Count); + Assert.AreEqual(1, agenda.GetEventosAgendados().Count); + + var agendado = agenda.GetEventosAgendados().First(); + Assert.AreSame(publicado, agendado); + Assert.AreEqual(2, agendado.Tracks.Count()); + + Assert.IsNotNull(agendado.Tracks.Where(t => t.Accion == Accion.Proponer).SingleOrDefault()); + Assert.IsNotNull(agendado.Tracks.Where(t => t.Accion == Accion.Agendar).SingleOrDefault()); + } + } +} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj Mon May 23 20:13:37 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj Mon May 23 20:43:01 2011 -0300 @@ -77,7 +77,7 @@ <Compile Include="PropuestasTests.cs" /> <Compile Include="Cruds\EventoTests.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="PulicarTests.cs" /> + <Compile Include="AgendarTests.cs" /> <Compile Include="TestBase.cs" /> <Compile Include="TrackTests.cs" /> </ItemGroup>
--- a/Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs Mon May 23 20:13:37 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs Mon May 23 20:43:01 2011 -0300 @@ -27,7 +27,7 @@ var ponente = new Ponente("Carlos Blé"); _ponenteRepository.Save(ponente); - var van = Evento.Proponer("TDD - Diseño Basado en Ejemplos", ponente); + var van = Evento.Proponer("TDD - Diseño Basado en Ejemplos", ponente, string.Empty); _eventoRepository.Save(van); return van.Id;
--- a/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Mon May 23 20:13:37 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Mon May 23 20:43:01 2011 -0300 @@ -24,7 +24,7 @@ agenda.Agendar("Conform - Parte 2", "Fabio Maulo", new DateTime(2011, 3, 5), urlInvitacion); - var eventos = agenda.GetEventosPublicados(); + var eventos = agenda.GetEventosAgendados(); Assert.AreEqual(2, eventos.Count); publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(2)); @@ -53,7 +53,7 @@ agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), urlInvitacion); - Assert.AreEqual(1, agenda.GetEventosPublicados().Count); + Assert.AreEqual(1, agenda.GetEventosAgendados().Count); publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); @@ -76,7 +76,7 @@ agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), urlInvitacion); - Assert.AreEqual(1, agenda.GetEventosPublicados().Count); + Assert.AreEqual(1, agenda.GetEventosAgendados().Count); publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); @@ -93,7 +93,7 @@ const string titulo = "Audit (parallel model) con NHibernate 3"; Guid eventoId; - agenda.Proponer(titulo, "Fabio"); + agenda.Proponer(titulo, "Fabio", urlInvitacion); Ponente ponente; { var eventos = agenda.GetEventosPropuestos(); @@ -106,7 +106,7 @@ ponente = evento.Ponente; } - agenda.ModificarPropuesta(eventoId, titulo, null); + agenda.ModificarPropuesta(eventoId, titulo, null, urlInvitacion); { var eventos = agenda.GetEventosPropuestos(); Assert.AreEqual(1, eventos.Count); @@ -126,7 +126,7 @@ const string titulo = "Audit (parallel model) con NHibernate 3"; Guid eventoId; - agenda.Proponer(titulo, "Fabio"); + agenda.Proponer(titulo, "Fabio", urlInvitacion); Ponente ponente1; { var eventos = agenda.GetEventosPropuestos(); @@ -139,7 +139,7 @@ ponente1 = evento.Ponente; } - agenda.ModificarPropuesta(eventoId, titulo, "José"); + agenda.ModificarPropuesta(eventoId, titulo, "José", urlInvitacion); Ponente ponente2; { var eventos = agenda.GetEventosPropuestos();
--- a/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Mon May 23 20:13:37 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Mon May 23 20:43:01 2011 -0300 @@ -19,16 +19,16 @@ { var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); - agenda.Proponer("Van", null); + agenda.Proponer("Van", null, urlInvitacion); { IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos(); - IList<Evento> eventosPublicados = agenda.GetEventosPublicados(); + IList<Evento> eventosPublicados = agenda.GetEventosAgendados(); Assert.AreEqual(1, eventosPropuestos.Count); Assert.AreEqual(0, eventosPublicados.Count); var evento = eventosPropuestos.FirstOrDefault(); - agenda.ModificarPropuesta(evento.Id, "Van 2", "otro ponente"); + agenda.ModificarPropuesta(evento.Id, "Van 2", "otro ponente", urlInvitacion); eventosPropuestos = agenda.GetEventosPropuestos(); Assert.AreEqual(1, eventosPropuestos.Count); @@ -42,7 +42,7 @@ Assert.IsTrue(r.Succeful); { IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos(); - IList<Evento> eventosPublicados = agenda.GetEventosPublicados(); + IList<Evento> eventosPublicados = agenda.GetEventosAgendados(); Assert.AreEqual(0, eventosPropuestos.Count); Assert.AreEqual(1, eventosPublicados.Count); @@ -55,7 +55,7 @@ var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); { - agenda.Proponer("Van propuesta", null); + agenda.Proponer("Van propuesta", null, urlInvitacion); } { @@ -73,7 +73,7 @@ var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); { - agenda.Proponer("Van propuesta", null); + agenda.Proponer("Van propuesta", null, urlInvitacion); } { @@ -104,7 +104,7 @@ var agenda = new Agenda(null, null, repository.Object, DefaultPonenteRepository); - var r = agenda.Proponer(string.Empty, null); + var r = agenda.Proponer(string.Empty, null, urlInvitacion); Assert.IsFalse(r.Succeful); repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); @@ -117,14 +117,14 @@ SetCurrentUser(null); - Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Proponer("Inmortalidad de la meduza.", null)); + Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Proponer("Inmortalidad de la meduza.", null, urlInvitacion)); } [Test] public void Proponer_evento_correctamente() { var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); - agenda.Proponer("Van propuesta", null); + agenda.Proponer("Van propuesta", null, urlInvitacion); IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos(); Assert.IsNotNull(eventosPropuestos); @@ -137,13 +137,13 @@ { var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); - agenda.Proponer("Van propuesta", null); + agenda.Proponer("Van propuesta", null, urlInvitacion); var r = agenda.Agendar("Van publicada", "jjmontes", DateTime.Now, urlInvitacion); Assert.IsTrue(r.Succeful); IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos(); - IList<Evento> eventosPublicados = agenda.GetEventosPublicados(); + IList<Evento> eventosPublicados = agenda.GetEventosAgendados(); Assert.AreEqual(1, eventosPropuestos.Count); Assert.AreEqual(1, eventosPublicados.Count);
--- a/Agendas/trunk/src/Agendas.Tests/PulicarTests.cs Mon May 23 20:13:37 2011 -0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,178 +0,0 @@ -using System; -using System.Linq; -using AltNetHispano.Agendas.Domain; -using AltNetHispano.Agendas.Domain.Exceptions; -using AltNetHispano.Agendas.Domain.Repositories; -using Moq; -using NUnit.Framework; - -namespace AltNetHispano.Agendas.Tests -{ - [TestFixture] - public class PulicarTests : TestBase - { - private const string urlInvitacion = "http://groups.google.com/group/altnet-hispano/browse_thread/thread/65d6d26eb381386e"; - - [Test] - public void CompositePublicador_constructor_parametro_null_debe_generar_ArgumentNullException() - { - Assert.Throws<ArgumentNullException>(() => new CompositePublicador(null)); - } - - [Test] - public void Intentar_publicar_evento_donde_ocurre_una_excepcion_no_manejada() - { - var publicador = new Mock<IPublicador>(); - var repository = new Mock<IEventoRepository>(); - - publicador.Setup(p => p.Publicar(It.IsAny<Evento>())).Throws(new Exception("Error intencional")); - - var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository); - - Assert.Throws<Exception>(() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion)); - Assert.AreEqual(0, agenda.GetEventosPublicados().Count); - - publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); - repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); - } - - [Test] - public void Intentar_publicar_evento_sin_servicio_de_seguridad() - { - IdentityContext.Current = null; - - var publicador = new Mock<IPublicador>(); - var repository = new Mock<IEventoRepository>(); - - var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository); - - Assert.Throws<IdentityContextNotConfiguredException>( - () => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, - urlInvitacion)); - repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); - } - - [Test] - public void Intentar_publicar_evento_sin_usuario_autenticado() - { - SetCurrentUser(null); - - var publicador = new Mock<IPublicador>(); - var repository = new Mock<IEventoRepository>(); - - var agenda = new Agenda(publicador.Object, null, 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)); - repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); - } - - [Test] - public void Intentar_publicar_evento_sin_ponente() - { - var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); - - var r = agenda.Agendar("Van para publicar", string.Empty, DateTime.Now, - urlInvitacion); - - Assert.IsFalse(r.Succeful); - } - - [Test] - public void Publicar_evento_con_multiples_publicadores() - { - var publicador1 = new Mock<IPublicador>(); - var publicador2 = new Mock<IPublicador>(); - - var repository = new Mock<IEventoRepository>(); - - var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), null, - 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)); - repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(1)); - } - - [Test] - public void Publicar_evento_correctamente() - { - var publicador = new Mock<IPublicador>(); - - var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository); - - agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, - urlInvitacion); - 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] - public void Publicar_y_modificar_evento() - { - var repository = DefaultEventoRepository; - var publicador = new Mock<IPublicador>(); - - var agenda = new Agenda(publicador.Object, null, repository, DefaultPonenteRepository); - - agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, - urlInvitacion); - - publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); - - var evento = repository.GetEventosConFecha().First(); - Assert.AreNotEqual(Guid.Empty, evento.Id); - Assert.IsNotNull(evento.Fecha); - - DateTime fecha = evento.Fecha.Value.AddDays(7); - agenda.ModificarEvento(evento.Id, "otro titulo", "otro ponente", fecha); - - publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(2)); - - evento = repository.GetEventosConFecha().First(); - Assert.AreEqual("otro titulo", evento.Titulo); - Assert.AreEqual("otro ponente", evento.Ponente.Nombre); - Assert.AreEqual(fecha, evento.Fecha); - - var idEventoNoExistente = new Guid("99999999999999999999999999999999"); - Assert.Throws<EventoNotFoundException>( - () => agenda.ModificarEvento(idEventoNoExistente, "algún título", "un ponente", DateTime.Now)); - } - - [Test] - public void Publicar_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, - DefaultEventoRepository, DefaultPonenteRepository); - - agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, - urlInvitacion); - - 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)); - } - } -} \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/TrackTests.cs Mon May 23 20:13:37 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/TrackTests.cs Mon May 23 20:43:01 2011 -0300 @@ -24,11 +24,11 @@ Assert.AreEqual(1, evento.Tracks.Count()); Assert.AreEqual(Accion.Agendar, evento.Tracks.Last().Accion); - agenda.ModificarEvento(evento.Id, "Html 5", "otro ponente", fecha); + agenda.ModificarEvento(evento.Id, "Html 5", "otro ponente", fecha, urlInvitacion); Assert.AreEqual(2, evento.Tracks.Count()); Assert.AreEqual(Accion.Modificar, evento.Tracks.Last().Accion); - agenda.ModificarEvento(evento.Id, "Html 5 y Css 3", "otro ponente", fecha); + agenda.ModificarEvento(evento.Id, "Html 5 y Css 3", "otro ponente", fecha, urlInvitacion); Assert.AreEqual(3, evento.Tracks.Count()); Assert.AreEqual(Accion.CambiarTitulo, evento.Tracks.Last().Accion); }
--- a/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Mon May 23 20:13:37 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Mon May 23 20:43:01 2011 -0300 @@ -14,7 +14,7 @@ var model = new EventoIndexModel { - ProximosEventos = from e in agenda.GetEventosPublicados() + ProximosEventos = from e in agenda.GetEventosAgendados() select new EventoDto { Id = e.Id.ToString(), Titulo = e.Titulo } }; @@ -72,7 +72,7 @@ { var agenda = AgendaFactory.GetAgenda(); - var r =agenda.ModificarEvento(new Guid(model.Id), model.Titulo, model.Ponente, model.Fecha); + var r =agenda.ModificarEvento(new Guid(model.Id), model.Titulo, model.Ponente, model.Fecha.Value , model.UrlInvitacion); if (r.Succeful) return RedirectToAction("Index"); ModelState.AddModelError("error", r.ToString());
--- a/Agendas/trunk/src/Agendas.Web/Controllers/PropuestaController.cs Mon May 23 20:13:37 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/PropuestaController.cs Mon May 23 20:43:01 2011 -0300 @@ -13,10 +13,16 @@ var agenda = AgendaFactory.GetAgenda(); var model = new PropuestaIndexModel - { - Propuestas = from e in agenda.GetEventosPropuestos() - select new PropuestaDto { Id = e.Id.ToString(), Titulo = e.Titulo, Ponente = e.Ponente.Nombre } - }; + { + Propuestas = from e in agenda.GetEventosPropuestos() + select + new PropuestaDto + { + Id = e.Id.ToString(), + Titulo = e.Titulo, + Ponente = e.Ponente != null ? e.Ponente.Nombre : string.Empty + } + }; return View(model); } @@ -35,7 +41,7 @@ { var agenda = AgendaFactory.GetAgenda(); - var r = agenda.Proponer(model.Titulo, model.Ponente); + var r = agenda.Proponer(model.Titulo, model.Ponente, model.UrlInvitacion); if (r.Succeful) return RedirectToAction("Index"); ModelState.AddModelError("error", r.ToString()); @@ -70,7 +76,7 @@ { var agenda = AgendaFactory.GetAgenda(); - var r = agenda.ModificarPropuesta(new Guid(model.Id), model.Titulo, model.Ponente); + var r = agenda.ModificarPropuesta(new Guid(model.Id), model.Titulo, model.Ponente, model.UrlInvitacion); if (r.Succeful) return RedirectToAction("Index"); ModelState.AddModelError("error", r.ToString());
--- a/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs Mon May 23 20:13:37 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs Mon May 23 20:43:01 2011 -0300 @@ -37,7 +37,9 @@ [Required(ErrorMessage = "debe ingresar la fecha del evento")] public DateTime? Fecha { get; set; } - } + + public string UrlInvitacion { get; set; } + } public class EventoDto
--- a/Agendas/trunk/src/Agendas.Web/Models/PropuestaModel.cs Mon May 23 20:13:37 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Models/PropuestaModel.cs Mon May 23 20:43:01 2011 -0300 @@ -15,7 +15,9 @@ public string Titulo { get; set; } public string Ponente { get; set; } - } + + public string UrlInvitacion { get; set; } + } public class PropuestaEditModel { @@ -26,7 +28,9 @@ public string Titulo { get; set; } public string Ponente { get; set; } - } + + public string UrlInvitacion { get; set; } + } public class PropuestaDto
--- a/Agendas/trunk/src/Agendas.Web/Views/Evento/Edit.cshtml Mon May 23 20:13:37 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Views/Evento/Edit.cshtml Mon May 23 20:43:01 2011 -0300 @@ -1,4 +1,4 @@ -@model AltNetHispano.Agendas.Web.Models.AgendaEditModel +@model AltNetHispano.Agendas.Web.Models.EventoEditModel <h2>Agenda</h2> <p> Modifique los datos que desea corregir y presione guardar
--- a/Agendas/trunk/src/Agendas.Web/Views/Propuesta/Index.cshtml Mon May 23 20:13:37 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Views/Propuesta/Index.cshtml Mon May 23 20:43:01 2011 -0300 @@ -19,7 +19,7 @@ <td>@item.Ponente</td> <td> @Html.ActionLink("Modificar", "Edit", new { id = item.Id }) - @Html.ActionLink("Publicar", "Publish", new { id = item.Id }) + @Html.ActionLink("Agendar", "Edit", "Evento", new { id = item.Id }, null) </td> </tr> }