Mercurial > altnet-hispano
view Agendas/trunk/src/Agendas.Repositories.Tests/EventoCrud.cs @ 243:59f8fa2f835e
Ticket 177: Valor de Duración de VAN en 0.
author | juanjose.montesdeocaarbos |
---|---|
date | Thu, 06 Oct 2011 08:13:05 -0300 |
parents | 51faeabfb9d9 |
children |
line wrap: on
line source
using System; using System.Collections.Generic; using System.Linq; 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 EventoCrud<T> where T : IInfraestrutureFactory, new() { private readonly IEventoRepository _eventoRepository; private readonly Func<IDisposable> _requestEmulator; private readonly IPersonaRepository _personaRepository; protected EventoCrud() { var infraestrutureFactory = new T(); _eventoRepository = infraestrutureFactory.GetEventoRepository(); _personaRepository = infraestrutureFactory.GetPonenteRepository(); _requestEmulator = infraestrutureFactory.GetRequestEmulator(); } [SetUp] public void SetearUsuario() { var seguridad = new Mock<ISeguridad>(); seguridad.Setup(s => s.GetUserName()).Returns("neluz"); IdentityContext.Init(seguridad.Object, _personaRepository); } [Test] public void Create() { Assert.AreNotEqual(Guid.Empty, CreateEvento()); } private Guid CreateEvento() { using (_requestEmulator.Invoke()) { var colaboradores = new[] { new Persona("Carlos Blé") {Twitter = "carlosble"}, new Persona("Alejandro Labra") {Twitter = "alejandrolabra"}, new Persona("Carlos Peix") {Twitter = "carlospeix"} }; foreach (var colaborador in colaboradores) _personaRepository.Save(colaborador); var usuario = new Persona("Nelo") {Twitter = "nelopauselli"}; _personaRepository.Save(usuario); var evento = Evento.Proponer("TDD - Diseño Basado en Ejemplos", string.Empty, TipoEvento.Van); evento.ActualizarPonentes(colaboradores, null); evento.Tracks.First().LogAdd(new TrackLog(TrackLogPropietario.Twitter, "Mensaje", usuario, true)); _eventoRepository.Save(evento); return evento.Id; } } [Test] public void Read() { Guid eventoId = CreateEvento(); using (_requestEmulator.Invoke()) { Evento van = _eventoRepository.Get(eventoId); Assert.IsNotNull(van); Assert.IsNotNull(van.Ponentes); Assert.IsTrue(van.Ponentes.Any(p => p.Nombre == "Carlos Blé")); Assert.IsTrue(van.Ponentes.Any(p => p.Nombre == "Alejandro Labra")); Assert.IsTrue(van.Ponentes.Any(p => p.Nombre == "Carlos Peix")); var track1 = van.Tracks.Where(t => t.Accion == Accion.Proponer).FirstOrDefault(); Assert.IsNotNull(track1); Assert.AreEqual(van, track1.Evento); Assert.AreEqual("TDD - Diseño Basado en Ejemplos", van.Titulo); Assert.AreEqual(3, van.Ponentes.Count()); } } [Test] public void Update() { Guid eventoId = CreateEvento(); var fechaInicio = new DateTime(2010, 04, 17).ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); using (_requestEmulator.Invoke()) { Evento van = _eventoRepository.Get(eventoId); Assert.IsNotNull(van); van.CambiarTitulo("TDD & Ejemplos"); var otroPonente = new Persona("José"); _personaRepository.Save(otroPonente); van.Actualizar(fechaInicio, fechaTermino, null); var ponentes = new List<Persona>(van.Ponentes); ponentes.RemoveAll(p => p.Nombre == "Carlos Blé"); ponentes.Add(otroPonente); van.ActualizarPonentes(ponentes, null); _eventoRepository.Update(van); } using (_requestEmulator.Invoke()) { Evento van = _eventoRepository.Get(eventoId); Assert.IsNotNull(van); Assert.IsFalse(van.Ponentes.Any(p => p.Nombre == "Carlos Blé")); Assert.IsTrue(van.Ponentes.Any(p => p.Nombre == "Alejandro Labra")); Assert.IsTrue(van.Ponentes.Any(p => p.Nombre == "Carlos Peix")); Assert.IsTrue(van.Ponentes.Any(p => p.Nombre == "José")); Assert.AreEqual("TDD & Ejemplos", van.Titulo); Assert.AreEqual(new DateTime(2010, 04, 17).ToUniversalTime(), van.FechaInicio); Assert.AreEqual(fechaTermino, van.FechaTermino); var ponente1 = _personaRepository.GetByNombre("Carlos Blé"); Assert.IsNotNull(ponente1); var ponente2 = _personaRepository.GetByNombre("José"); Assert.IsNotNull(ponente2); Assert.AreEqual(1, van.Tracks.Where(t => t.Accion == Accion.Proponer).Count()); Assert.AreEqual(1, van.Tracks.Where(t => t.Accion == Accion.Modificar).Count()); } } [Test] public void Delete() { Guid eventoId = CreateEvento(); using (_requestEmulator.Invoke()) { Evento van = _eventoRepository.Get(eventoId); Assert.IsNotNull(van); _eventoRepository.Delete(van); } using (_requestEmulator.Invoke()) { Evento van = _eventoRepository.Get(eventoId); Assert.IsNull(van); var ponente = _personaRepository.GetByNombre("Carlos Blé"); Assert.IsNotNull(ponente); } } [Test] public void Workflow() { Guid eventoId = CreateEvento(); using (_requestEmulator.Invoke()) { Evento evento = _eventoRepository.Get(eventoId); Assert.AreEqual(EventoPropuestoState.GetInstance(), evento.Estado); evento.Agendar(evento.FechaInicio, evento.FechaTermino, null); } using (_requestEmulator.Invoke()) { Evento evento = _eventoRepository.Get(eventoId); Assert.AreEqual(EventoAgendadoState.GetInstance(), evento.Estado); evento.Confirmar(); } using (_requestEmulator.Invoke()) { Evento evento = _eventoRepository.Get(eventoId); Assert.AreEqual(EventoConfirmadoState.GetInstance(), evento.Estado); evento.Publicar(1, null, new TimeSpan(0, 0, 0)); } using (_requestEmulator.Invoke()) { Evento evento = _eventoRepository.Get(eventoId); Assert.AreEqual(EventoPublicadoState.GetInstance(), evento.Estado); } } } }