diff Agendas/trunk/src/Agendas.Repositories.Tests/PatrocinadorEventoTests.cs @ 287:eeca9ddb330a

BUG: Los Patrocinadores quedaban asociados a un único evento. Se armó un test que lo demuestra y se modificó el modelo de la base de datos.
author juanjose.montesdeocaarbos
date Mon, 02 Jan 2012 19:44:41 -0300
parents
children 9bc60d166c8a
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Repositories.Tests/PatrocinadorEventoTests.cs	Mon Jan 02 19:44:41 2012 -0300
@@ -0,0 +1,131 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Agendas.Repositories.Tests.Infraestructure;
+using AltNetHispano.Agendas.Domain;
+using AltNetHispano.Agendas.Domain.Repositories;
+using Moq;
+using NUnit.Framework;
+
+namespace Agendas.Repositories.Tests
+{
+	public abstract class PatrocinadorEventoTests<T> where T : IInfraestrutureFactory, new()
+	{
+		private readonly IPersonaRepository _personaRepository;
+		private readonly IEventoRepository _eventoRepository;
+		private readonly IPatrocinadorRepository _patrocinadorRepository;
+		private readonly Func<IDisposable> _requestEmulator;
+
+		private Guid _apressId;
+		private Guid _eventoUnoId;
+		private Guid _eventoDosId;
+		private Agenda _agenda;
+		private readonly TestsHelper _testsHelper;
+
+		protected PatrocinadorEventoTests()
+		{
+			var infraestrutureFactory = new T();
+
+			_eventoRepository = infraestrutureFactory.GetEventoRepository();
+			_personaRepository = infraestrutureFactory.GetPonenteRepository();
+			_patrocinadorRepository = infraestrutureFactory.GetPatrocinadorRepository();
+			_requestEmulator = infraestrutureFactory.GetRequestEmulator();
+
+			_testsHelper = new TestsHelper(_personaRepository, _patrocinadorRepository);
+		}
+
+		[SetUp]
+		public void SetearUsuario()
+		{
+			var seguridad = new Mock<ISeguridad>();
+			seguridad.Setup(s => s.GetUserName()).Returns("neluz");
+			IdentityContext.Init(seguridad.Object, _personaRepository);
+		}
+
+		private Guid CrearEvento(string[] nombrePonentes, string nombreEvento, DateTime fechaInicio, DateTime fechaTermino)
+		{
+			Evento evento;
+			var ponentes = new Guid[nombrePonentes.Length];
+			for (var nroPonente = 0; nroPonente < nombrePonentes.Length; nroPonente++)
+			{
+				using (_requestEmulator.Invoke())
+				{
+					ponentes[nroPonente] = _testsHelper.GetOrCreatePonente(nombrePonentes[nroPonente]);
+				}
+			}
+
+			using (_requestEmulator.Invoke())
+			{
+				_agenda.Agendar(nombreEvento, ponentes, fechaInicio, fechaTermino, null, TipoEvento.Van);
+			}
+			using (_requestEmulator.Invoke())
+			{
+				evento = _eventoRepository.GetActivos().First(e => e.Titulo == nombreEvento);
+			}
+			return evento.Id;
+		}
+
+		private Guid CrearPatrocinador(string nombre, string images)
+		{
+			var patrocinador = new Patrocinador(nombre);
+			patrocinador.LoadLogo(images);
+			using (_requestEmulator.Invoke())
+			{
+				_patrocinadorRepository.Save(patrocinador);
+			}
+			return patrocinador.Id;
+		}
+
+		protected void CrearDatos()
+		{
+			var fechaInicio = DateTime.Today.AddDays(7).ToUniversalTime();
+			var fechaTermino = fechaInicio.AddHours(2);
+			_agenda = new Agenda(null, _eventoRepository, _personaRepository, _patrocinadorRepository);
+
+			_apressId = CrearPatrocinador("Apress", "images/apress.gif");
+			_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 MismoPatrocinadorEnDosEventosDiferentes()
+		{
+			CrearDatos();
+			Evento eventoUno, eventoDos;
+			{
+				using (_requestEmulator.Invoke())
+				{
+					_agenda.IndicarPatrocinadores(_eventoUnoId, new[] {_apressId});
+				}
+				using (_requestEmulator.Invoke())
+				{
+					eventoUno = _eventoRepository.GetActivos().First(e => e.Id == _eventoUnoId);
+					Assert.AreEqual(1, eventoUno.Patrocinadores.Count());
+				}
+			}
+
+			{
+				using (_requestEmulator.Invoke())
+				{
+					_agenda.IndicarPatrocinadores(_eventoDosId, new[] {_apressId});
+				}
+				using (_requestEmulator.Invoke())
+				{
+					eventoDos = _eventoRepository.GetActivos().First(e => e.Id == _eventoDosId);
+					Assert.AreEqual(1, eventoDos.Patrocinadores.Count());
+				}
+			}
+			using (_requestEmulator.Invoke())
+			{
+				eventoDos = _eventoRepository.GetActivos().First(e => e.Id == _eventoDosId);
+				Assert.AreEqual(1, eventoDos.Patrocinadores.Count());
+			}
+			using (_requestEmulator.Invoke())
+			{
+				eventoUno = _eventoRepository.GetActivos().First(e => e.Id == _eventoUnoId);
+				Assert.AreEqual(1, eventoUno.Patrocinadores.Count());
+			}
+		}
+	}
+}