changeset 243:59f8fa2f835e

Ticket 177: Valor de Duración de VAN en 0.
author juanjose.montesdeocaarbos
date Thu, 06 Oct 2011 08:13:05 -0300
parents 5cc1681d3789
children 31fb96912d37
files Agendas/trunk/src/Agendas.Domain/Agenda.cs Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Agendas/trunk/src/Agendas.Web.Tests/Agendas.Web.Tests.csproj Agendas/trunk/src/Agendas.Web.Tests/Controllers/EventoControllerTests.cs
diffstat 4 files changed, 100 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Wed Oct 05 07:57:21 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Thu Oct 06 08:13:05 2011 -0300
@@ -174,13 +174,13 @@
 		public EventoResultado Publicar(Guid eventoId, short numeroOrden, string urlWiki, TimeSpan duracion)
         {
             if (numeroOrden <= 0)
-                throw new ArgumentOutOfRangeException("numeroOrden");
+                return new EventoResultado(false, "Número de Orden fuera de rango", null); 
 
             if (string.IsNullOrWhiteSpace(urlWiki))
-                throw new ArgumentException("urlWiki");
+                return new EventoResultado(false, "Url Wiki incorrecto", null); 
 
 			if (duracion.Hours.Equals(0) && duracion.Minutes.Equals(0))
-				throw new ArgumentOutOfRangeException("duracion");
+                return new EventoResultado(false, "Duración fuera de rango", null); 
 
             Evento evento = GetEvento(eventoId);
 
--- a/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs	Wed Oct 05 07:57:21 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs	Thu Oct 06 08:13:05 2011 -0300
@@ -483,30 +483,38 @@
 
             const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx";
 
-            Assert.Throws<ArgumentOutOfRangeException>(() => agenda.Publicar(evento.Id, 0, urlWiki, duracion));
-            Assert.Throws<ArgumentOutOfRangeException>(() => agenda.Publicar(evento.Id, -1, urlWiki, duracion));
+            var eventoResultado = agenda.Publicar(evento.Id, 0, urlWiki, duracion);
+            Assert.IsFalse(eventoResultado.Succeful);
+            Assert.AreEqual("Número de Orden fuera de rango", eventoResultado.Message);
+            eventoResultado = agenda.Publicar(evento.Id, -1, urlWiki, duracion);
+            Assert.IsFalse(eventoResultado.Succeful);
+            Assert.AreEqual("Número de Orden fuera de rango", eventoResultado.Message);
         }
 
         [Test]
         public void Publicar_Evento_Con_Url_Invalida_Genera_Excepcion()
         {
-			var duracion = new TimeSpan(1, 34, 00);
+            var duracion = new TimeSpan(1, 34, 00);
             var publicador1 = new Mock<IPublicador>();
 
             var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository);
             var fechaInicio = DateTime.MinValue.ToUniversalTime();
             var fechaTermino = fechaInicio.AddHours(2);
-            agenda.Agendar("Html 5", new[]{TestsHelper.GetOrCreatePonente("jjmontes")},  fechaInicio, fechaTermino,
+            agenda.Agendar("Html 5", new[] {TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino,
                            urlInvitacion, TipoEvento.Van);
 
             var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5");
             agenda.Confirmar(evento.Id);
 
-            Assert.Throws<ArgumentException>(() => agenda.Publicar(evento.Id, 1, "", duracion));
-            Assert.Throws<ArgumentException>(() => agenda.Publicar(evento.Id, 1, " ", duracion));
+            var eventoResultado = agenda.Publicar(evento.Id, 1, "", duracion);
+            Assert.IsFalse(eventoResultado.Succeful);
+            Assert.AreEqual("Url Wiki incorrecto", eventoResultado.Message);
+            eventoResultado = agenda.Publicar(evento.Id, 1, " ", duracion);
+            Assert.IsFalse(eventoResultado.Succeful);
+            Assert.AreEqual("Url Wiki incorrecto", eventoResultado.Message);
         }
 
-		[Test]
+	    [Test]
 		public void Publicar_Evento_Con_Duracion_Invalida_Genera_Excepcion()
 		{
 			const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx";
@@ -521,9 +529,13 @@
 			var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5");
 			agenda.Confirmar(evento.Id);
 
-			Assert.Throws<ArgumentOutOfRangeException>(() => agenda.Publicar(evento.Id, 1, urlWiki, new TimeSpan(0, 0, 0)));
-			Assert.Throws<ArgumentOutOfRangeException>(() => agenda.Publicar(evento.Id, 1, urlWiki, new TimeSpan(0, 0, 59)));
-		}
+			var eventoResultado = agenda.Publicar(evento.Id, 1, urlWiki, new TimeSpan(0, 0, 0));
+            Assert.IsFalse(eventoResultado.Succeful);
+            Assert.AreEqual("Duración fuera de rango", eventoResultado.Message);
+			eventoResultado = agenda.Publicar(evento.Id, 1, urlWiki, new TimeSpan(0, 0, 59));
+            Assert.IsFalse(eventoResultado.Succeful);
+            Assert.AreEqual("Duración fuera de rango", eventoResultado.Message);
+        }
 
 		[Test]
 		public void Verificar_que_no_se_puedan_agendar_dos_eventos_para_el_mismo_intervalo()
