view Agendas/trunk/src/Agendas.Tests/PropuestasTests.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 2434c2323f3d
line wrap: on
line source

using System;
using System.Collections.Generic;
using System.Linq;
using AltNetHispano.Agendas.Domain;
using AltNetHispano.Agendas.Domain.Exceptions;
using AltNetHispano.Agendas.Domain.Repositories;
using Moq;
using NUnit.Framework;

namespace AltNetHispano.Agendas.Tests
{
	[TestFixture]
	public class PropuestasTests : TestBase
	{
		private const string urlInvitacion = "http://groups.google.com/group/altnet-hispano/browse_thread/thread/65d6d26eb381386e";

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

			agenda.Proponer("Van", null, urlInvitacion);
			{
				IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
				IList<Evento> eventosPublicados = agenda.GetEventosAgendados();

				Assert.AreEqual(1, eventosPropuestos.Count);
				Assert.AreEqual(0, eventosPublicados.Count);

				var evento = eventosPropuestos.FirstOrDefault();
				agenda.ModificarPropuesta(evento.Id, "Van 2", "otro ponente", urlInvitacion);

				eventosPropuestos = agenda.GetEventosPropuestos();
				Assert.AreEqual(1, eventosPropuestos.Count);

				evento = eventosPropuestos.FirstOrDefault();
				Assert.AreEqual("Van 2", evento.Titulo);
				Assert.AreEqual("otro ponente", evento.Persona.Nombre);
			}

			var r = agenda.Agendar("Van 2", "jjmontes", DateTime.Now, urlInvitacion);
			Assert.IsTrue(r.Succeful);
			{
				IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
				IList<Evento> eventosPublicados = agenda.GetEventosAgendados();

				Assert.AreEqual(0, eventosPropuestos.Count);
				Assert.AreEqual(1, eventosPublicados.Count);
			}
		}

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

			{
				agenda.Proponer("Van propuesta", null, urlInvitacion);
			}

			{
				var van = agenda.GetEventosPropuestos().FirstOrDefault();
				Assert.IsNotNull(van);
				var r = agenda.Agendar(van.Titulo, "Ponente", null,
					urlInvitacion);
				Assert.IsFalse(r.Succeful);
			}
		}

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

			{
				agenda.Proponer("Van propuesta", null, urlInvitacion);
			}

			{
				var van = agenda.GetEventosPropuestos().FirstOrDefault();
				Assert.IsNotNull(van);

				van.Actualizar(null, DateTime.Today.AddDays(5), urlInvitacion);
				var r = agenda.Agendar(van.Titulo, string.Empty, van.Fecha,
					urlInvitacion);
				Assert.IsFalse(r.Succeful);
			}
		}

		[Test]
		public void Intentar_obtener_un_evento_inexistente()
		{
			var idEventoNoExistente = new Guid("99999999999999999999999999999999");

			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);

			Assert.Throws<EventoNotFoundException>(() => agenda.GetEvento(idEventoNoExistente));
		}

		[Test]
		public void Intentar_proponer_evento_sin_titulo()
		{
			var repository = new Mock<IEventoRepository>();

			var agenda = new Agenda(null, repository.Object, DefaultPersonaRepository);

			var r = agenda.Proponer(string.Empty, null, urlInvitacion);
			Assert.IsFalse(r.Succeful);

			repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0));
		}

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

			SetCurrentUser(null, null);

			Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Proponer("Inmortalidad de la meduza.", null, urlInvitacion));
		}

		[Test]
		public void Proponer_evento_correctamente()
		{
			var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository);
			agenda.Proponer("Van propuesta", null, urlInvitacion);

			IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
			Assert.IsNotNull(eventosPropuestos);
			Assert.AreEqual(1, eventosPropuestos.Count);
			Assert.AreEqual("Van propuesta", eventosPropuestos[0].Titulo);
		}

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

			agenda.Proponer("Van propuesta", null, urlInvitacion);
			var r = agenda.Agendar("Van publicada", "jjmontes", DateTime.Now,
				urlInvitacion);
			Assert.IsTrue(r.Succeful);

			IList<Evento> eventosPropuestos = agenda.GetEventosPropuestos();
			IList<Evento> eventosPublicados = agenda.GetEventosAgendados();

			Assert.AreEqual(1, eventosPropuestos.Count);
			Assert.AreEqual(1, eventosPublicados.Count);
		}
	}
}