view Agendas/trunk/src/Agendas.Repositories.Tests/Workflow.cs @ 282:bc8dfbde0523

#123: Patrocinadores de las vans: Se verifica que para publicar una Van, debe tener al menos un Patrocinador.
author juanjose.montesdeocaarbos
date Mon, 26 Dec 2011 14:21:44 -0300
parents 72a96459f910
children 48ab8788bd19
line wrap: on
line source

using System;
using System.Linq;
using AltNetHispano.Agendas.Domain;
using AltNetHispano.Agendas.Domain.Repositories;
using NUnit.Framework;
using System.Collections.Generic;

namespace Agendas.Repositories.Tests
{
	internal class Workflow
	{
		private readonly Func<IDisposable> _requestEmulator;
		private readonly Agenda _agenda;
		private readonly IEventoRepository _eventoRepository;
		private Guid _eventoId;
		private readonly TestsHelper _testsHelper;

		public Workflow(IPublicador publicador, IEventoRepository eventoRepository, IPersonaRepository personaRepository,
						IPatrocinadorRepository patrocinadorRepository, Func<IDisposable> requestEmulator)
		{
			_requestEmulator = requestEmulator;
			_eventoRepository = eventoRepository;

			_agenda = new Agenda(publicador, eventoRepository, personaRepository, patrocinadorRepository);
			_testsHelper = new TestsHelper(personaRepository, patrocinadorRepository);
		}

		public void Proponer()
		{
			using (_requestEmulator.Invoke())
			{
				var resultado = _agenda.Proponer("SOLID", new[] {_testsHelper.GetOrCreatePonente("Jorge")}, null, TipoEvento.Van);
				Console.WriteLine(resultado.Message);
				Assert.IsTrue(resultado.Succeful);
			}

			GetId();
		}


		public void Agendar()
		{
			using (_requestEmulator.Invoke())
			{
			    var fechaInicio = DateTime.Today.AddDays(5).ToUniversalTime();
			    var fechaTermino = fechaInicio.AddHours(2);
			    var resultado = _agenda.Agendar("SOLID", new[]{ _testsHelper.GetOrCreatePonente("Jorge")}, fechaInicio, fechaTermino, null,
			                                    TipoEvento.Van);
				Assert.IsTrue(resultado.Succeful);
			}
			
			GetId();
		}

		private void GetId()
		{
			using (_requestEmulator.Invoke())
			{
				var evento = _eventoRepository.GetActivos().SingleOrDefault();
				Assert.IsNotNull(evento);
				_eventoId = evento.Id;
			}
		}

		public void Confirmar()
		{
			using (_requestEmulator.Invoke())
			{
				var resultado = _agenda.Confirmar(_eventoId);
				Assert.IsTrue(resultado.Succeful);
			}
		}

		public void Publicar()
		{
			using (_requestEmulator.Invoke())
			{
				_agenda.IndicarPatrocinadores(_eventoId, new List<Guid> {_testsHelper.GetOrCreatePatrocinador("Apress")});
			}
			using (_requestEmulator.Invoke())
			{
				var resultado = _agenda.Publicar(_eventoId, 1, "http://www.altnethispano.org/", new TimeSpan(2, 11, 0));
				Assert.IsTrue(resultado.Succeful);
			}
		}

		public void Cancelar()
		{
			using (_requestEmulator.Invoke())
			{
				var resultado = _agenda.Cancelar(_eventoId);
				Assert.IsTrue(resultado.Succeful);
			}
		}

		public void Descartar()
		{
			using (_requestEmulator.Invoke())
			{
				var resultado = _agenda.Descartar(_eventoId);
				Assert.IsTrue(resultado.Succeful);
			}
		}

		public void ReProponer()
		{
			using (_requestEmulator.Invoke())
			{
				var resultado = _agenda.ReProponer(_eventoId);
				Assert.IsTrue(resultado.Succeful);
			}
		}

		public void ReAgendar()
		{
			using (_requestEmulator.Invoke())
			{
				var resultado = _agenda.ReAgendar(_eventoId);
				Assert.IsTrue(resultado.Succeful);
			}
		}
	}
}