changeset 259:e6c041d8e1bf

Ticket #193.1: Al guardar (nuevo/modificar) una persona, que la cuenta de twitter no comience con @
author juanjose.montesdeocaarbos
date Thu, 20 Oct 2011 08:16:55 -0300
parents 52fe43e36f5f
children 8a2a58b5e2d6
files Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs Agendas/trunk/src/Agendas.Web.Tests/Agendas.Web.Tests.csproj Agendas/trunk/src/Agendas.Web.Tests/Controllers/PersonaControllerTests.cs Agendas/trunk/src/Agendas.Web/Models/PersonaModel.cs
diffstat 4 files changed, 133 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs	Wed Oct 19 22:59:02 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Services/PersonaService.cs	Thu Oct 20 08:16:55 2011 -0300
@@ -83,6 +83,9 @@
 
 		public ResultadoAdd Add(string nombre, string twitter, string mail, string blog, IEnumerable<string> roles)
 		{
+            if (twitter.StartsWith("@"))
+                return new ResultadoAdd("No debe ingresar el arroba al escribir la cuenta de twitter.");
+
 			var persona = _personaRepository.GetByNombre(nombre);
 			if (persona!=null)
 				return new ResultadoAdd("Ya existe una persona con el nombre " + nombre);
@@ -118,6 +121,9 @@
             if (persona == null)
                 return new Resultado(false, string.Format("No se pudo encontrar la persona cuyo Id sea {0}", id));
 
+            if (twitter.StartsWith("@"))
+                return new ResultadoAdd("No debe ingresar el arroba al escribir la cuenta de twitter.");
+
 	        persona.Nombre = nombre;
 	        persona.Twitter = twitter;
 	        persona.Mail = mail;
--- a/Agendas/trunk/src/Agendas.Web.Tests/Agendas.Web.Tests.csproj	Wed Oct 19 22:59:02 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web.Tests/Agendas.Web.Tests.csproj	Thu Oct 20 08:16:55 2011 -0300
@@ -57,6 +57,7 @@
   <ItemGroup>
     <Compile Include="AutorizationsTests.cs" />
     <Compile Include="Controllers\EventoControllerTests.cs" />
+    <Compile Include="Controllers\PersonaControllerTests.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
   <ItemGroup>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Web.Tests/Controllers/PersonaControllerTests.cs	Thu Oct 20 08:16:55 2011 -0300
@@ -0,0 +1,104 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web.Mvc;
+using Agendas.NHibernate;
+using Agendas.Repositories.Tests.Infraestructure;
+using AltNetHispano.Agendas.Domain;
+using AltNetHispano.Agendas.Repositories.NHibernate;
+using AltNetHispano.Agendas.Web.Controllers;
+using AltNetHispano.Agendas.Web.Models;
+using Moq;
+using NUnit.Framework;
+
+namespace Agendas.Web.Tests.Controllers
+{
+    [TestFixture]
+    public class PersonaControllerTests
+    {
+        private void SetearUsuario()
+        {
+            var seguridad = new Mock<ISeguridad>();
+            seguridad.Setup(s => s.GetUserName()).Returns("neluz");
+            IdentityContext.Init(seguridad.Object, new PersonaRepository(NhHelper.GetSessionFactory()));
+        }
+
+        [SetUp]
+        public void Setup()
+        {
+            NhHelperTest.CleanDb();
+            //PopulatePersona();
+            SetearUsuario();
+        }
+
+        [Test]
+        public void PersonaNueva_ErrorAlGuardarTwitterConArroba()
+        {
+            var personaController = new PersonaController();
+
+            var personaNew = new PersonaNewModel
+                                 {
+                                     Blog = "http://juanjose.montesdeocaarbos.com.ar/blog/",
+                                     EMail = "juanjose.montesdeocaarbos gmail.com",
+                                     Nombre = "Juan José Montes de Oca Arbós",
+                                     Roles = new string[] {"Administrador", "Usuario"},
+                                     Twitter = "@jjmoa"
+                                 };
+
+            using (new RequestEmulator(NhHelper.GetSessionFactory()))
+            {
+                Assert.IsFalse(personaController.TempData.ContainsKey("error"));
+                var resultNuevo = personaController.Nueva(personaNew);
+                Assert.IsInstanceOf(typeof (ViewResult), resultNuevo);
+                Assert.AreEqual("Defaulteditor", ((ViewResult) resultNuevo).ViewName);
+                Assert.IsTrue(personaController.TempData.ContainsKey("error"));
+                Assert.AreNotEqual(string.Empty, personaController.TempData["error"]);
+            }
+        }
+
+        [Test]
+        public void PersonaModificar_ErrorAlGuardarTwitterConArroba()
+        {
+            var personaController = new PersonaController();
+            #region PersonaNew
+            var personaNew = new PersonaNewModel
+                                 {
+                                     Blog = "http://juanjose.montesdeocaarbos.com.ar/blog/",
+                                     EMail = "juanjose.montesdeocaarbos@gmail.com",
+                                     Nombre = "Juan José Montes de Oca Arbós",
+                                     Roles = new string[] {"Administrador", "Usuario"},
+                                     Twitter = "jjmoa"
+                                 };
+
+            using (new RequestEmulator(NhHelper.GetSessionFactory()))
+            {
+                personaController.Nueva(personaNew);
+            }
+            #endregion
+
+            PersonaEditModel personaEdit = null;
+            using (new RequestEmulator(NhHelper.GetSessionFactory()))
+            {
+                var personaRepository = new PersonaRepository(NhHelper.GetSessionFactory());
+                personaEdit = new PersonaEditModel
+                                      {
+                                          Id = personaRepository.GetAll().FirstOrDefault().Id.ToString(),
+                                          Blog = "http://juanjose.montesdeocaarbos.com.ar/blog/",
+                                          EMail = "juanjose.montesdeocaarbos gmail.com",
+                                          Nombre = "Juan José Montes de Oca Arbós",
+                                          Roles = new string[] {"Administrador", "Usuario"},
+                                          Twitter = "@jjmoa"
+                                      };
+            }
+            using (new RequestEmulator(NhHelper.GetSessionFactory()))
+            {
+                Assert.IsFalse(personaController.TempData.ContainsKey("error"));
+                var resultModificar = personaController.Modificar(personaEdit);
+                Assert.IsInstanceOf(typeof (ViewResult), resultModificar);
+                Assert.AreEqual("Defaulteditor", ((ViewResult) resultModificar).ViewName);
+                Assert.IsTrue(personaController.TempData.ContainsKey("error"));
+                Assert.AreNotEqual(string.Empty, personaController.TempData["error"]);
+            }
+        }
+    }
+}
--- a/Agendas/trunk/src/Agendas.Web/Models/PersonaModel.cs	Wed Oct 19 22:59:02 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Models/PersonaModel.cs	Thu Oct 20 08:16:55 2011 -0300
@@ -1,7 +1,10 @@
 using System;
 using System.Collections.Generic;
+//using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations;
 using System.Web.Mvc;
+using DataAnnotationsExtensions;
+
 
 namespace AltNetHispano.Agendas.Web.Models
 {
@@ -15,12 +18,14 @@
         public string Nombre { get; set; }
 
         [Required]
+        [CustomValidation(typeof(PersonaValidation), "IsTwitterAccount")]
         public string Twitter { get; set; }
 
         [Required]
+        [Email]
         public string EMail { get; set; }
 
-		[DataType(DataType.Url)]
+		[Url]
     	public string Blog { get; set; }
 
 		public string[] Roles { get; set; }
@@ -36,12 +41,14 @@
         public string Nombre { get; set; }
 
         [Required]
+        [CustomValidation(typeof(PersonaValidation), "IsTwitterAccount")]
         public string Twitter { get; set; }
 
         [Required]
+        [Email]
         public string EMail { get; set; }
 
-		[DataType(DataType.Url)]
+        [Url]
     	public string Blog { get; set; }
 
 		public string[] Roles { get; set; }
@@ -70,4 +77,17 @@
         [HiddenInput]
         public string Blog { get; set; }
     }
+
+    //TODO: Ver donde movemos esta clase.
+    public class PersonaValidation
+    {
+        public static ValidationResult IsTwitterAccount(string value)
+        {
+            //[RegularExpression(@"^([\w\d\-\.]+)$")]
+            return value.StartsWith("@")
+                       ? new ValidationResult("No debe ingresar el arroba al escribir la cuenta de twitter.")
+                       : ValidationResult.Success;
+        }
+    }
+
 }
\ No newline at end of file