view Agendas/trunk/src/Agendas.Tests/PonentesTests.cs @ 257:730b80afa70d

Ticket #191: Perfil de Usuarios
author juanjose.montesdeocaarbos
date Wed, 19 Oct 2011 09:19:20 -0300
parents c61954d24c8c
children 72a96459f910
line wrap: on
line source

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

namespace AltNetHispano.Agendas.Tests
{
    [TestFixture]
    public class PonentesTests : TestBase
    {
        private const string urlInvitacion = "http://groups.google.com/group/altnet-hispano/browse_thread/thread/65d6d26eb381386e";

        [Test]
        public void Publicar_dos_eventos_con_el_mismo_ponente_no_registrado()
        {
            var publicador = new Mock<IPublicador>();
            Assert.AreEqual(1, DefaultPersonaRepository.GetAll().Count);

            var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository);
            var fechaInicioNHibernate = new DateTime(2011, 2, 26, 18, 0, 0, DateTimeKind.Utc);
            var fechaTerminoNHibernate = fechaInicioNHibernate.AddHours(2);

            agenda.Agendar("Audit (parallel model) con NHibernate 3", new[]{TestsHelper.GetOrCreatePonente("Fabio Maulo")}, 
                           fechaInicioNHibernate, fechaTerminoNHibernate, urlInvitacion, TipoEvento.Van);
            
            var fechaInicioConform = new DateTime(2011, 3, 5, 18, 0, 0, DateTimeKind.Utc);
            var fechaTerminoConform = fechaInicioNHibernate.AddHours(2);
            agenda.Agendar("Conform - Parte 2", new[]{TestsHelper.GetOrCreatePonente("Fabio Maulo")},  fechaInicioConform,
                           fechaTerminoConform, urlInvitacion, TipoEvento.Van);

            var eventos = agenda.GetEventosActivos();
            Assert.AreEqual(2, eventos.Count);

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

            Assert.AreEqual(2, DefaultPersonaRepository.GetAll().Count);

            var evento = eventos[0];

			Assert.IsNotNull(evento.Ponentes);
			Assert.AreEqual(1, evento.Ponentes.Count());
        }

        [Test]
        public void Publicar_evento_con_ponente_registrado()
        {
            var publicador = new Mock<IPublicador>();
            Evento evento = null;
            publicador.Setup(p => p.Publicar(It.IsAny<IEnumerable<Track>>())).Callback<IEnumerable<Track>>(
                t => evento = t.First().Evento);

            var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository);

            agenda.RegistrarPonente("Fabio Maulo", "fabiomaulo@gmail.com", "@fabiomaulo", "http://fabiomaulo.blogspot.com");
            var fechaInicio = new DateTime(2011, 2, 26, 18, 0, 0, DateTimeKind.Utc);
            var fechaTermino = fechaInicio.AddHours(2);
            agenda.Agendar("Audit (parallel model) con NHibernate 3", new[]{TestsHelper.GetOrCreatePonente("Fabio Maulo")}, 
                           fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van);

            Assert.AreEqual(1, agenda.GetEventosActivos().Count);

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

