# HG changeset patch
# User juanjose.montesdeocaarbos
# Date 1312645306 10800
# Node ID 5c94b052d838aea77a48d443eb6d54f1974e079a
# Parent 97e51ddeeb58caf12939e392c0cead02758d8a8f
Ticket 153: UI de Publicar. Faltaba la DuraciĆ³n del evento en la capa de negocios.
diff -r 97e51ddeeb58 -r 5c94b052d838 Agendas/trunk/src/Agendas.Domain/Agenda.cs
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs Sat Aug 06 03:34:45 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs Sat Aug 06 12:41:46 2011 -0300
@@ -123,7 +123,7 @@
return new Resultado(true);
}
- public Resultado Publicar(Guid eventoId, short numeroOrden, string urlWiki)
+ public Resultado Publicar(Guid eventoId, short numeroOrden, string urlWiki, TimeSpan duracion)
{
if (numeroOrden <= 0)
throw new ArgumentOutOfRangeException("numeroOrden");
@@ -131,9 +131,12 @@
if (string.IsNullOrWhiteSpace(urlWiki))
throw new ArgumentException("urlWiki");
+ if (duracion.Hours.Equals(0) && duracion.Minutes.Equals(0))
+ throw new ArgumentOutOfRangeException("duracion");
+
Evento evento = GetEvento(eventoId);
- evento.Publicar(numeroOrden, urlWiki);
+ evento.Publicar(numeroOrden, urlWiki, duracion);
Notify(evento);
diff -r 97e51ddeeb58 -r 5c94b052d838 Agendas/trunk/src/Agendas.Domain/Evento.cs
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs Sat Aug 06 03:34:45 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs Sat Aug 06 12:41:46 2011 -0300
@@ -78,6 +78,14 @@
}
}
+ ///
+ /// Determina la duraciĆ³n de un evento.
+ ///
+ public virtual TimeSpan Duracion
+ {
+ get; set;
+ }
+
protected internal virtual void AddPatrocinador(Patrocinador patrocinador)
{
_patrocinadores.Add(patrocinador);
@@ -137,7 +145,7 @@
Ponente = persona;
Fecha = fecha;
UrlInvitacion = urlInvitacion;
- this.Estado.Promover(this, Accion.Agendar);
+ Estado.Promover(this, Accion.Agendar);
}
public virtual void Actualizar(Persona persona, DateTime? fecha, string urlInvitacion)
@@ -157,14 +165,15 @@
public virtual void Confirmar()
{
- this.Estado.Promover(this, Accion.Confirmar);
+ Estado.Promover(this, Accion.Confirmar);
}
- public virtual void Publicar(short numeroOrden, string urlWiki)
+ public virtual void Publicar(short numeroOrden, string urlWiki, TimeSpan duracion)
{
- this.NumeroOrden = numeroOrden;
- this.UrlWiki = urlWiki;
- this.Estado.Promover(this, Accion.Publicar);
+ NumeroOrden = numeroOrden;
+ UrlWiki = urlWiki;
+ Duracion = duracion;
+ Estado.Promover(this, Accion.Publicar);
}
public virtual void Cancelar()
diff -r 97e51ddeeb58 -r 5c94b052d838 Agendas/trunk/src/Agendas.Tests/AgendarTests.cs
--- a/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Sat Aug 06 03:34:45 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Sat Aug 06 12:41:46 2011 -0300
@@ -288,7 +288,8 @@
[Test]
public void Al_publicar_un_evento_debe_quedar_con_estado_EventoPublicadoState_y_debe_generar_el_track_correspondiente()
{
- const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx";
+ const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx";
+ var duracion = new TimeSpan(1, 34, 00);
var publicador1 = new Mock();
var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
@@ -297,15 +298,17 @@
var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5");
agenda.Confirmar(evento.Id);
- agenda.Publicar(evento.Id, 1, urlWiki);
+ agenda.Publicar(evento.Id, 1, urlWiki, duracion);
Assert.IsInstanceOf(typeof(EventoPublicadoState), evento.Estado);
Assert.That(evento.GetTrackNews().Count(t => t.Accion == Accion.Publicar) == 1);
}
[Test]
- public void Al_publicar_un_evento_debe_asignarse_el_nro_de_reunion_y_la_url_de_la_wiki()
+ public void Al_publicar_un_evento_debe_asignarse_el_nro_de_reunion_la_url_de_la_wiki_y_la_duracion()
{
+ const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx";
+ var duracion = new TimeSpan(1, 34, 00);
var publicador1 = new Mock();
var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
@@ -314,11 +317,11 @@
var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5");
agenda.Confirmar(evento.Id);
- const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx";
- agenda.Publicar(evento.Id, 71, urlWiki);
+ agenda.Publicar(evento.Id, 71, urlWiki, duracion);
Assert.AreEqual(71, evento.NumeroOrden);
Assert.AreEqual(urlWiki, evento.UrlWiki);
+ Assert.AreEqual(duracion, evento.Duracion);
}
[Test]
@@ -342,6 +345,8 @@
[ExpectedException(typeof(AccionNoSoportadaException))]
public void Al_publicar_sin_confirmar_debe_lanzarse_excepcion()
{
+ const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx";
+ var duracion = new TimeSpan(1, 34, 00);
var publicador1 = new Mock();
var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
@@ -351,13 +356,13 @@
DefaultEventoRepository.GetByState(EventoPropuestoState.GetInstance()).Single(e => e.Titulo == "Html 5");
Assert.IsFalse(evento.Estado.GetType() == typeof(EventoConfirmadoState));
- const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx";
- agenda.Publicar(evento.Id, 1, urlWiki);
+ agenda.Publicar(evento.Id, 1, urlWiki, duracion);
}
[Test]
public void Publicar_Evento_Con_NroOrden_Invalido_Genera_Excepcion()
{
+ var duracion = new TimeSpan(1, 34, 00);
var publicador1 = new Mock();
var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
@@ -368,13 +373,14 @@
const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx";
- Assert.Throws(() => agenda.Publicar(evento.Id, 0, urlWiki));
- Assert.Throws(() => agenda.Publicar(evento.Id, -1, urlWiki));
+ Assert.Throws(() => agenda.Publicar(evento.Id, 0, urlWiki, duracion));
+ Assert.Throws(() => agenda.Publicar(evento.Id, -1, urlWiki, duracion));
}
[Test]
public void Publicar_Evento_Con_Url_Invalida_Genera_Excepcion()
{
+ var duracion = new TimeSpan(1, 34, 00);
var publicador1 = new Mock();
var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
@@ -383,8 +389,24 @@
var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5");
agenda.Confirmar(evento.Id);
- Assert.Throws(() => agenda.Publicar(evento.Id, 1, ""));
- Assert.Throws(() => agenda.Publicar(evento.Id, 1, " "));
+ Assert.Throws(() => agenda.Publicar(evento.Id, 1, "", duracion));
+ Assert.Throws(() => agenda.Publicar(evento.Id, 1, " ", duracion));
}
- }
+
+ [Test]
+ public void Publicar_Evento_Con_Duracion_Invalida_Genera_Excepcion()
+ {
+ const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx";
+ var publicador1 = new Mock();
+
+ var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository);
+ agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), DateTime.MinValue, urlInvitacion, TipoEvento.Van);
+
+ var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5");
+ agenda.Confirmar(evento.Id);
+
+ Assert.Throws(() => agenda.Publicar(evento.Id, 1, urlWiki, new TimeSpan(0, 0, 0)));
+ Assert.Throws(() => agenda.Publicar(evento.Id, 1, urlWiki, new TimeSpan(0, 0, 59)));
+ }
+ }
}
\ No newline at end of file
diff -r 97e51ddeeb58 -r 5c94b052d838 Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs
--- a/Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs Sat Aug 06 03:34:45 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs Sat Aug 06 12:41:46 2011 -0300
@@ -149,7 +149,7 @@
Evento evento = _eventoRepository.Get(eventoId);
Assert.AreEqual(EventoConfirmadoState.GetInstance(), evento.Estado);
- evento.Publicar(1, null);
+ evento.Publicar(1, null, new TimeSpan(0, 0, 0));
}
using (_requestEmulator.Invoke())
diff -r 97e51ddeeb58 -r 5c94b052d838 Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs
--- a/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs Sat Aug 06 03:34:45 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs Sat Aug 06 12:41:46 2011 -0300
@@ -36,7 +36,7 @@
public void Publicar(Guid eventoId)
{
- var resultado = _agenda.Publicar(eventoId, 1, "http://www.altnethispano.org/");
+ var resultado = _agenda.Publicar(eventoId, 1, "http://www.altnethispano.org/", new TimeSpan(2, 11, 0));
Assert.IsTrue(resultado.Succeful);
}
diff -r 97e51ddeeb58 -r 5c94b052d838 Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs
--- a/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Sat Aug 06 03:34:45 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Sat Aug 06 12:41:46 2011 -0300
@@ -102,7 +102,7 @@
{
var agenda = AgendaFactory.GetAgenda();
- var r = agenda.Publicar(new Guid(model.Id), model.NroOrden, model.UrlWiki);
+ var r = agenda.Publicar(new Guid(model.Id), model.NroOrden, model.UrlWiki, model.DuracionReal);
if (r.Succeful)
{
this.AddNotification(string.Format("Evento publicado {0}", model.Titulo));