view Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs @ 120:c3573defd18f

Agregado de Fecha, Usuario y Successful en TrackLog Modificacion de publicador de blog para usar TrackLog Agregado de TrackLog en el test de crud de eventos Fix en publicador de twitter para que no twitee si ya se encuentra en TrackLog pero con Successful en true
author Jorge@Jorge-PC
date Fri, 24 Jun 2011 21:18:21 -0300
parents 80c22175c9b5
children 3639803112c6
line wrap: on
line source

using System;
using System.Linq;
using AltNetHispano.Agendas.Domain;
using AltNetHispano.Agendas.Domain.Repositories;
using NUnit.Framework;

namespace AltNetHispano.Agendas.Tests.Cruds
{
	public class EventoCrud
	{
		private readonly IEventoRepository _eventoRepository;
		private readonly Func<IDisposable> _requestEmulator;
		private readonly IPersonaRepository _personaRepository;

		public EventoCrud(Func<IEventoRepository> createEventoRepository, Func<IPersonaRepository> createPonenteRepository, Func<IDisposable> requestEmulator)
		{
			_eventoRepository = createEventoRepository.Invoke();
			_personaRepository = createPonenteRepository.Invoke();

			_requestEmulator = requestEmulator;
		}

		public Guid Create()
		{
			using (_requestEmulator.Invoke())
			{
				var ponente = new Persona("Carlos Blé");
				_personaRepository.Save(ponente);

				var usuario = new Persona("Nelo");
				_personaRepository.Save(usuario);

				var evento = Evento.Proponer("TDD - Diseño Basado en Ejemplos", ponente, string.Empty, TipoEvento.Van);
				evento.Tracks.First().LogAdd(new TrackLog(TrackLogPropietario.Twitter, "Mensaje", usuario, true));
					
				_eventoRepository.Save(evento);

				return evento.Id;
			}
		}

		public void Read()
		{
			Guid eventoId = Create();

			using (_requestEmulator.Invoke())
			{
				Evento van = _eventoRepository.Get(eventoId);

				Assert.IsNotNull(van);
				Assert.IsNotNull(van.Ponente);
				Assert.AreEqual("Carlos Blé", van.Ponente.Nombre);

				var track1 = van.Tracks.Where(t => t.Accion == Accion.Proponer).FirstOrDefault();
				Assert.IsNotNull(track1);
				Assert.AreEqual(van, track1.Evento);
				
				Assert.AreEqual("TDD - Diseño Basado en Ejemplos", van.Titulo);
			}
		}

		public void Update()
		{
			Guid eventoId = Create();

			using (_requestEmulator.Invoke())
			{
				Evento van = _eventoRepository.Get(eventoId);

				Assert.IsNotNull(van);

				van.CambiarTitulo("TDD & Ejemplos");

				var otroPonente = new Persona("José");
				_personaRepository.Save(otroPonente);

				van.Actualizar(otroPonente, new DateTime(2010, 04, 17), null);

				_eventoRepository.Update(van);
			}

			using (_requestEmulator.Invoke())
			{
				Evento van = _eventoRepository.Get(eventoId);

				Assert.IsNotNull(van);
				Assert.IsNotNull(van.Ponente);
				Assert.AreEqual("José", van.Ponente.Nombre);
				Assert.AreEqual("TDD & Ejemplos", van.Titulo);
				Assert.AreEqual(new DateTime(2010, 04, 17), van.Fecha);

				var ponente1 = _personaRepository.GetByNombre("Carlos Blé");
				Assert.IsNotNull(ponente1);

				var ponente2 = _personaRepository.GetByNombre("José");
				Assert.IsNotNull(ponente2);

				Assert.AreEqual(1, van.Tracks.Where(t => t.Accion == Accion.Proponer).Count());
				Assert.AreEqual(1, van.Tracks.Where(t => t.Accion == Accion.Modificar).Count());
			}
		}

		public void Delete()
		{
			Guid eventoId = Create();

			using (_requestEmulator.Invoke())
			{
				Evento van = _eventoRepository.Get(eventoId);
				Assert.IsNotNull(van);

				_eventoRepository.Delete(van);
			}

			using (_requestEmulator.Invoke())
			{
				Evento van = _eventoRepository.Get(eventoId);

				Assert.IsNull(van);

				var ponente = _personaRepository.GetByNombre("Carlos Blé");
				
				Assert.IsNotNull(ponente);
			}
		}
	}
}