view Agendas/trunk/src/Agendas.Repositories.Tests/PersonaCrud.cs @ 274:72a96459f910

Ticket #123: Patrocinadores de las vans.
author juanjose.montesdeocaarbos
date Wed, 30 Nov 2011 08:56:01 -0300
parents 1ca7c39ad38b
children
line wrap: on
line source

using System;
using System.Collections.Generic;
using System.Linq;
using Agendas.Repositories.Tests.Infraestructure;
using AltNetHispano.Agendas.Domain;
using AltNetHispano.Agendas.Domain.Repositories;
using AltNetHispano.Agendas.Domain.Services;
using NUnit.Framework;

namespace Agendas.Repositories.Tests
{
	public abstract class PersonaCrud<T> where T : IInfraestrutureFactory, new()
	{
		private readonly IPersonaRepository _personaRepository;
		private readonly Func<IDisposable> _requestEmulator;
		private readonly PersonaService _personaService;
		private readonly IEventoRepository _eventoRepository;

		protected PersonaCrud()
		{
			var infraestrutureFactory = new T();

			_eventoRepository = infraestrutureFactory.GetEventoRepository();
			_personaRepository = infraestrutureFactory.GetPonenteRepository();
			_requestEmulator = infraestrutureFactory.GetRequestEmulator();

			_personaService = new PersonaService(_personaRepository, _eventoRepository);
		}

		[Test]
		public void CreateAdministrador()
		{
			Guid id;
			using (_requestEmulator.Invoke())
			{
				var r = CreatePersona("Nelo Pauselli", "nelopauselli", "nelopauselli@gmail.com", "http://nelopauselli.blogspot.com",
				                      null);
				Assert.AreEqual("Nelo Pauselli", r.Nombre);
				Assert.AreNotEqual(Guid.Empty, r.Id);

				id = r.Id;
			}

			using (_requestEmulator.Invoke())
			{
				var persona = _personaRepository.GetByNombre("Nelo Pauselli");
				Assert.IsNotNull(persona);
				Assert.AreEqual(id, persona.Id);
			}
		}

		private ResultadoAdd CreatePersona(string nombre, string twitter, string mail, string blog, IEnumerable<string> roles)
		{
			return _personaService.Add(nombre, twitter, mail, blog, roles);
		}

		[Test]
		public void ReadAdministrador()
		{
			Guid personaId;
			using (_requestEmulator.Invoke())
			{
				var r = CreatePersona("Nelo Pauselli", "nelopauselli", "nelopauselli@gmail.com", "http://nelopauselli.blogspot.com",
				                      null);
				personaId = r.Id;
			}

			using (_requestEmulator.Invoke())
			{
				var persona = _personaRepository.Get(personaId);

				Assert.IsNotNull(persona);
				Assert.AreEqual("Nelo Pauselli", persona.Nombre);
				Assert.AreEqual("nelopauselli", persona.Twitter);
				Assert.AreEqual("nelopauselli@gmail.com", persona.Mail);
				Assert.AreEqual("http://nelopauselli.blogspot.com", persona.Blog);

				Assert.IsTrue(persona.Cuentas.Any());
				Assert.AreEqual("nelopauselli", persona.Cuentas.First().LogonName);
				Assert.AreEqual(IdentityProviderEnum.Twitter, persona.Cuentas.First().IdentityProvider);

				Assert.IsTrue(persona.Roles.Any());
				Assert.IsTrue(persona.Roles.Contains(Roles.Usuario));
				Assert.IsTrue(persona.Roles.Contains(Roles.Administrador));
			}
		}

		[Test]
		public void CreateUsuario()
		{
			using (_requestEmulator.Invoke())
			{
				CreatePersona("Pablo Morales", "pablomorales", "pablomorales@gmail.com", "http://pablomorales.blogspot.com",
				              new[] {Roles.Usuario});
			}

			using (_requestEmulator.Invoke())
			{
				var persona = _personaRepository.GetByNombre("Pablo Morales");
				Assert.IsNotNull(persona);
			}
		}

