view Agendas/trunk/src/Agendas.Tests/PonentesTests.cs @ 94:db4b1e2cae49

Cambio del nombre de la clase Ponente a Persona Se agrega la clase Cuenta para identificar cada una de las cuentas con que se puede autenticar una persona Alta Automatica de cuentas de twitter creando la persona
author Nelo@Kenia.neluz.int
date Sat, 04 Jun 2011 12:11:17 -0300
parents 26d0513a8410
children 83d76f6e0a3c
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>();
			Assert.AreEqual(1, DefaultPersonaRepository.GetAll().Count);

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

			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(2, DefaultPersonaRepository.GetAll().Count);

			var evento = eventos[0];

			Assert.IsNotNull(evento.Persona);
			var ponente = evento.Persona;
			Assert.IsNotNull(evento.Persona.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, DefaultPersonaRepository);

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

			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.Persona.Nombre);
			Assert.IsNullOrEmpty(evento.Persona.Twitter);
		}

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

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

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

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

				eventoId = evento.Id;
				persona = evento.Persona;
			}

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

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

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

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

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

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

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

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

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

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

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