Mercurial > altnet-hispano
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()); + } + } + } +}