view Agendas/trunk/src/Agendas.Twitter.Tests/Publicador_tests.cs @ 274:72a96459f910

Ticket #123: Patrocinadores de las vans.
author juanjose.montesdeocaarbos
date Wed, 30 Nov 2011 08:56:01 -0300
parents 33e6ee3d1776
children aacfe26ee40b
line wrap: on
line source

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

namespace Agendas.Twitter.Tests
{
	[TestFixture]
	public class Publicador_tests : TestBase
	{
		[Test]
		public void Proponer_evento()
		{
			var adapter = new Mock<ITwitterAdapter>();

			string message;
			string twitt = null;
			adapter.Setup(a => a.Update(It.IsAny<string>(), out message)).Returns(true).Callback<string, string>((status, m) => twitt = status);

			var publicador = new TwitterPublicador(adapter.Object);

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

			agenda.Proponer("Identity Providers", null, null, TipoEvento.GrupoEstudio);

			adapter.Verify(a => a.Update(It.IsAny<string>(), out message), Times.Once());

			Assert.That(twitt, Is.StringContaining("GrupoEstudio"));
		}

		[Test]
		public void Proponer_y_agendar_evento()
		{
			var adapter = new Mock<ITwitterAdapter>();

			string message;
			string twitt = null;
            var fechaInicio = DateTime.Today.AddDays(7).ToUniversalTime();
            var fechaTermino = fechaInicio.AddHours(2);
			adapter.Setup(a => a.Update(It.IsAny<string>(), out message)).Returns(true).Callback<string, string>((status, m) => twitt = status);

			var publicador = new TwitterPublicador(adapter.Object);

			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
			agenda.Proponer("Identity Providers", null, null, TipoEvento.GrupoEstudio);

			adapter.Verify(a => a.Update(It.IsAny<string>(), out message), Times.Once());

		    agenda.Agendar("Identity Providers", new[]{TestsHelper.GetOrCreatePonente("Nelo Pauselli")}, fechaInicio, fechaTermino,
		                   null, TipoEvento.GrupoEstudio);

			adapter.Verify(a => a.Update(It.IsAny<string>(), out message), Times.Exactly(2));

			Assert.That(twitt, Is.StringContaining("@nelopauselli"));

		}

		[Test]
		public void Twitter_texto_largo()
		{
			var adapter = new Mock<ITwitterAdapter>();

			string message;
			var twitters= new List<string>();
			adapter.Setup(a => a.Update(It.IsAny<string>(), out message)).Returns(true).Callback<string, string>((status, m) => twitters.Add(status));

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

			var ponentes = new[]
			               	{
			               		new Persona("Carlos Peix", "carlospeix@gmail.com", "carlospeix", "http://www.carlospeix.com.ar"),
			               		new Persona("Nelo Pauselli", "nelopauselli@gmail.com", "nelopauselli",
			               		            "http://nelopauselli.blogspot.com/")
			               	};

			foreach (var ponente in ponentes)
				DefaultPersonaRepository.Save(ponente);

			var inicio = DateTime.Today.AddDays(2);

			agenda.Agendar("Identity Providers Públicos y Empresariales", ponentes.Select(p=>p.Id), inicio, inicio.AddHours(2), null, TipoEvento.Van);

			Assert.IsTrue(twitters.Any());
			var joined = string.Empty;
			foreach (var twitter in twitters)
			{
				Console.WriteLine(twitter);
				Assert.LessOrEqual(twitter.Length, 140);
				joined += twitter;
			}
			Assert.That(joined, Is.StringContaining("Identity Providers Públicos y Empresariales"));
			Assert.That(joined, Is.StringContaining("@carlospeix"));
			Assert.That(joined, Is.StringContaining("@nelopauselli"));

			Assert.AreEqual(2, twitters.Count());
			Assert.AreEqual(string.Format("Se ha agendando el evento Identity Providers Públicos y Empresariales con @carlospeix y @nelopauselli para el {0}...", inicio.ToString("dd/MM/yyyy")), twitters.First());
			Assert.AreEqual("...por http://snipr.com/virtualaltnet", twitters.Last());

			adapter.Verify(a => a.Update(It.IsAny<string>(), out message), Times.Exactly(2));

		}

		[Test]
		public void Evento_sin_ponente()
		{
			var adapter = new Mock<ITwitterAdapter>();

			string message;
			var twitters = new List<string>();
			adapter.Setup(a => a.Update(It.IsAny<string>(), out message)).Returns(true).Callback<string, string>((status, m) => twitters.Add(status));

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

			var inicio = DateTime.Today;

			agenda.Agendar("Identity Providers Públicos y Empresariales",new[]{ Guid.Empty}, inicio, inicio.AddHours(2), null, TipoEvento.Cafe);

			Assert.IsTrue(twitters.Any());
			var joined = string.Empty;
			foreach (var twitter in twitters)
			{
				Console.WriteLine(twitter);
				Assert.LessOrEqual(twitter.Length, 140);
				joined += twitter;
			}
            Assert.AreEqual(string.Format("Se ha agendando el evento Identity Providers Públicos y Empresariales para el {0} por http://snipr.com/virtualaltnet", inicio.ToString("dd/MM/yyyy")), joined);

			adapter.Verify(a => a.Update(It.IsAny<string>(), out message), Times.Once());

		}

        [Test]
        public void Cancelar_evento()
        {
            var title = string.Format("Titulo: {0}{1}{2}{3}{4}{5}{6}", DateTime.Now.Year, DateTime.Now.Month, 
                DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond);
            string twitt = null;

            var publicador = new TwitterPublicador();
			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
            var resultAgendar = agenda.Agendar(title, null, DateTime.Today.AddDays(8), DateTime.Today.AddDays(8).AddHours(2), string.Empty, TipoEvento.GrupoEstudio);
            Assert.IsTrue(resultAgendar.Succeful);

            var evento = agenda.GetEventosActivos().Where(e => e.Titulo == title).FirstOrDefault();

			agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
            var resultCancelar = agenda.Cancelar(evento.Id);

            Assert.IsTrue(resultCancelar.Succeful);
            Assert.AreEqual(0, resultCancelar.Warnings.Count());
        }

        [Test]
        public void No_enviar_Twitt_en_eventos_pasados()
        {
            //var adapter = new Mock<ITwitterAdapter>();
            //string message;
            //var twitters = new List<string>();

            //adapter.Setup(a => a.Update(It.IsAny<string>(), out message)).Returns(true).Callback<string, string>((status, m) => twitters.Add(status));

        	var publicador = new TwitterPublicador(); //adapter.Object);

			var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
            var resultAgendar = agenda.Agendar("Primer VAN", null, DateTime.Today.AddDays(-1), DateTime.Today.AddDays(-1).AddHours(2), string.Empty, TipoEvento.GrupoEstudio);
            Assert.IsTrue(resultAgendar.Succeful);
            Assert.AreEqual(1, resultAgendar.Warnings.Count());
			Assert.AreEqual("Solo se generan twitts de eventos futuros.", resultAgendar.Warnings.FirstOrDefault().Mensaje);

            //adapter.Verify(a => a.Update(It.IsAny<string>(), out message), Times.Never());
        }
    }
}