view Agendas/trunk/src/Agendas.Tests/PonentesTests.cs @ 90:d1688622fa88

Autenticando con twitter (falta emprolijar el código, pero autentica!)
author Nelo@Kenia.neluz.int
date Fri, 03 Jun 2011 21:35:59 -0300
parents 26d0513a8410
children db4b1e2cae49
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>();

			var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPonenteRepository);

			agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), 
				urlInvitacion);
			agenda.Agendar("Conform - Parte 2", "Fabio Maulo", new DateTime(2011, 3, 5),
				urlInvitacion);

			var eventos = agenda.GetEventosAgendados();
			Assert.AreEqual(2, eventos.Count);

			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(2));

			Assert.AreEqual(1, DefaultPonenteRepository.GetAll().Count);

			var evento = eventos[0];

			Assert.IsNotNull(evento.Ponente);
			var ponente = evento.Ponente;
			Assert.IsNotNull(evento.Ponente.Eventos);
			Assert.Contains(eventos[0], new List<Evento>(ponente.Eventos));
			Assert.Contains(eventos[1], new List<Evento>(ponente.Eventos));
		}

		[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, DefaultPonenteRepository);

			agenda.RegistrarPonente("Fabio Maulo", "fabiomaulo@gmail.com", "@fabiomaulo", "http://fabiomaulo.blogspot.com");

			agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26), urlInvitacion);

			Assert.AreEqual(1, agenda.GetEventosAgendados().Count);

			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));

			Assert.IsNotNull(evento);
			Assert.AreEqual("Fabio Maulo", evento.Ponente.Nombre);
			Assert.AreEqual("fabiomaulo@gmail.com", evento.Ponente.Mail);
			Assert.AreEqual("@fabiomaulo", evento.Ponente.Twitter);
			Assert.AreEqual("http://fabiomaulo.blogspot.com", evento.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, DefaultPonenteRepository);

			agenda.Agendar("Audit (parallel model) con NHibernate 3", "Fabio Maulo", new DateTime(2011, 2, 26),
				urlInvitacion);

			Assert.AreEqual(1, agenda.GetEventosAgendados().Count);

			publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));

			Assert.IsNotNull(evento);
			Assert.AreEqual("Fabio Maulo", evento.Ponente.Nombre);
			Assert.IsNullOrEmpty(evento.Ponente.Twitter);
		}

		[Test]
		public void Quitar_ponente_de_un_evento()
		{
			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPonenteRepository);

			const string titulo = "Audit (parallel model) con NHibernate 3";
			Guid eventoId;

			agenda.Proponer(titulo, "Fabio", urlInvitacion);
			Ponente ponente;
			{
				var eventos = agenda.GetEventosPropuestos();
				Assert.AreEqual(1, eventos.Count);

				Evento evento = eventos[0];
				Assert.AreEqual("Fabio", evento.Ponente.Nombre);

				eventoId = evento.Id;
				ponente = evento.Ponente;
			}

			agenda.ModificarPropuesta(eventoId, titulo, null, urlInvitacion);
			{
				var eventos = agenda.GetEventosPropuestos();
				Assert.AreEqual(1, eventos.Count);

				Evento evento = eventos[0];
				Assert.IsNull(evento.Ponente);
			}

			Assert.AreEqual(0, ponente.Eventos.Count());
		}

		[Test]
		public void Cambiar_ponente_de_un_evento()
		{
			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPonenteRepository);

			const string titulo = "Audit (parallel model) con NHibernate 3";
			Guid eventoId;

			agenda.Proponer(titulo, "Fabio", urlInvitacion);
			Ponente ponente1;
			{
				var eventos = agenda.GetEventosPropuestos();
				Assert.AreEqual(1, eventos.Count);

				Evento evento = eventos[0];
				Assert.AreEqual("Fabio", evento.Ponente.Nombre);

				eventoId = evento.Id;
				ponente1 = evento.Ponente;
			}

			agenda.ModificarPropuesta(eventoId, titulo, "José", urlInvitacion);
			Ponente ponente2;
			{
				var eventos = agenda.GetEventosPropuestos();
				Assert.AreEqual(1, eventos.Count);

				Evento evento = eventos[0];
				Assert.IsNotNull(evento.Ponente);
				ponente2 = evento.Ponente;
			}

			Assert.AreEqual(0, ponente1.Eventos.Count());
			Assert.AreEqual(1, ponente2.Eventos.Count());
		}
	}
}