view Agendas/trunk/src/Agendas.Tests/PonentesTests.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 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, DefaultPatrocinadorRepository);
            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, DefaultPatrocinadorRepository);

            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, DefaultPatrocinadorRepository);

            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, DefaultPatrocinadorRepository);

            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, DefaultPatrocinadorRepository);

			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, DefaultPatrocinadorRepository);

            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é"));
			}
        }
    }
}