Mercurial > altnet-hispano
changeset 81:c76661cff260
Workflow de acciones sobre un evento (camino feliz)
author | nelopauselli |
---|---|
date | Tue, 24 May 2011 19:21:20 -0300 |
parents | c2d98fd6593f |
children | c8897b1c6f49 |
files | 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/Agendas.Tests.csproj Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs Agendas/trunk/src/Agendas.Tests/Workflows/WorkflowTests.cs |
diffstat | 7 files changed, 172 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs Tue May 24 18:25:57 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs Tue May 24 19:21:20 2011 -0300 @@ -21,9 +21,12 @@ _recordador = recordador; } - public Evento GetEvento(Guid id) + public Evento GetEvento(Guid eventoId) { - return _eventosRepository.Get(id); + Evento evento =_eventosRepository.Get(eventoId); + if (evento == null) + throw new EventoNotFoundException(eventoId); + return evento; } public IList<Evento> GetEventosPropuestos() @@ -38,9 +41,7 @@ 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); + Evento evento = GetEvento(id); Ponente ponente = null; if (!string.IsNullOrWhiteSpace(ponenteNombre)) @@ -54,8 +55,7 @@ else if (evento.Fecha != fecha || evento.Ponente != ponente || evento.UrlInvitacion != urlInvitacion) evento.Actualizar(ponente, fecha, urlInvitacion); - if (_publicador != null) - _publicador.Publicar(evento); + Notify(evento); return new Resultado(true); } @@ -73,6 +73,8 @@ if (string.IsNullOrWhiteSpace(evento.Titulo)) return new Resultado(false); + Notify(evento); + _eventosRepository.Save(evento); _ponenteRepository.Save(ponente); @@ -94,8 +96,7 @@ else evento.Agendar(ponente, fecha, urlInvitacion); - if (_publicador != null) - _publicador.Publicar(evento); + Notify(evento); _eventosRepository.Save(evento); _ponenteRepository.Save(ponente); @@ -103,6 +104,32 @@ return new Resultado(true); } + public Resultado Confirmar(Guid eventoId) + { + Evento evento = GetEvento(eventoId); + + evento.Confirmar(); + + Notify(evento); + + _eventosRepository.Save(evento); + + return new Resultado(true); + } + + public Resultado Publicar(Guid eventoId) + { + Evento evento = GetEvento(eventoId); + + evento.Publicar(); + + Notify(evento); + + _eventosRepository.Save(evento); + + return new Resultado(true); + } + public void Recordar(Guid eventoId) { Evento evento = _eventosRepository.Get(eventoId); @@ -110,6 +137,12 @@ _recordador.Recordar(evento); } + private void Notify(Evento evento) + { + if (_publicador != null) + _publicador.Publicar(evento); + } + public void RegistrarPonente(string nombre, string mail, string twitter, string blog) { var ponente = new Ponente(nombre, mail, twitter, blog);
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs Tue May 24 18:25:57 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs Tue May 24 19:21:20 2011 -0300 @@ -127,11 +127,22 @@ AddTracks(new Track(this, Accion.CambiarTitulo)); } + public virtual void Confirmar() + { + AddTracks(new Track(this, Accion.Confirmar)); + } + + public virtual void Publicar() + { + AddTracks(new Track(this, Accion.Publicar)); + } + #endregion private void AddTracks(Track track) { _tracks.Add(track); } + } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Domain/Track.cs Tue May 24 18:25:57 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Track.cs Tue May 24 19:21:20 2011 -0300 @@ -25,7 +25,8 @@ Agendar = 2, Modificar = 3, CambiarTitulo = 4, - Publicar = 5 + Publicar = 5, + Confirmar = 6 } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj Tue May 24 18:25:57 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj Tue May 24 19:21:20 2011 -0300 @@ -80,6 +80,8 @@ <Compile Include="AgendarTests.cs" /> <Compile Include="TestBase.cs" /> <Compile Include="TrackTests.cs" /> + <Compile Include="Workflows\Workflow.cs" /> + <Compile Include="Workflows\WorkflowTests.cs" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\Agendas.Domain\Agendas.Domain.csproj"> @@ -112,6 +114,7 @@ <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> </ItemGroup> + <ItemGroup /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets.
--- a/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Tue May 24 18:25:57 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Tue May 24 19:21:20 2011 -0300 @@ -94,7 +94,7 @@ var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); - Assert.IsNull(agenda.GetEvento(idEventoNoExistente)); + Assert.Throws<EventoNotFoundException>(() => agenda.GetEvento(idEventoNoExistente)); } [Test]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs Tue May 24 19:21:20 2011 -0300 @@ -0,0 +1,43 @@ +using System; +using AltNetHispano.Agendas.Domain; +using AltNetHispano.Agendas.Domain.Repositories; +using NUnit.Framework; + +namespace AltNetHispano.Agendas.Tests.Workflows +{ + internal class Workflow + { + private readonly Agenda _agenda; + + public Workflow(IPublicador publicador, IEventoRepository eventoRepository, IPonenteRepository ponenteRepository) + { + _agenda = new Agenda(publicador, null, eventoRepository, ponenteRepository); + } + + public void Proponer() + { + + var resultado = _agenda.Proponer("SOLID", "Jorge", null); + Assert.IsTrue(resultado.Succeful); + } + + + public void Agendar() + { + var resultado = _agenda.Agendar("SOLID", "Jorge", DateTime.Today.AddDays(5), null); + Assert.IsTrue(resultado.Succeful); + } + + public void Confirmar(Guid eventoId) + { + var resultado = _agenda.Confirmar(eventoId); + Assert.IsTrue(resultado.Succeful); + } + + public void Publicar(Guid eventoId) + { + var resultado = _agenda.Publicar(eventoId); + Assert.IsTrue(resultado.Succeful); + } + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Tests/Workflows/WorkflowTests.cs Tue May 24 19:21:20 2011 -0300 @@ -0,0 +1,70 @@ +using System.Linq; +using AltNetHispano.Agendas.Domain; +using Moq; +using NUnit.Framework; + +namespace AltNetHispano.Agendas.Tests.Workflows +{ + [TestFixture] + public class WorkflowTests : TestBase + { + private Mock<IPublicador> _publicador; + private Workflow _workflow; + + [SetUp] + public void InitPublicador() + { + _publicador = new Mock<IPublicador>(); + _workflow = new Workflow(_publicador.Object, DefaultEventoRepository, DefaultPonenteRepository); + } + + [Test] + public void Proponer() + { + _workflow.Proponer(); + _publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Once()); + } + + [Test] + public void Proponer_y_agendar() + { + _workflow.Proponer(); + + _workflow.Agendar(); + + _publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(2)); + } + + [Test] + public void Proponer_agendar_y_confirmar() + { + _workflow.Proponer(); + + _workflow.Agendar(); + + var evento = DefaultEventoRepository.GetEventosConFecha().SingleOrDefault(); + Assert.IsNotNull(evento); + + _workflow.Confirmar(evento.Id); + + _publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(3)); + } + + [Test] + public void Proponer_agendar_confirmar_publicar() + { + _workflow.Proponer(); + + _workflow.Agendar(); + + var evento = DefaultEventoRepository.GetEventosConFecha().SingleOrDefault(); + Assert.IsNotNull(evento); + + _workflow.Confirmar(evento.Id); + + _workflow.Publicar(evento.Id); + + _publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(4)); + } + } +} \ No newline at end of file