view Agendas/trunk/src/Agendas.Google.Test/PublicadorTest.cs @ 140:3639803112c6

Refactoring de la relación entre Evento y Estado
author nelopauselli
date Fri, 29 Jul 2011 16:30:53 -0300
parents 62791999ad01
children e6e6bfb1da9e
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>();
            var message="";
            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, DefaultPatrocinadorRepository);
            
            agenda.Proponer("Agile Patterns", null, null, TipoEvento.Van);
            adapter.Verify(ad => ad.CreateEvent(It.IsAny<IGEventDetail>(), out message), Times.Never());

            agenda.Agendar("Agile Patterns", "Alejandro Labra", new DateTime(2011, 07, 09), "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 publicador = new GooglePublicador(adapter.Object);
			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
            agenda.Proponer("Agile Patterns", null, null, TipoEvento.Van);
            agenda.Agendar("Agile Patterns", "Alejandro Labra", new DateTime(2011, 07, 09), "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(18, detail.StartEvent.Hour);
            Assert.AreEqual(ev.Fecha.Value.Day, detail.StartEvent.Day);
            Assert.AreEqual(ev.Fecha.Value.Month, detail.StartEvent.Month);
            Assert.AreEqual(ev.Fecha.Value.Year, detail.StartEvent.Year);

            Assert.AreEqual(DateTimeKind.Utc, detail.EndEvent.Kind);
            Assert.AreEqual(20, detail.EndEvent.Hour);
            Assert.AreEqual(ev.Fecha.Value.Day, detail.EndEvent.Day);
            Assert.AreEqual(ev.Fecha.Value.Month, detail.EndEvent.Month);
            Assert.AreEqual(ev.Fecha.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 publicador = new GooglePublicador(adapter.Object);
			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
            agenda.Proponer("Agile Patterns", null, null, TipoEvento.Cafe);
            agenda.Agendar("Agile Patterns", "Alejandro Labra", new DateTime(2011, 07, 09), "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(18, detail.StartEvent.Hour);
            Assert.AreEqual(ev.Fecha.Value.Day, detail.StartEvent.Day);
            Assert.AreEqual(ev.Fecha.Value.Month, detail.StartEvent.Month);
            Assert.AreEqual(ev.Fecha.Value.Year, detail.StartEvent.Year);

            Assert.AreEqual(DateTimeKind.Utc, detail.EndEvent.Kind);
            Assert.AreEqual(20, detail.EndEvent.Hour);
            Assert.AreEqual(ev.Fecha.Value.Day, detail.EndEvent.Day);
            Assert.AreEqual(ev.Fecha.Value.Month, detail.EndEvent.Month);
            Assert.AreEqual(ev.Fecha.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 publicador = new GooglePublicador(adapter.Object);
			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
            agenda.Proponer("Agile Patterns", null, null, TipoEvento.GrupoEstudio);
            agenda.Agendar("Agile Patterns", "Alejandro Labra", new DateTime(2011, 07, 09), "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(18, detail.StartEvent.Hour);
            Assert.AreEqual(ev.Fecha.Value.Day, detail.StartEvent.Day);
            Assert.AreEqual(ev.Fecha.Value.Month, detail.StartEvent.Month);
            Assert.AreEqual(ev.Fecha.Value.Year, detail.StartEvent.Year);

            Assert.AreEqual(DateTimeKind.Utc, detail.EndEvent.Kind);
            Assert.AreEqual(20, detail.EndEvent.Hour);
            Assert.AreEqual(ev.Fecha.Value.Day, detail.EndEvent.Day);
            Assert.AreEqual(ev.Fecha.Value.Month, detail.EndEvent.Month);
            Assert.AreEqual(ev.Fecha.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>();
            var message = "";
            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, DefaultPatrocinadorRepository);

            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", "Alejandro Labra", new DateTime(2011, 07, 09), "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());
        }
    }
}