		[Test]
		public void ReadUsuario()
		{
			Guid personaId;
			using (_requestEmulator.Invoke())
			{
				var r = CreatePersona("Pablo Morales", "pablomorales", "pablomorales@gmail.com", "http://pablomorales.blogspot.com",
				                      new[] {Roles.Usuario});
				personaId = r.Id;
			}

			using (_requestEmulator.Invoke())
			{
				var persona = _personaRepository.Get(personaId);

				Assert.IsNotNull(persona);
				Assert.AreEqual("Pablo Morales", persona.Nombre);
				Assert.AreEqual("pablomorales", persona.Twitter);
				Assert.AreEqual("pablomorales@gmail.com", persona.Mail);
				Assert.AreEqual("http://pablomorales.blogspot.com", persona.Blog);

				Assert.IsTrue(persona.Cuentas.Any());
				Assert.AreEqual("pablomorales", persona.Cuentas.First().LogonName);
				Assert.AreEqual(IdentityProviderEnum.Twitter, persona.Cuentas.First().IdentityProvider);

				Assert.IsTrue(persona.Roles.Any());
				Assert.IsTrue(persona.Roles.Contains(Roles.Usuario));
				Assert.IsFalse(persona.Roles.Contains(Roles.Administrador));
			}
		}

		[Test]
		public void Update()
		{
			Guid personaId;
			using (_requestEmulator.Invoke())
			{
				var r = CreatePersona("Nelo Pauselli", "nelopauselli", "nelopauselli@gmail.com", "http://nelopauselli.blogspot.com",
				                      null);
				personaId = r.Id;
			}

			using (_requestEmulator.Invoke())
			{
				var persona = _personaRepository.Get(personaId);
				Assert.IsNotNull(persona);

				persona.Nombre = "Nelo Mariano Pauselli";
			}

			using (_requestEmulator.Invoke())
			{
				var persona = _personaRepository.Get(personaId);

				Assert.IsNotNull(persona);
				Assert.AreEqual("Nelo Mariano Pauselli", persona.Nombre);
			}
		}

        [Test]
        [Ignore]
        public void UpdateDuplicatePersona()
        {
            Guid personaNeloId;
            using (_requestEmulator.Invoke())
            {
                var r = CreatePersona("Nelo Pauselli", "nelopauselli", "nelopauselli@gmail.com", "http://nelopauselli.blogspot.com",
                                      null);
                personaNeloId = r.Id;
            }
            Guid personaJorgeId;
            using (_requestEmulator.Invoke())
            {
                var r = CreatePersona("Jorge Gamba", "jorgegamba", "jorgegamba@gmail.com", "http://jorgegamba.com/",
                                      null);
                personaJorgeId = r.Id;
            }

            using (_requestEmulator.Invoke())
            {
                var persona = _personaRepository.Get(personaNeloId);
                Assert.IsNotNull(persona);

                persona.Nombre = "Jorge Gamba";
                persona.Mail = "jorgegamba@gmail.com";
                persona.Twitter = "jorgegamba";
                persona.Blog = "http://jorgegamba.com/";
            }
        }

		[Test]
		public void Delete()
		{
			Guid personaId;
			using (_requestEmulator.Invoke())
			{
				var r = CreatePersona("Nelo Pauselli", "nelopauselli", "nelopauselli@gmail.com",
				                      "http://nelopauselli.blogspot.com", null);
				personaId = r.Id;
			}

			using (_requestEmulator.Invoke())
			{
				var persona = _personaRepository.Get(personaId);
				Assert.IsNotNull(persona);
				_personaService.Delete(personaId);
			}
			using (_requestEmulator.Invoke())
			{
				var persona = _personaRepository.Get(personaId);
				Assert.IsNull(persona);
			}
		}

        [Test]
        public void GetAllPersonaSortByName()
        {
            using (_requestEmulator.Invoke())
            {
                CreatePersona("Pablo Morales", "pablomorales", "pablomorales@gmail.com",
                              "http://pablomorales.blogspot.com",
                              new[] {Roles.Usuario});
            }

            using (_requestEmulator.Invoke())
            {
                CreatePersona("Nelo Pauselli", "nelopauselli", "nelopauselli@gmail.com",
                              "http://nelopauselli.blogspot.com",
                              null);
            }

            using (_requestEmulator.Invoke())
            {
                CreatePersona("Jorge Gamba", "jorgegamba", "jorgegamba@gmail.com",
                              "http://nelopauselli.blogspot.com",
                              null);
            }

            using (_requestEmulator.Invoke())
            {
                var personas = _personaRepository.GetAll();
                var primeraPersona = personas[0];
                var segundaPersona = personas[1];
                var terceraPersona = personas[2];

                Assert.AreEqual("Jorge Gamba", primeraPersona.Nombre);
                Assert.AreEqual("Nelo Pauselli", segundaPersona.Nombre);
                Assert.AreEqual("Pablo Morales", terceraPersona.Nombre);
            }
        }
	}
}