            Assert.IsNotNull(evento);
        	var ponente = evento.Ponentes.First();
            Assert.AreEqual("Fabio Maulo", ponente.Nombre);
            Assert.AreEqual("fabiomaulo@gmail.com", ponente.Mail);
            Assert.AreEqual("@fabiomaulo", ponente.Twitter);
            Assert.AreEqual("http://fabiomaulo.blogspot.com", ponente.Blog);
        }

        [Test]
        public void Publicar_evento_sin_ponente_registrado()
        {
            var publicador = new Mock<IPublicador>();
            Evento evento = null;
            publicador.Setup(p => p.Publicar(It.IsAny<IEnumerable<Track>>())).Callback<IEnumerable<Track>>(
                t => evento = t.First().Evento);

            var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPersonaRepository);

            var fechaInicio = new DateTime(2011, 2, 26, 18, 0, 0, DateTimeKind.Utc);
            var fechaTermino = fechaInicio.AddHours(2);
            agenda.Agendar("Audit (parallel model) con NHibernate 3", new[]{TestsHelper.GetOrCreatePonente("Fabio Maulo")}, 
                           fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van);

            Assert.AreEqual(1, agenda.GetEventosActivos().Count);

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

            Assert.IsNotNull(evento);
			var ponente = evento.Ponentes.First();
            Assert.AreEqual("Fabio Maulo", ponente.Nombre);
            Assert.AreEqual("fabiomaulo", ponente.Twitter);
        }

        [Test]
        public void Quitar_ponente_de_una_van()
        {
            var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);

            const string titulo = "Audit (parallel model) con NHibernate 3";
            Guid eventoId;

        	DateTime fechaInicio=DateTime.Now;

        	var r = agenda.Agendar(titulo, new[]{TestsHelper.GetOrCreatePonente("Fabio")}, fechaInicio, fechaInicio.AddHours(2), urlInvitacion, TipoEvento.Van);
        	{
				Assert.IsTrue(r.Succeful);

				var eventos = agenda.GetEventosActivos(EventoAgendadoState.GetInstance());
                Assert.AreEqual(1, eventos.Count);

                Evento evento = eventos[0];
				var ponente = evento.Ponentes.First();
				Assert.AreEqual("Fabio", ponente.Nombre);

                eventoId = evento.Id;
            }

        	r = agenda.ModificarEvento(eventoId, titulo, new[]{Guid.Empty}, fechaInicio, fechaInicio.AddHours(2), urlInvitacion);
			Assert.IsFalse(r.Succeful);

        }

		[Test]
		public void Quitar_ponente_de_un_cafe()
		{
			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);

			const string titulo = "Audit (parallel model) con NHibernate 3";
			Guid eventoId;

			DateTime fechaInicio = DateTime.Now;

			var r = agenda.Agendar(titulo, new[]{TestsHelper.GetOrCreatePonente("Fabio")}, fechaInicio, fechaInicio.AddHours(2), urlInvitacion, TipoEvento.Cafe);
			{
				Assert.IsTrue(r.Succeful);

				var eventos = agenda.GetEventosActivos(EventoAgendadoState.GetInstance());
				Assert.AreEqual(1, eventos.Count);

				Evento evento = eventos[0];
				var ponente = evento.Ponentes.First();
				Assert.AreEqual("Fabio", ponente.Nombre);

				eventoId = evento.Id;
			}

			r = agenda.ModificarEvento(eventoId, titulo, new[]{Guid.Empty}, fechaInicio, fechaInicio.AddHours(2), urlInvitacion);
			{
				Console.WriteLine(r.Message);
				Assert.IsTrue(r.Succeful);

				var eventos = agenda.GetEventosActivos(EventoAgendadoState.GetInstance());
				Assert.AreEqual(1, eventos.Count);

				Evento evento = eventos[0];
				Assert.AreEqual(0, evento.Ponentes.Count());
			}
		}

        [Test]
        public void Cambiar_ponente_de_un_evento()
        {
            var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);

            const string titulo = "Audit (parallel model) con NHibernate 3";
            Guid eventoId;

            agenda.Proponer(titulo, new[]{TestsHelper.GetOrCreatePonente("Fabio")}, urlInvitacion, TipoEvento.Van);
            {
                var eventos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance());
                Assert.AreEqual(1, eventos.Count);

                Evento evento = eventos[0];
				Assert.IsTrue(evento.Ponentes.Any(p => p.Nombre == "Fabio"));

                eventoId = evento.Id;
            }

            agenda.ModificarPropuesta(eventoId, titulo, new[]{TestsHelper.GetOrCreatePonente("José")}, urlInvitacion);
            {
                var eventos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance());
                Assert.AreEqual(1, eventos.Count);

                Evento evento = eventos[0];
				Assert.IsTrue(evento.Ponentes.Any(p => p.Nombre == "José"));
			}
        }
    }
}