Mercurial > altnet-hispano
view Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs @ 161:c1062de96845
Al publicar una agenda el nroOrden debe ser mayor a cero y urlWiki no vacio.
author | juanjose.montesdeocaarbos |
---|---|
date | Fri, 05 Aug 2011 21:54:43 -0300 |
parents | 2dbb15f4510f |
children | 5c94b052d838 |
line wrap: on
line source
using System; using System.Linq; using AltNetHispano.Agendas.Domain; using AltNetHispano.Agendas.Domain.Repositories; using NUnit.Framework; namespace AltNetHispano.Agendas.Tests.Cruds { public class EventoCrud { private readonly IEventoRepository _eventoRepository; private readonly Func<IDisposable> _requestEmulator; private readonly IPersonaRepository _personaRepository; public EventoCrud(Func<IEventoRepository> createEventoRepository, Func<IPersonaRepository> createPonenteRepository, Func<IDisposable> requestEmulator) { _eventoRepository = createEventoRepository.Invoke(); _personaRepository = createPonenteRepository.Invoke(); _requestEmulator = requestEmulator; } public Guid Create() { using (_requestEmulator.Invoke()) { var ponente = new Persona("Carlos Blé") {Twitter = "carlosble"}; _personaRepository.Save(ponente); var usuario = new Persona("Nelo") {Twitter = "nelopauselli"}; _personaRepository.Save(usuario); var evento = Evento.Proponer("TDD - Diseño Basado en Ejemplos", ponente, string.Empty, TipoEvento.Van); evento.Tracks.First().LogAdd(new TrackLog(TrackLogPropietario.Twitter, "Mensaje", usuario, true)); _eventoRepository.Save(evento); return evento.Id; } } public void Read() { Guid eventoId = Create(); using (_requestEmulator.Invoke()) { Evento van = _eventoRepository.Get(eventoId); Assert.IsNotNull(van); Assert.IsNotNull(van.Ponente); Assert.AreEqual("Carlos Blé", van.Ponente.Nombre); 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); } } public void Update() { Guid eventoId = Create(); 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(otroPonente, new DateTime(2010, 04, 17), null); _eventoRepository.Update(van); } using (_requestEmulator.Invoke()) { Evento van = _eventoRepository.Get(eventoId); Assert.IsNotNull(van); Assert.IsNotNull(van.Ponente); Assert.AreEqual("José", van.Ponente.Nombre); Assert.AreEqual("TDD & Ejemplos", van.Titulo); Assert.AreEqual(new DateTime(2010, 04, 17), van.Fecha); 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()); } } public void Delete() { Guid eventoId = Create(); 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); } } public void Workflow() { Guid eventoId = Create(); using (_requestEmulator.Invoke()) { Evento evento = _eventoRepository.Get(eventoId); Assert.AreEqual(EventoPropuestoState.GetInstance(), evento.Estado); evento.Agendar(evento.Ponente, evento.Fecha, 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); } using (_requestEmulator.Invoke()) { Evento evento = _eventoRepository.Get(eventoId); Assert.AreEqual(EventoPublicadoState.GetInstance(), evento.Estado); } } } }