view Agendas/trunk/src/Agendas.Google.Test/PublicadorTest.cs @ 272:33e6ee3d1776

Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
author juanjose.montesdeocaarbos
date Fri, 18 Nov 2011 23:09:58 -0300
parents c61954d24c8c
children 72a96459f910
line wrap: on
line source

using System;
using System.Linq;
using AltNetHispano.Agendas.Domain;
using AltNetHispano.Agendas.Google;
using AltNetHispano.Agendas.Google.DetailsEvents;
using AltNetHispano.Agendas.Tests;
using Moq;
using NUnit.Framework;

namespace Agendas.Google.Test
{
    [TestFixture]
    public class PublicadorTest : TestBase
    {
        [Test]
        public void CuandoPublicarEventoDadoAccionAgendarEntoncesEventoCreado()
        {
            var adapter = new Mock<IGCalendarAdapter>();
            string message;
            var fechaInicio = new DateTime(2011, 07, 09, 18, 0, 0, DateTimeKind.Utc);
            var fechaTermino = fechaInicio.AddHours(2);
            adapter.Setup(ad => ad.CreateEvent(It.IsAny<IGEventDetail>(), out message)).Returns(true);

            var publicador = new GooglePublicador(adapter.Object);
			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository);
            
            agenda.Proponer("Agile Patterns", null, null, TipoEvento.Van);
            adapter.Verify(ad => ad.CreateEvent(It.IsAny<IGEventDetail>(), out message), Times.Never());


            agenda.Agendar("Agile Patterns",new[]{ TestsHelper.GetOrCreatePonente("Alejandro Labra")}, fechaInicio,
                           fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion",
                           TipoEvento.Van);
            adapter.Verify(ad => ad.CreateEvent(It.IsAny<IGEventDetail>(), out message), Times.Once());
        }

        [Test]
        public void CuandoPublicarEventoDadoTipoVanEntoncesDetalleCorrecto()
        {
            var adapter = new Mock<IGCalendarAdapter>();
            var detail = new VanGEventDetail();
            var fechaInicio = new DateTime(2011, 07, 09, 18, 0, 0, DateTimeKind.Utc);
            var fechaTermino = fechaInicio.AddHours(2);

            var publicador = new GooglePublicador(adapter.Object);
			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository);
            agenda.Proponer("Agile Patterns", null, null, TipoEvento.Van);
            agenda.Agendar("Agile Patterns", new[]{ TestsHelper.GetOrCreatePonente("Alejandro Labra")}, fechaInicio,
                           fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion",
                           TipoEvento.Van);

            var ev = DefaultEventoRepository.GetActivos()[0];
            detail.Generate(ev);

            Assert.AreEqual("http://snipr.com/virtualaltnet", detail.Location);
            Assert.AreEqual("VAN sobre Agile Patterns", detail.Title);
            
            Assert.AreEqual(DateTimeKind.Utc, detail.StartEvent.Kind);
            Assert.AreEqual(ev.FechaInicio.Value.Hour, detail.StartEvent.Hour);
            Assert.AreEqual(ev.FechaInicio.Value.Day, detail.StartEvent.Day);
            Assert.AreEqual(ev.FechaInicio.Value.Month, detail.StartEvent.Month);
            Assert.AreEqual(ev.FechaInicio.Value.Year, detail.StartEvent.Year);

            Assert.AreEqual(DateTimeKind.Utc, detail.EndEvent.Kind);
            Assert.AreEqual(ev.FechaTermino.Value.Hour, detail.EndEvent.Hour);
            Assert.AreEqual(ev.FechaTermino.Value.Day, detail.EndEvent.Day);
            Assert.AreEqual(ev.FechaTermino.Value.Month, detail.EndEvent.Month);
            Assert.AreEqual(ev.FechaTermino.Value.Year, detail.EndEvent.Year);

