view Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs @ 106:80c22175c9b5

agregado de tipo de evento (van, cafe, grupoestudio) agregado de tipo de evento en el alta de evento y en el alta de propuestas desde la app web algunas correcciones en el publicador del blog agregado de textos para publicar en el blog eventos de tipo alt.net cafe
author jorge.rowies
date Mon, 06 Jun 2011 14:07:12 -0300
parents 2434c2323f3d
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);
		}
	}
}