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