view Agendas/trunk/src/Agendas.Twitter.Tests/Publicador_tests.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 aacfe26ee40b
children
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());
        }
    }
}