view Agendas/trunk/src/Agendas.Repositories.Tests/WorkflowTests.cs @ 298:9bc60d166c8a

Se corrigieron los tests por el cambio de Patrocinador, para que no persista el logo en disco. Se comentó el código de PatrocinadorApiController, que no se utiliza.
author juanjose.montesdeocaarbos
date Sun, 19 Feb 2012 16:00:38 -0300
parents 72a96459f910
children
line wrap: on
line source

using System;
using System.Collections.Generic;
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 WorkflowTests<T> where T : IInfraestrutureFactory, new()
	{
		private readonly IPersonaRepository _personaRepository;
		private readonly IEventoRepository _eventoRepository;
		private readonly IPatrocinadorRepository _patrocinadorRepository;
		private readonly Func<IDisposable> _requestEmulator;

		protected WorkflowTests()
		{
			var infraestrutureFactory = new T();

			_eventoRepository = infraestrutureFactory.GetEventoRepository();
			_personaRepository = infraestrutureFactory.GetPonenteRepository();
			_patrocinadorRepository = infraestrutureFactory.GetPatrocinadorRepository();
			_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 Proponer()
		{
			var publicador = new Mock<IPublicador>();
			var workflow = new Workflow(publicador.Object, _eventoRepository, _personaRepository, _patrocinadorRepository, _requestEmulator);
			
			workflow.Proponer();
			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Once());
		}

		[Test]
		public void Proponer_y_agendar()
		{
			var publicador = new Mock<IPublicador>();
			var workflow = new Workflow(publicador.Object, _eventoRepository, _personaRepository, _patrocinadorRepository, _requestEmulator);
			
			workflow.Proponer();

			workflow.Agendar();

			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(2));
		}
		[Test]
		public void Proponer_agendar_y_cancelar()
		{
			var publicador = new Mock<IPublicador>();
			var workflow = new Workflow(publicador.Object, _eventoRepository, _personaRepository, _patrocinadorRepository, _requestEmulator);

			workflow.Proponer();

			workflow.Agendar();

			workflow.Cancelar();

			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(3));
		}

		[Test]
		public void Proponer_agendar_cancelar_y_reagendar()
		{
			var publicador = new Mock<IPublicador>();
			var workflow = new Workflow(publicador.Object, _eventoRepository, _personaRepository, _patrocinadorRepository, _requestEmulator);
			
			workflow.Proponer();

			workflow.Agendar();

			workflow.Cancelar();

			workflow.ReAgendar();

			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(4));
		}

		[Test]
		public void Proponer_agendar_cancelar_reproponer_agendar_y_confirmar()
		{
			var publicador = new Mock<IPublicador>();
			var workflow = new Workflow(publicador.Object, _eventoRepository, _personaRepository, _patrocinadorRepository, _requestEmulator);

			workflow.Proponer();

			workflow.Agendar();

			workflow.Cancelar();

			workflow.ReProponer();

			workflow.Agendar();

			workflow.Confirmar();

			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(6));
		}

		[Test]
		public void Proponer_agendar_cancelar_reagendar_y_confirmar()
		{
			var publicador = new Mock<IPublicador>();
			var workflow = new Workflow(publicador.Object, _eventoRepository, _personaRepository, _patrocinadorRepository, _requestEmulator);

			workflow.Proponer();

			workflow.Agendar();

			workflow.Cancelar();

			workflow.ReAgendar();

			workflow.Confirmar();

			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(5));
		}

		[Test]
		public void Proponer_agendar_cancelar_y_reproponer()
		{
			var publicador = new Mock<IPublicador>();
			var workflow = new Workflow(publicador.Object, _eventoRepository, _personaRepository, _patrocinadorRepository, _requestEmulator);

			workflow.Proponer();

			workflow.Agendar();

			workflow.Cancelar();

			workflow.ReProponer();

			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(4));
		}

		[Test]
		public void Proponer_y_descartar()
		{
			var publicador = new Mock<IPublicador>();
			var workflow = new Workflow(publicador.Object, _eventoRepository, _personaRepository, _patrocinadorRepository, _requestEmulator);

			workflow.Proponer();

			workflow.Descartar();
			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(2));
		}

		[Test]
		public void Proponer_agendar_cancelar_y_descartar()
		{
			var publicador = new Mock<IPublicador>();
			var workflow = new Workflow(publicador.Object, _eventoRepository, _personaRepository, _patrocinadorRepository, _requestEmulator);

			workflow.Proponer();

			workflow.Agendar();

			workflow.Cancelar();

			workflow.Descartar();

			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(4));
		}

		[Test]
		public void Proponer_agendar_y_confirmar()
		{
			var publicador = new Mock<IPublicador>();
			var workflow = new Workflow(publicador.Object, _eventoRepository, _personaRepository, _patrocinadorRepository, _requestEmulator);

			workflow.Proponer();

			workflow.Agendar();

			workflow.Confirmar();

			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(3));
		}

		[Test]
		public void Proponer_agendar_confirmar_publicar()
		{
			var publicador = new Mock<IPublicador>();
			var workflow = new Workflow(publicador.Object, _eventoRepository, _personaRepository, _patrocinadorRepository, _requestEmulator);

			workflow.Proponer();

			workflow.Agendar();

			workflow.Confirmar();

			workflow.Publicar();

			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(4));
		}
	}
}