diff Agendas/trunk/src/Agendas.Tests/AgendaTests.cs @ 4:49b572535156

proponer van publicar van propuesta comportamiento ante excepcion en publicador
author nelopauselli
date Tue, 08 Feb 2011 00:08:49 -0300
parents 5f007e266509
children 2912c1dd0e6b
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Tests/AgendaTests.cs	Sat Jan 22 20:23:50 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/AgendaTests.cs	Tue Feb 08 00:08:49 2011 -0300
@@ -1,7 +1,9 @@
 using System;
+using System.Collections.Generic;
 using System.Linq;
 using Agendas.Repositories.Memory;
 using AltNetHispano.Agendas.Domain;
+using AltNetHispano.Agendas.Domain.Exceptions;
 using AltNetHispano.Agendas.Domain.Repositories;
 using Moq;
 using NUnit.Framework;
@@ -18,7 +20,7 @@
 
 			var agenda = new Agenda(publicador.Object, null);
 
-			var cafe = new Cafe();
+			var cafe = EventoObjectMother.GetCafeValidoParaPublicar();
 			agenda.Publicar(cafe);
 
 			publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
@@ -31,13 +33,31 @@
 
 			var agenda = new Agenda(publicador.Object, null);
 
-			var van = new Van();
+			var van = EventoObjectMother.GetVanValidaParaPublicar();
+
 			agenda.Publicar(van);
+			Assert.AreEqual(1, agenda.Eventos.Count());
 
 			publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
 		}
 
 		[Test]
+		public void Error_al_publicar_van()
+		{
+			var publicador = new Mock<IPublicador>();
+			publicador.Setup(p => p.Publicar(It.IsAny<Evento>())).Throws(new Exception("Error intencional"));
+
+			var agenda = new Agenda(publicador.Object, null);
+
+			var van = EventoObjectMother.GetVanValidaParaPublicar();
+			Assert.Throws<Exception>(() => agenda.Publicar(van));
+			Assert.AreEqual(0, agenda.Eventos.Count());
+
+			publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
+		}
+
+
+		[Test]
 		public void Publicar_van_multiples_publicadores()
 		{
 			var publicador1 = new Mock<IPublicador>();
@@ -45,8 +65,8 @@
 
 			var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), null);
 
-			var cafe = new Cafe();
-			agenda.Publicar(cafe);
+			var van = EventoObjectMother.GetVanValidaParaPublicar();
+			agenda.Publicar(van);
 
 			publicador1.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
 			publicador2.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1));
@@ -61,7 +81,7 @@
 
 			var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), recordador1.Object);
 
-			var van = new Van();
+			var van = EventoObjectMother.GetVanValidaParaPublicar();
 			agenda.Publicar(van);
 
 			agenda.Recordar(van);
@@ -74,12 +94,74 @@
 		}
 
 		[Test]
+		public void Propuesta_de_van()
+		{
+			var van = new Van{Titulo = "Van propuesta"};
+
+			var agenda = new Agenda(null, null);
+			agenda.Proponer(van);
+
+			IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
+			Assert.IsNotNull(eventosPropuestos);
+			Assert.AreEqual(1, eventosPropuestos.Count);
+			Assert.AreEqual("Van propuesta", eventosPropuestos[0].Titulo);
+		}
+
+		[Test]
+		public void Propuesta_de_van_sin_titulo()
+		{
+			var van = new Van();
+
+			var agenda = new Agenda(null, null);
+			Assert.Throws<ValidationException>(() => agenda.Proponer(van));
+			Assert.AreEqual(Guid.Empty, van.Id);
+		}
+
+
+		[Test]
+		public void Agendar_van_propuesta_sin_fecha()
+		{
+			var agenda = new Agenda(null, null);
+
+			{
+				var van = new Van {Titulo = "Van propuesta"};
+				agenda.Proponer(van);
+			}
+
+			{
+				var van = agenda.GetEventosPropuestos().FirstOrDefault();
+				Assert.IsNotNull(van);
+				Assert.Throws<ValidationException>(()=>agenda.Publicar(van));
+			}
+		}
+
+		[Test]
+		public void Agendar_van_propuesta_sin_ponente()
+		{
+			var agenda = new Agenda(null, null);
+
+			{
+				var van = new Van { Titulo = "Van propuesta" };
+				agenda.Proponer(van);
+			}
+
+			{
+				var van = agenda.GetEventosPropuestos().FirstOrDefault() as Van;
+				Assert.IsNotNull(van);
+
+				van.Fecha = DateTime.Today.AddDays(5);
+				Assert.Throws<ValidationException>(() => agenda.Publicar(van));
+			}
+		}
+
+
+		[Test]
 		public void Van_crud()
 		{
 			Guid vanId;
 			{
 				var agenda = new Agenda(null, null);
-				agenda.Publicar(new Van());
+				agenda.Publicar(EventoObjectMother.GetVanValidaParaPublicar());
 
 				IAgendaRepository agendaRepository = new AgendaRepository();
 
@@ -94,7 +176,7 @@
 
 				Assert.IsNotNull(agenda);
 				Assert.AreEqual(1, agenda.Eventos.Count());
-				agenda.Publicar(new Cafe());
+				agenda.Publicar(EventoObjectMother.GetCafeValidoParaPublicar());
 
 				agendaRepository.Update(agenda);
 			}