Mercurial > altnet-hispano
diff Agendas/trunk/src/Agendas.Tests/PulicarTests.cs @ 20:c5a99dde072f
reorganizando tests
author | nelo@MTEySS.neluz.int |
---|---|
date | Mon, 14 Mar 2011 20:59:28 -0300 |
parents | |
children | 43360bf09b1a |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Tests/PulicarTests.cs Mon Mar 14 20:59:28 2011 -0300 @@ -0,0 +1,143 @@ +using System; +using System.Linq; +using Agendas.Repositories.Memory; +using AltNetHispano.Agendas.Domain; +using AltNetHispano.Agendas.Domain.Repositories; +using Moq; +using NUnit.Framework; + +namespace AltNetHispano.Agendas.Tests +{ + [TestFixture] + public class PulicarTests : TestBase + { + [Test] + public void Publicar_van_con_usuario_autenticado() + { + var publicador = new Mock<IPublicador>(); + var repository = new EventoRepository(); + + var agenda = new Agenda(publicador.Object, null, SeguridadServiceDefault, repository); + + var van = EventoObjectMother.GetVanValidaParaPublicar(); + + agenda.Publicar(van.Titulo, van.Ponente, van.Fecha); + Assert.AreEqual(1, agenda.GetEventosPublicados().Count); + + publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); + } + + [Test] + public void Publicar_van_sin_usuario_autenticado() { + var seguridad = new Mock<ISeguridad>(); + seguridad.Setup(s => s.GetPrincipal()).Returns(SeguridadObjectMother.GetGenericPrincipalSinAutenticar()); + + var publicador = new Mock<IPublicador>(); + var repository = new Mock<IEventoRepository>(); + + var agenda = new Agenda(publicador.Object, null, seguridad.Object, repository.Object); + + var van = EventoObjectMother.GetVanValidaParaPublicar(); + + Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Publicar(van.Titulo, van.Ponente, van.Fecha)); + + 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 Publicar_van_sin_servicio_de_seguridad() + { + var publicador = new Mock<IPublicador>(); + var repository = new Mock<IEventoRepository>(); + + var agenda = new Agenda(publicador.Object, null, null, repository.Object); + + var van = EventoObjectMother.GetVanValidaParaPublicar(); + + Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Publicar(van.Titulo, van.Ponente, van.Fecha)); + repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); + } + + [Test] + public void Error_al_publicar_van() + { + 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, SeguridadServiceDefault, repository.Object); + + var van = EventoObjectMother.GetVanValidaParaPublicar(); + Assert.Throws<Exception>(() => agenda.Publicar(van.Titulo, van.Ponente, van.Fecha)); + 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 Publicar_van_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, SeguridadServiceDefault, repository.Object); + + var van = EventoObjectMother.GetVanValidaParaPublicar(); + agenda.Publicar(van.Titulo, van.Ponente, van.Fecha); + + 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_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 van = EventoObjectMother.GetVanValidaParaPublicar(); + agenda.Publicar(van.Titulo, van.Ponente, van.Fecha); + + agenda.Recordar(van); + + 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] + public void Publicar_y_modificar_van() + { + var repository = new EventoRepository(); + + var agenda = new Agenda(null, null, SeguridadServiceDefault, repository); + + var van = EventoObjectMother.GetVanValidaParaPublicar(); + agenda.Publicar(van.Titulo, van.Ponente, van.Fecha); + + var evento = repository.GetEventosConFecha().First(); + Assert.AreNotEqual(Guid.Empty, evento.Id); + + DateTime fecha = evento.Fecha.Value.AddDays(7); + agenda.ModificarEvento(evento.Id, "otro titulo", "otro ponente", fecha); + + evento = repository.GetEventosConFecha().First(); + Assert.AreEqual("otro titulo", evento.Titulo); + Assert.AreEqual("otro ponente", evento.Ponente); + Assert.AreEqual(fecha, evento.Fecha); + } + } +} \ No newline at end of file