view Agendas/trunk/src/Agendas.Repositories.Tests/PatrocinadorCrud.cs @ 300:48ab8788bd19

#200: Patrocinadores: Agregar link al sitio web.
author juanjose.montesdeocaarbos
date Mon, 27 Feb 2012 14:45:12 -0300
parents 9bc60d166c8a
children
line wrap: on
line source

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

namespace Agendas.Repositories.Tests
{
	public class PatrocinadorCrud
	{
		private readonly IPatrocinadorRepository _patrocinadorRepository;
		private readonly Func<IDisposable> _requestEmulator;
		private byte[] _logo;

		private static byte[] LoadLogo(string path)
		{
			using (var image = Image.FromFile(path))
			{
				var ms = new MemoryStream();
				image.Save(ms, image.RawFormat);
				return ms.ToArray();
			}
		}

		public PatrocinadorCrud(Func<IPatrocinadorRepository> createPatrocinadorRepository, Func<IDisposable> requestEmulator)
		{
			_patrocinadorRepository = createPatrocinadorRepository.Invoke();
			_requestEmulator = requestEmulator;
		}

		public Guid Create()
		{
			using (_requestEmulator.Invoke())
			{
				var patrocinador = new Patrocinador("APRESS", "http://apress.com/")
				{
					Logo = LoadLogo("images/apress.gif")
				};

				_logo = patrocinador.Logo;

				_patrocinadorRepository.Save(patrocinador);
				return patrocinador.Id;
			}
		}

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

			using (_requestEmulator.Invoke())
			{
				var patrocinador = _patrocinadorRepository.Get(patrocinadorId);

				Assert.IsNotNull(patrocinador);
				Assert.AreEqual("APRESS", patrocinador.Nombre);
				Assert.AreEqual("http://apress.com/", patrocinador.WebSite);
				Assert.IsNotNull(patrocinador.Logo);
				Assert.AreEqual(_logo, patrocinador.Logo);
			}
		}

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

			using (_requestEmulator.Invoke())
			{
				var patrocinador = _patrocinadorRepository.Get(patrocinadorId);
				Assert.IsNotNull(patrocinador);

				patrocinador.Nombre = "Apress";
				patrocinador.WebSite = "http://apress.com";
			}

			using (_requestEmulator.Invoke())
			{
				var patrocinador = _patrocinadorRepository.Get(patrocinadorId);

				Assert.IsNotNull(patrocinador);
				Assert.AreEqual("Apress", patrocinador.Nombre);
				Assert.AreEqual("http://apress.com", patrocinador.WebSite);
			}
		}

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

			using (_requestEmulator.Invoke())
			{
				var patrocinador = _patrocinadorRepository.Get(patrocinadorId);
				Assert.IsNotNull(patrocinador);

				_patrocinadorRepository.Delete(patrocinador);
			}

			using (_requestEmulator.Invoke())
			{
				var patrocinador = _patrocinadorRepository.Get(patrocinadorId);
				Assert.IsNull(patrocinador);
			}
		}
	}
}