view Agendas/trunk/src/Agendas.Tests/Workflows/WorkflowTests.cs @ 133:6f1041301797

Se agregan los estados Cancelado y Descartado con las acciones Cancelar, Reagendar, Descartar, Reproponer, según ticket 146. Falta solucionar problema con flujo, ver más información en el ticket de assembla. http://www.assembla.com/spaces/altnet-hispano/tickets/146-implementar-estado-descartar-y-cancelar-de-eventos
author alabra
date Sun, 10 Jul 2011 23:59:19 -0400
parents b74734a1a755
children 462a78196d11
line wrap: on
line source

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

namespace AltNetHispano.Agendas.Tests.Workflows
{
	[TestFixture]
	public class WorkflowTests : TestBase
	{
		private Mock<IPublicador> _publicador;
		private Workflow _workflow;

		[SetUp]
		public void InitPublicador()
		{
			_publicador = new Mock<IPublicador>();
			_workflow = new Workflow(_publicador.Object, DefaultEventoRepository, DefaultPersonaRepository);
		}

		[Test]
		public void Proponer()
		{
			_workflow.Proponer();
			_publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Once());
		}

		[Test]
		public void Proponer_y_agendar()
		{
			_workflow.Proponer();

			_workflow.Agendar();

			_publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(2));
		}
        [Test]
        public void Proponer_agendar_y_cancelar()
        {
            _workflow.Proponer();

            _workflow.Agendar();

            var evento = DefaultEventoRepository.GetActivos().SingleOrDefault();
            Assert.IsNotNull(evento);

            _workflow.Cancelar(evento.Id);

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

        [Test]
        public void Proponer_agendar_cancelar_y_reagendar()
        {
            _workflow.Proponer();

            _workflow.Agendar();

            var evento = DefaultEventoRepository.GetActivos().SingleOrDefault();
            Assert.IsNotNull(evento);

            _workflow.Cancelar(evento.Id);

            _workflow.ReAgendar(evento.Id);

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

        [Test, Explicit("Se esta discutiendo este problema en http://www.assembla.com/spaces/altnet-hispano/messages/768408")]
        public void Proponer_agendar_cancelar_reproponer_agendar_y_confirmar()
        {
            _workflow.Proponer();

            _workflow.Agendar();

            var evento = DefaultEventoRepository.GetActivos().SingleOrDefault();
            Assert.IsNotNull(evento);

            _workflow.Cancelar(evento.Id);

            _workflow.ReProponer(evento.Id);

            _workflow.Agendar();

            _workflow.Confirmar(evento.Id);

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

        [Test]
        public void Proponer_agendar_cancelar_reagendar_y_confirmar()
        {
            _workflow.Proponer();

            _workflow.Agendar();

            var evento = DefaultEventoRepository.GetActivos().SingleOrDefault();
            Assert.IsNotNull(evento);

            _workflow.Cancelar(evento.Id);

            _workflow.ReAgendar(evento.Id);

            _workflow.Confirmar(evento.Id);

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

	    [Test]
        public void Proponer_agendar_cancelar_y_reproponer()
        {
            _workflow.Proponer();

            _workflow.Agendar();

            var evento = DefaultEventoRepository.GetActivos().SingleOrDefault();
            Assert.IsNotNull(evento);

            _workflow.Cancelar(evento.Id);

            _workflow.ReProponer(evento.Id);

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

        [Test]
        public void Proponer_y_descartar()
        {
            _workflow.Proponer();
            var evento = DefaultEventoRepository.GetActivos().SingleOrDefault();
            Assert.IsNotNull(evento);

            _workflow.Descartar(evento.Id);
            _publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(2));
        }

	    [Test]
        public void Proponer_agendar_cancelar_y_descartar()
        {
            _workflow.Proponer();

            _workflow.Agendar();

            var evento = DefaultEventoRepository.GetActivos().SingleOrDefault();
            Assert.IsNotNull(evento);

            _workflow.Cancelar(evento.Id);

            _workflow.Descartar(evento.Id);

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

	    [Test]
		public void Proponer_agendar_y_confirmar()
		{
			_workflow.Proponer();

			_workflow.Agendar();

			var evento = DefaultEventoRepository.GetActivos().SingleOrDefault();
			Assert.IsNotNull(evento);

			_workflow.Confirmar(evento.Id);

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

		[Test]
		public void Proponer_agendar_confirmar_publicar()
		{
			_workflow.Proponer();

			_workflow.Agendar();

			var evento = DefaultEventoRepository.GetActivos().SingleOrDefault();
			Assert.IsNotNull(evento);

			_workflow.Confirmar(evento.Id);

			_workflow.Publicar(evento.Id);

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