view Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs @ 120:c3573defd18f

Agregado de Fecha, Usuario y Successful en TrackLog Modificacion de publicador de blog para usar TrackLog Agregado de TrackLog en el test de crud de eventos Fix en publicador de twitter para que no twitee si ya se encuentra en TrackLog pero con Successful en true
author Jorge@Jorge-PC
date Fri, 24 Jun 2011 21:18:21 -0300
parents 80c22175c9b5
children b74734a1a755
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, TipoEvento.Van);
			{
				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.Ponente.Nombre);
			}

      var r = agenda.Agendar("Van 2", "jjmontes", DateTime.Now, urlInvitacion, TipoEvento.Van);
			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, TipoEvento.Van);
			}

			{
				var van = agenda.GetEventosPropuestos().FirstOrDefault();
				Assert.IsNotNull(van);
				var r = agenda.Agendar(van.Titulo, "Ponente", null,
          urlInvitacion, TipoEvento.Van);
				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, TipoEvento.Van);
			}

			{
				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, TipoEvento.Van);
				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, TipoEvento.Van);
			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, TipoEvento.Van));
		}

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

			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, TipoEvento.Van);
			var r = agenda.Agendar("Van publicada", "jjmontes", DateTime.Now,
        urlInvitacion, TipoEvento.Van);
			Assert.IsTrue(r.Succeful);

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

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