Mercurial > altnet-hispano
changeset 74:bc46e7426c80
Refactoring de acciones según la definición del diagrama de estados en assembla
(https://www.assembla.com/spaces/altnet-hispano/wiki/Estados_de_un_evento)
author | nelopauselli |
---|---|
date | Mon, 23 May 2011 20:13:37 -0300 |
parents | 76567a0d1e44 |
children | 96d7609f2e08 |
files | Agendas/trunk/src/Agendas.Blog/Impl/PostWriter.cs Agendas/trunk/src/Agendas.Blog/Impl/PostWriterFactory.cs Agendas/trunk/src/Agendas.Domain/Agenda.cs Agendas/trunk/src/Agendas.Domain/Evento.cs Agendas/trunk/src/Agendas.Domain/Track.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 |
diffstat | 10 files changed, 96 insertions(+), 57 deletions(-) [+] |
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Blog/Impl/PostWriter.cs Mon May 23 19:54:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Blog/Impl/PostWriter.cs Mon May 23 20:13:37 2011 -0300 @@ -19,7 +19,7 @@ protected string GetNombreUsuario(Evento evento) { - return evento.Tracks.Single(t => t.Accion == Accion.Realizar).Usuario; + return evento.Tracks.Single(t => t.Accion == Accion.Publicar).Usuario; } protected void ExecuteService(string title, string body)
--- a/Agendas/trunk/src/Agendas.Blog/Impl/PostWriterFactory.cs Mon May 23 19:54:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Blog/Impl/PostWriterFactory.cs Mon May 23 20:13:37 2011 -0300 @@ -8,9 +8,9 @@ { switch (accion) { - case Accion.Realizar: + case Accion.Publicar: return new RealizarReunionPostWriter(); - case Accion.Publicar: + case Accion.Agendar: return new PublicarReunionPostWriter(); default: return new NullObjectPostWriter();
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs Mon May 23 19:54:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs Mon May 23 20:13:37 2011 -0300 @@ -77,7 +77,7 @@ return new Resultado(true); } - public Resultado Publicar(string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion) + public Resultado Agendar(string titulo, string ponenteNombre, DateTime? fecha, string urlInvitacion) { if (!fecha.HasValue) return new Resultado(false); @@ -88,9 +88,9 @@ Evento evento = _eventosRepository.GetPropuestaByTitulo(titulo); if (evento == null) - evento = Evento.Publicar(titulo, ponente, fecha.Value, urlInvitacion); + evento = Evento.Agendar(titulo, ponente, fecha.Value, urlInvitacion); else - evento.Publicar(ponente, fecha, urlInvitacion); + evento.Agendar(ponente, fecha, urlInvitacion); if (_publicador != null) _publicador.Publicar(evento);
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs Mon May 23 19:54:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs Mon May 23 20:13:37 2011 -0300 @@ -5,32 +5,24 @@ { public class Evento : Identificable { - private readonly IList<Track> _tracks; - private IList<string> _enlaces; - - public static Evento Proponer(string titulo, Ponente ponente) - { - var evento = new Evento { Titulo = titulo, Ponente = ponente }; - evento.AddTracks(new Track(Accion.Proponer)); - - return evento; - } - - public static Evento Publicar(string titulo, Ponente ponente, DateTime fecha, string urlInvitacion) - { - var evento = new Evento { Titulo = titulo }; - evento.Publicar(ponente, fecha, urlInvitacion); - - return evento; - } - protected Evento() { - _enlaces = new List<string>(); _tracks = new List<Track>(); } + #region Propiedades del Evento + + private readonly IList<Track> _tracks; + private Ponente _ponente; + + /// <summary> + /// Título del evento + /// </summary> public virtual string Titulo { get; private set; } + + /// <summary> + /// Fecha para la que se encuentra agendado el evento + /// </summary> public virtual DateTime? Fecha { get; private set; } /// <summary> @@ -48,7 +40,9 @@ /// </summary> public virtual short NumeroOrden { get; private set; } - private Ponente _ponente; + /// <summary> + /// Ponente o responsable del evento + /// </summary> public virtual Ponente Ponente { get { return _ponente; } @@ -62,11 +56,62 @@ } } + /// <summary> + /// Track de cambios que ha sufrido el evento + /// </summary> public virtual IEnumerable<Track> Tracks { get { return _tracks; } } + #endregion + + #region Acciones sobre el evento + + /// <summary> + /// Propone un evento + /// </summary> + /// <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) + { + var evento = new Evento { Titulo = titulo, Ponente = ponente }; + evento.AddTracks(new Track(Accion.Proponer)); + + return evento; + } + + /// <summary> + /// Agenda un evento que no estaba propuesto + /// </summary> + /// <param name="titulo">Título del evento a agendar</param> + /// <param name="ponente">Ponente para el evento</param> + /// <param name="fecha">Fecha de realización del evento</param> + /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> + /// <returns></returns> + public static Evento Agendar(string titulo, Ponente ponente, DateTime fecha, string urlInvitacion) + { + var evento = new Evento { Titulo = titulo }; + evento.Agendar(ponente, fecha, urlInvitacion); + + return evento; + } + + /// <summary> + /// Agenda el evento actual + /// </summary> + /// <param name="ponente">Ponente para el evento</param> + /// <param name="fecha">Fecha de realización del evento</param> + /// <param name="urlInvitacion">Url con la invitación realizada por el ponente</param> + public virtual void Agendar(Ponente ponente, DateTime? fecha, string urlInvitacion) + { + Ponente = ponente; + Fecha = fecha; + UrlInvitacion = urlInvitacion; + AddTracks(new Track(Accion.Agendar)); + } + public virtual void Actualizar(Ponente ponente, DateTime? fecha) { Ponente = ponente; @@ -81,13 +126,7 @@ AddTracks(new Track(Accion.CambiarTitulo)); } - public virtual void Publicar(Ponente ponente, DateTime? fecha, string urlInvitacion) - { - Ponente = ponente; - Fecha = fecha; - UrlInvitacion = urlInvitacion; - AddTracks(new Track(Accion.Publicar)); - } + #endregion private void AddTracks(Track track) {
--- a/Agendas/trunk/src/Agendas.Domain/Track.cs Mon May 23 19:54:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Track.cs Mon May 23 20:13:37 2011 -0300 @@ -20,10 +20,10 @@ public enum Accion { Proponer = 1, - Publicar = 2, + Agendar = 2, Modificar = 3, CambiarTitulo = 4, - Realizar = 5 + Publicar = 5 } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Mon May 23 19:54:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Mon May 23 20:13:37 2011 -0300 @@ -19,9 +19,9 @@ var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository); - agenda.Publicar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), + agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), urlInvitacion); - agenda.Publicar("Conform - Parte 2", "Fabio Maulo", new DateTime(2011, 3, 5), + agenda.Agendar("Conform - Parte 2", "Fabio Maulo", new DateTime(2011, 3, 5), urlInvitacion); var eventos = agenda.GetEventosPublicados(); @@ -51,7 +51,7 @@ 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), urlInvitacion); + agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), urlInvitacion); Assert.AreEqual(1, agenda.GetEventosPublicados().Count); @@ -73,7 +73,7 @@ var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository); - agenda.Publicar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), + agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), urlInvitacion); Assert.AreEqual(1, agenda.GetEventosPublicados().Count);
--- a/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Mon May 23 19:54:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Mon May 23 20:13:37 2011 -0300 @@ -38,7 +38,7 @@ Assert.AreEqual("otro ponente", evento.Ponente.Nombre); } - var r = agenda.Publicar("Van 2", "jjmontes", DateTime.Now, urlInvitacion); + var r = agenda.Agendar("Van 2", "jjmontes", DateTime.Now, urlInvitacion); Assert.IsTrue(r.Succeful); { IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos(); @@ -61,7 +61,7 @@ { var van = agenda.GetEventosPropuestos().FirstOrDefault(); Assert.IsNotNull(van); - var r = agenda.Publicar(van.Titulo, "Ponente", null, + var r = agenda.Agendar(van.Titulo, "Ponente", null, urlInvitacion); Assert.IsFalse(r.Succeful); } @@ -81,7 +81,7 @@ Assert.IsNotNull(van); van.Actualizar(null, DateTime.Today.AddDays(5)); - var r = agenda.Publicar(van.Titulo, string.Empty, van.Fecha, + var r = agenda.Agendar(van.Titulo, string.Empty, van.Fecha, urlInvitacion); Assert.IsFalse(r.Succeful); } @@ -138,7 +138,7 @@ var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); agenda.Proponer("Van propuesta", null); - var r = agenda.Publicar("Van publicada", "jjmontes", DateTime.Now, + var r = agenda.Agendar("Van publicada", "jjmontes", DateTime.Now, urlInvitacion); Assert.IsTrue(r.Succeful);
--- a/Agendas/trunk/src/Agendas.Tests/PulicarTests.cs Mon May 23 19:54:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PulicarTests.cs Mon May 23 20:13:37 2011 -0300 @@ -29,7 +29,7 @@ var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository); - Assert.Throws<Exception>(() => agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion)); + 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)); @@ -47,7 +47,7 @@ var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository); Assert.Throws<IdentityContextNotConfiguredException>( - () => agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now, + () => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion)); repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); } @@ -62,7 +62,7 @@ var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository); - Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now, + Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion)); publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(0)); @@ -74,7 +74,7 @@ { var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); - var r = agenda.Publicar("Van para publicar", string.Empty, DateTime.Now, + var r = agenda.Agendar("Van para publicar", string.Empty, DateTime.Now, urlInvitacion); Assert.IsFalse(r.Succeful); @@ -91,7 +91,7 @@ var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), null, repository.Object, DefaultPonenteRepository); - agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now, + agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion); publicador1.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); @@ -106,7 +106,7 @@ var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository); - agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now, + agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion); var eventos = agenda.GetEventosPublicados(); Assert.AreEqual(1, eventos.Count); @@ -130,7 +130,7 @@ var agenda = new Agenda(publicador.Object, null, repository, DefaultPonenteRepository); - agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now, + agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion); publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); @@ -164,7 +164,7 @@ var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), recordador1.Object, DefaultEventoRepository, DefaultPonenteRepository); - agenda.Publicar("Van para publicar", "jjmontes", DateTime.Now, + agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion); var van = agenda.GetEventosPublicados().Single(v => v.Titulo == "Van para publicar");
--- a/Agendas/trunk/src/Agendas.Tests/TrackTests.cs Mon May 23 19:54:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/TrackTests.cs Mon May 23 20:13:37 2011 -0300 @@ -18,11 +18,11 @@ var agenda = new Agenda(null, null, repository, DefaultPonenteRepository); var fecha = DateTime.Now.AddDays(5); - agenda.Publicar("Html 5", "jjmontes", fecha, urlInvitacion); + agenda.Agendar("Html 5", "jjmontes", fecha, urlInvitacion); var evento = repository.GetEventosConFecha().First(); Assert.AreEqual(1, evento.Tracks.Count()); - Assert.AreEqual(Accion.Publicar, evento.Tracks.Last().Accion); + Assert.AreEqual(Accion.Agendar, evento.Tracks.Last().Accion); agenda.ModificarEvento(evento.Id, "Html 5", "otro ponente", fecha); Assert.AreEqual(2, evento.Tracks.Count()); @@ -40,12 +40,12 @@ var agenda = new Agenda(null, null, repository, DefaultPonenteRepository); - agenda.Publicar("Html 5", "jjmontes", DateTime.Now, + agenda.Agendar("Html 5", "jjmontes", DateTime.Now, urlInvitacion); var evento = repository.GetEventosConFecha().First(); Assert.AreEqual(1, evento.Tracks.Count()); - Assert.AreEqual(Accion.Publicar, evento.Tracks.Last().Accion); + Assert.AreEqual(Accion.Agendar, evento.Tracks.Last().Accion); //TODO: confirmar evento y evaluar .tracks }
--- a/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Mon May 23 19:54:05 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Mon May 23 20:13:37 2011 -0300 @@ -35,7 +35,7 @@ { var agenda = AgendaFactory.GetAgenda(); - var r = agenda.Publicar(model.Titulo, model.Ponente, model.Fecha, + var r = agenda.Agendar(model.Titulo, model.Ponente, model.Fecha, model.UrlInvitacion); if (r.Succeful) return RedirectToAction("Index");