view Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs @ 60:02e163f2ca38

Refactoring de test de crud del evento
author nelopauselli
date Mon, 16 May 2011 21:40:40 -0300
parents
children c40b97bbed01
line wrap: on
line source

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

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

		public EventoCrud(Func<IEventoRepository> createRepository, Func<IDisposable> requestEmulator)
		{
			_createRepository = createRepository;
			_requestEmulator = requestEmulator;
		}

		public Guid Create()
		{
			using (_requestEmulator.Invoke())
			{
				var van = Evento.Proponer("TDD - Diseño Basado en Ejemplos", new Ponente("Carlos Blé"));

				IEventoRepository eventoRepository = _createRepository.Invoke();

				eventoRepository.Save(van);

				return van.Id;
			}
		}

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

			using (_requestEmulator.Invoke())
			{
				IEventoRepository eventoRepository = _createRepository.Invoke();

				Evento van = eventoRepository.Get(eventoId);

				Assert.IsNotNull(van);
				Assert.IsNotNull(van.Ponente);
				Assert.AreEqual("Carlos Blé", van.Ponente.Nombre);
				Assert.AreEqual("TDD - Diseño Basado en Ejemplos", van.Titulo);
			}
		}

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

			using (_requestEmulator.Invoke())
			{
				IEventoRepository eventoRepository = _createRepository.Invoke();

				Evento van = eventoRepository.Get(eventoId);

				Assert.IsNotNull(van);

				van.CambiarTitulo("TDD & Ejemplos");
				van.Actualizar(van.Ponente, new DateTime(2010, 04, 17));

				eventoRepository.Update(van);
			}

			using (_requestEmulator.Invoke())
			{
				IEventoRepository eventoRepository = _createRepository.Invoke();

				Evento van = eventoRepository.Get(eventoId);

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

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

			using (_requestEmulator.Invoke())
			{
				IEventoRepository eventoRepository = _createRepository.Invoke();

				Evento van = eventoRepository.Get(eventoId);
				Assert.IsNotNull(van);
				eventoRepository.Delete(van);
			}

			using (_requestEmulator.Invoke())
			{
				IEventoRepository eventoRepository = _createRepository.Invoke();

				Evento van = eventoRepository.Get(eventoId);

				Assert.IsNull(van);
			}
		}
	}
}