            Assert.AreEqual("La comunidad ALT.NET Hispano (http://altnethispano.org) realizará una VAN sobre Agile Patterns, con Alejandro Labra." +
                           "\n\rFecha: sábado, 09 de julio de 2011 a las 18:00 hrs. Hora Internacional (GMT/UTC), con una duración aproximada de 2 horas." +
                           "\n\rPueden plantear sus comentarios e inquietudes sobre el tema de la reunión en: https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion" +
                           "\n\rPara mayor información sobre cómo atender la reunión consulten: http://tinyurl.com/van-hispano" +
                           "\n\rPueden vincular el Google Calendar al suyo (http://screenr.com/nr7)", detail.Summary);
        }

        [Test]
        public void CuandoPublicarEventoTipoCafeEntoncesDetalleCorrecto()
        {
            var adapter = new Mock<IGCalendarAdapter>();
            var detail = new CafeGEventDetail();
            var fechaInicio = new DateTime(2011, 07, 09, 18, 0, 0, DateTimeKind.Utc);
            var fechaTermino = fechaInicio.AddHours(2);

            var publicador = new GooglePublicador(adapter.Object);
			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository);
            agenda.Proponer("Agile Patterns", null, null, TipoEvento.Cafe);
            agenda.Agendar("Agile Patterns", new[]{ TestsHelper.GetOrCreatePonente("Alejandro Labra")}, fechaInicio,
                           fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion",
                           TipoEvento.Cafe);

            var ev = DefaultEventoRepository.GetActivos()[0];
            detail.Generate(ev);

            Assert.AreEqual("http://snipr.com/virtualaltnet", detail.Location);
            Assert.AreEqual("Alt.Net Café Agile Patterns", detail.Title);

            Assert.AreEqual(DateTimeKind.Utc, detail.StartEvent.Kind);
            Assert.AreEqual(ev.FechaInicio.Value.Hour, detail.StartEvent.Hour);
            Assert.AreEqual(ev.FechaInicio.Value.Day, detail.StartEvent.Day);
            Assert.AreEqual(ev.FechaInicio.Value.Month, detail.StartEvent.Month);
            Assert.AreEqual(ev.FechaInicio.Value.Year, detail.StartEvent.Year);

            Assert.AreEqual(DateTimeKind.Utc, detail.EndEvent.Kind);
            Assert.AreEqual(ev.FechaTermino.Value.Hour, detail.EndEvent.Hour);
            Assert.AreEqual(ev.FechaTermino.Value.Day, detail.EndEvent.Day);
            Assert.AreEqual(ev.FechaTermino.Value.Month, detail.EndEvent.Month);
            Assert.AreEqual(ev.FechaTermino.Value.Year, detail.EndEvent.Year);

            Assert.AreEqual("La comunidad ALT.NET Hispano (http://altnethispano.org) realizará un Alt.Net Cafe virtual con el tema Agile Patterns." +
                           "\n\rFecha: sábado, 09 de julio de 2011 a las 18:00 hrs. Hora Internacional (GMT/UTC), con una duración aproximada de 2 horas." +
                           "\n\rPueden plantear sus comentarios e inquietudes sobre el tema de la reunión en: https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion" +
                           "\n\rPara mayor información sobre cómo atender la reunión consulten: http://tinyurl.com/van-hispano" +
                           "\n\rPueden vincular el Google Calendar al suyo (http://screenr.com/nr7)", detail.Summary);
        }

        [Test]
        public void CuandoPublicarEventoTipoEstudioEntoncesDetalleCorrecto()
        {
            var adapter = new Mock<IGCalendarAdapter>();
            var detail = new EstudioGEventDetail();
            var fechaInicio = new DateTime(2011, 07, 09, 18, 0, 0, DateTimeKind.Utc);
            var fechaTermino = fechaInicio.AddHours(2);

            var publicador = new GooglePublicador(adapter.Object);
			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository);
            agenda.Proponer("Agile Patterns", null, null, TipoEvento.GrupoEstudio);
            agenda.Agendar("Agile Patterns", new[]{ TestsHelper.GetOrCreatePonente("Alejandro Labra")}, fechaInicio,
                           fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion",
                           TipoEvento.GrupoEstudio);

            var ev = DefaultEventoRepository.GetActivos()[0];
            detail.Generate(ev);

            Assert.AreEqual("http://snipr.com/virtualaltnet", detail.Location);
            Assert.AreEqual("Grupo de Estudio Agile Patterns", detail.Title);

            Assert.AreEqual(DateTimeKind.Utc, detail.StartEvent.Kind);
            Assert.AreEqual(ev.FechaInicio.Value.Hour, detail.StartEvent.Hour);
            Assert.AreEqual(ev.FechaInicio.Value.Day, detail.StartEvent.Day);
            Assert.AreEqual(ev.FechaInicio.Value.Month, detail.StartEvent.Month);
            Assert.AreEqual(ev.FechaInicio.Value.Year, detail.StartEvent.Year);

            Assert.AreEqual(DateTimeKind.Utc, detail.EndEvent.Kind);
            Assert.AreEqual(ev.FechaTermino.Value.Hour, detail.EndEvent.Hour);
            Assert.AreEqual(ev.FechaTermino.Value.Day, detail.EndEvent.Day);
            Assert.AreEqual(ev.FechaTermino.Value.Month, detail.EndEvent.Month);
            Assert.AreEqual(ev.FechaTermino.Value.Year, detail.EndEvent.Year);

            Assert.AreEqual("La comunidad ALT.NET Hispano (http://altnethispano.org) realizará un grupo de estudio sobre Agile Patterns." +
                           "\n\rFecha: sábado, 09 de julio de 2011 a las 18:00 hrs. Hora Internacional (GMT/UTC), con una duración aproximada de 2 horas." +
                           "\n\rPueden plantear sus comentarios e inquietudes sobre el tema de la reunión en: https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion" +
                           "\n\rPara mayor información sobre cómo atender la reunión consulten: http://tinyurl.com/van-hispano" +
                           "\n\rPueden vincular el Google Calendar al suyo (http://screenr.com/nr7)", detail.Summary);
        }

        [Test]
        public void CuandoPublicarEventoDadoAccionCancelarEntoncesEventoEliminado()
        {
            var adapter = new Mock<IGCalendarAdapter>();
            string message;
            var fechaInicio = new DateTime(2011, 07, 09, 18, 0, 0, DateTimeKind.Utc);
            var fechaTermino = fechaInicio.AddHours(2);
            adapter.Setup(ad => ad.DeleteEvent(It.IsAny<DateTime>(), It.IsAny<DateTime>(), out message)).Returns(true);

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

            agenda.Proponer("Agile Patterns", null, null, TipoEvento.Van);
            adapter.Verify(ad => ad.DeleteEvent(It.IsAny<DateTime>(), It.IsAny<DateTime>(), out message), Times.Never());

            agenda.Agendar("Agile Patterns", new[]{ TestsHelper.GetOrCreatePonente("Alejandro Labra")}, fechaInicio,
                           fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion",
                           TipoEvento.Van);
            adapter.Verify(ad => ad.DeleteEvent(It.IsAny<DateTime>(), It.IsAny<DateTime>(), out message), Times.Never());

            var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Agile Patterns");

            agenda.Cancelar(evento.Id);
            adapter.Verify(ad => ad.DeleteEvent(It.IsAny<DateTime>(), It.IsAny<DateTime>(), out message), Times.Once());
        }

		[Test]
		public void PublicarConMasDeUnPonente()
		{
			var adapter = new Mock<IGCalendarAdapter>();
			var detail = new VanGEventDetail();
			var fechaInicio = new DateTime(2011, 07, 09, 18, 0, 0, DateTimeKind.Utc);
			var fechaTermino = fechaInicio.AddHours(2);

			var publicador = new GooglePublicador(adapter.Object);
			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository);
			agenda.Agendar("Identity Providers Públicos y Empresariales", new[]{ TestsHelper.GetOrCreatePonente("Carlos Peix"),TestsHelper.GetOrCreatePonente("Nelo Pauselli")}, fechaInicio,
						   fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion",
						   TipoEvento.Van);

			var ev = DefaultEventoRepository.GetActivos()[0];
			detail.Generate(ev);

			Assert.That(detail.Summary, Is.StringContaining("Carlos Peix y Nelo Pauselli."));
		}

		[Test]
		public void PublicarSinPonente()
		{
			var adapter = new Mock<IGCalendarAdapter>();
			var detail = new VanGEventDetail();
			var fechaInicio = new DateTime(2011, 07, 09, 18, 0, 0, DateTimeKind.Utc);
			var fechaTermino = fechaInicio.AddHours(2);

			var publicador = new GooglePublicador(adapter.Object);
			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository);
			agenda.Agendar("Identity Providers Públicos y Empresariales", null, fechaInicio,
						   fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion",
						   TipoEvento.Cafe);

			var ev = DefaultEventoRepository.GetActivos()[0];
			detail.Generate(ev);

			Assert.AreEqual("La comunidad ALT.NET Hispano (http://altnethispano.org) realizará un Café sobre Identity Providers Públicos y Empresariales." +
						   "\n\rFecha: sábado, 09 de julio de 2011 a las 18:00 hrs. Hora Internacional (GMT/UTC), con una duración aproximada de 2 horas." +
						   "\n\rPueden plantear sus comentarios e inquietudes sobre el tema de la reunión en: https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion" +
						   "\n\rPara mayor información sobre cómo atender la reunión consulten: http://tinyurl.com/van-hispano" +
						   "\n\rPueden vincular el Google Calendar al suyo (http://screenr.com/nr7)", detail.Summary);
		}
    }
}