--- a/Agendas/trunk/src/Agendas.Web.Tests/Agendas.Web.Tests.csproj	Wed Oct 05 07:57:21 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web.Tests/Agendas.Web.Tests.csproj	Thu Oct 06 08:13:05 2011 -0300
@@ -31,6 +31,9 @@
     <WarningLevel>4</WarningLevel>
   </PropertyGroup>
   <ItemGroup>
+    <Reference Include="Castle.Core">
+      <HintPath>..\packages\Castle.Core.2.5.2\lib\NET35\Castle.Core.dll</HintPath>
+    </Reference>
     <Reference Include="Moq">
       <HintPath>..\packages\Moq.4.0.10827\lib\NET40\Moq.dll</HintPath>
     </Reference>
--- a/Agendas/trunk/src/Agendas.Web.Tests/Controllers/EventoControllerTests.cs	Wed Oct 05 07:57:21 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web.Tests/Controllers/EventoControllerTests.cs	Thu Oct 06 08:13:05 2011 -0300
@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
+using System.Web.Mvc;
 using Agendas.NHibernate;
 using Agendas.Repositories.Tests.Infraestructure;
 using AltNetHispano.Agendas.Domain;
@@ -16,47 +17,98 @@
 	[TestFixture]
 	public class EventoControllerTests
 	{
-		[SetUp]
-		public void SetearUsuario()
+        private void PopulatePersona()
+        {
+            using (new RequestEmulator(NhHelper.GetSessionFactory()))
+            {
+                var personaController = new PersonaController();
+                personaController.Nueva(new PersonaNewModel
+                                            {
+                                                Nombre = "Persona 1",
+                                                Blog = "http://blog.persona1.com",
+                                                EMail = "info@persona1.com",
+                                                Roles = new string[] {"Administrador", "Usuario"},
+                                                Twitter = "persona1"
+                                            });
+            }
+        }
+
+	    private Guid GetGuidPersona()
+        {
+            using (new RequestEmulator(NhHelper.GetSessionFactory()))
+            {
+                var personaController = new PersonaController();
+                var viewResult = (ViewResult) personaController.Index();
+                return ((PersonaIndexModel) viewResult.Model).Items.FirstOrDefault().Id;
+            }
+        }
+
+		private void SetearUsuario()
 		{
 			var seguridad = new Mock<ISeguridad>();
 			seguridad.Setup(s => s.GetUserName()).Returns("neluz");
 			IdentityContext.Init(seguridad.Object, new PersonaRepository(NhHelper.GetSessionFactory()));
-
 		}
 
-		[Test]
-		[Ignore]
+        [SetUp]
+        public void Setup()
+        {
+            NhHelperTest.CleanDb();
+            PopulatePersona();
+            SetearUsuario();
+        }
+
+	    [Test]
 		public void Publicar_Evento()
 		{
+		    ViewResult viewResult = null;
+		    IEnumerable<EventoDto> eventosDto = null;
+		    EventoPublicarModel eventoPublicar = null;
 			var eventoController = new EventoController();
 
 			var eventoNew = new EventoNewModel
 			                	{
 			                		Duracion = new TimeSpan(0, 0, 0),
-			                		Fecha = DateTime.Today.AddDays(5),
+			                		Fecha = DateTime.Today.AddDays(15),
 			                		Hora = new TimeSpan(18, 0, 0),
-			                		Ponentes = new[] {Guid.NewGuid()},
+                                    Ponentes = new[] { GetGuidPersona()},
 			                		TipoEvento = (int) TipoEvento.Van,
-			                		Titulo = "Título 1"
+			                		Titulo = "Título 2"
 			                	};
-
+		    
 			using (new RequestEmulator(NhHelper.GetSessionFactory()))
 			{
-				var resultNuevo = eventoController.Nuevo(eventoNew);
+			    eventoController.Nuevo(eventoNew);
 			}
-
-            var eventoPublicar = new EventoPublicarModel
-                                     {
-                                         NroOrden = 1,
-                                         Titulo = "Título 1",
-                                         UrlWiki = "http://www.altnethistpano.org/vans/titulo-1.ashx",
-                                         DuracionReal = new TimeSpan(0, 0, 0)
-                                     };
-
+            using (new RequestEmulator(NhHelper.GetSessionFactory()))
+            {
+                viewResult = (ViewResult)eventoController.Index();
+			}
+            using (new RequestEmulator(NhHelper.GetSessionFactory()))
+            {
+                eventosDto = ((EventoIndexModel) viewResult.Model).ProximosEventos;
+            }
             using (new RequestEmulator(NhHelper.GetSessionFactory()))
             {
-                var resultPublicar = eventoController.Publicar(eventoPublicar);
+                var firstEvent = eventosDto.LastOrDefault();
+
+                eventoPublicar = new EventoPublicarModel
+                {
+                    Id = firstEvent.Id,
+                    NroOrden = 1,
+                    //Titulo = "Título 2",
+                    UrlWiki = "http://www.altnethistpano.org/vans/titulo-1.ashx",
+                    DuracionReal = new TimeSpan(0, 0, 0)
+                };
+            }
+            using (new RequestEmulator(NhHelper.GetSessionFactory()))
+            {
+                var resultPublicar = (ViewResult)eventoController.Publicar(eventoPublicar);
+                var modelState = resultPublicar.ViewData.ModelState.FirstOrDefault().Value;
+
+                Assert.AreEqual(1, modelState.Errors.Count);
+                Assert.AreEqual("Duración fuera de rango", modelState.Errors.FirstOrDefault().ErrorMessage);
+                
             }
         }
     }