view Agendas/trunk/src/Agendas.Tests/Eventos_y_patrocinadores_tests.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 System.Linq;
using AltNetHispano.Agendas.Domain;
using Moq;
using NUnit.Framework;

namespace AltNetHispano.Agendas.Tests
{
	[TestFixture]
	public class Eventos_y_patrocinadores_tests : TestBase
	{
		private Guid _apressId;
		private Guid _jetbrainsId;
		private Guid _eventoUnoId;
		private Guid _eventoDosId;
		private Agenda _agenda;

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

		[SetUp]
		public void CrearDatos()
		{
			var fechaInicio = DateTime.Today.AddDays(7).ToUniversalTime();
			var fechaTermino = fechaInicio.AddHours(2); 
			_agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);

			_apressId = CrearPatrocinador("Apress", "http://apress.com/", "images/apress.gif");
			_jetbrainsId = CrearPatrocinador("jetbrains", "http://apress.com/", "images/jetbrains.png");
			_eventoUnoId = CrearEvento(new[] { "Carlos Peix", "Nelo Pauselli" }, "ADFS", fechaInicio, fechaTermino);
			_eventoDosId = CrearEvento(new[] { "Carlos Peix", "Nelo Pauselli" }, "ADFS: Segunda parte.", fechaInicio.AddDays(3), fechaTermino.AddDays(3));
		}

		[Test]
		public void Indicar_patrociadores()
		{
			_agenda.IndicarPatrocinadores(_eventoUnoId, new[] { _apressId, _jetbrainsId });

			var evento = DefaultEventoRepository.GetActivos().First();
			Assert.AreNotEqual(Guid.Empty, evento.Id);
			Assert.IsNotNull(evento.FechaInicio);
			Assert.IsNotNull(evento.Patrocinadores);
			Assert.IsTrue(evento.Patrocinadores.Any());
			Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "Apress"));
			Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "jetbrains"));
		}

		[Test]
		public void Agregar_patrociador()
		{
			{
				_agenda.IndicarPatrocinadores(_eventoUnoId, new[] { _apressId });

				var evento = DefaultEventoRepository.GetActivos().First();
				Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "Apress"));
				Assert.IsFalse(evento.Patrocinadores.Any(p => p.Nombre == "jetbrains"));
			}

			{
				_agenda.IndicarPatrocinadores(_eventoUnoId, new[] { _apressId, _jetbrainsId });

				var evento = DefaultEventoRepository.GetActivos().First();
				Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "Apress"));
				Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "jetbrains"));
			}
		}

		[Test]
		public void Quitar_patrociador()
		{
			{
				_agenda.IndicarPatrocinadores(_eventoUnoId, new[] { _apressId, _jetbrainsId });

				var evento = DefaultEventoRepository.GetActivos().First();
				Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "Apress"));
				Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "jetbrains"));
			}

			{
				_agenda.IndicarPatrocinadores(_eventoUnoId, new[] { _apressId });

				var evento = DefaultEventoRepository.GetActivos().First();
				Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "Apress"));
				Assert.IsFalse(evento.Patrocinadores.Any(p => p.Nombre == "jetbrains"));
			}

			{
				_agenda.IndicarPatrocinadores(_eventoUnoId, new Guid[] { });

				var evento = DefaultEventoRepository.GetActivos().First();
				Assert.IsFalse(evento.Patrocinadores.Any());
			}
		}

		private static Guid CrearPatrocinador(string nombre, string webSite, string images)
		{
			var patrocinador = new Patrocinador(nombre, webSite)
			                   	{
									Logo = LoadLogo(images)
			                   	};

			var patrocinadorRepository = DefaultPatrocinadorRepository;
			patrocinadorRepository.Save(patrocinador);

			return patrocinador.Id;
		}

		private Guid CrearEvento(string[] nombrePonentes, string nombreEvento, DateTime fechaInicio, DateTime fechaTermino)
		{
			var ponentes = new Guid[nombrePonentes.Length];
			for (var nroPonente = 0; nroPonente < nombrePonentes.Length; nroPonente++)
			{
				ponentes[nroPonente] = TestsHelper.GetOrCreatePonente(nombrePonentes[nroPonente]);
			}

			_agenda.Agendar(nombreEvento, ponentes, fechaInicio, fechaTermino, null, TipoEvento.Van);

			var evento = DefaultEventoRepository.GetActivos().First(e=>e.Titulo == nombreEvento);
			return evento.Id;
		}

	}
}