Mercurial > altnet-hispano
changeset 165:56f62516c172
Merge
author | nelopauselli |
---|---|
date | Fri, 05 Aug 2011 22:05:19 -0300 |
parents | 93aa103f75ec (current diff) 557c386fcecc (diff) |
children | fae2feae499e |
files | |
diffstat | 11 files changed, 200 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs Fri Aug 05 22:05:19 2011 -0300 @@ -125,6 +125,12 @@ public Resultado Publicar(Guid eventoId, short numeroOrden, string urlWiki) { + if (numeroOrden <= 0) + throw new ArgumentOutOfRangeException("numeroOrden"); + + if (string.IsNullOrWhiteSpace(urlWiki)) + throw new ArgumentException("urlWiki"); + Evento evento = GetEvento(eventoId); evento.Publicar(numeroOrden, urlWiki);
--- a/Agendas/trunk/src/Agendas.Resources/Properties/DataAnnotationResources.Designer.cs Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Resources/Properties/DataAnnotationResources.Designer.cs Fri Aug 05 22:05:19 2011 -0300 @@ -61,6 +61,24 @@ } /// <summary> + /// Busca una cadena traducida similar a Duración. + /// </summary> + public static string DuracionReal { + get { + return ResourceManager.GetString("DuracionReal", resourceCulture); + } + } + + /// <summary> + /// Busca una cadena traducida similar a Tiempo que duró la presentación.. + /// </summary> + public static string DuracionRealDescription { + get { + return ResourceManager.GetString("DuracionRealDescription", resourceCulture); + } + } + + /// <summary> /// Looks up a localized string similar to Correo electrónico. /// </summary> public static string EMail { @@ -97,6 +115,24 @@ } /// <summary> + /// Busca una cadena traducida similar a Nro. de Orden. + /// </summary> + public static string NroOrden { + get { + return ResourceManager.GetString("NroOrden", resourceCulture); + } + } + + /// <summary> + /// Busca una cadena traducida similar a Un número consecutivo que identifica al evento en el tiempo.. + /// </summary> + public static string NroOrdenDescription { + get { + return ResourceManager.GetString("NroOrdenDescription", resourceCulture); + } + } + + /// <summary> /// Looks up a localized string similar to Seleccione el ponente o responsable del evento. /// </summary> public static string PonenteDescription { @@ -194,5 +230,23 @@ return ResourceManager.GetString("UrlInvitacionUrl", resourceCulture); } } + + /// <summary> + /// Busca una cadena traducida similar a Url de la Wiki. + /// </summary> + public static string UrlWiki { + get { + return ResourceManager.GetString("UrlWiki", resourceCulture); + } + } + + /// <summary> + /// Busca una cadena traducida similar a La url donde se publica la presentación.. + /// </summary> + public static string UrlWikiDescription { + get { + return ResourceManager.GetString("UrlWikiDescription", resourceCulture); + } + } } }
--- a/Agendas/trunk/src/Agendas.Resources/Properties/DataAnnotationResources.resx Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Resources/Properties/DataAnnotationResources.resx Fri Aug 05 22:05:19 2011 -0300 @@ -117,6 +117,12 @@ <resheader name="writer"> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> + <data name="DuracionReal" xml:space="preserve"> + <value>Duración</value> + </data> + <data name="DuracionRealDescription" xml:space="preserve"> + <value>Tiempo que duró la presentación.</value> + </data> <data name="EMail" xml:space="preserve"> <value>Correo electrónico</value> </data> @@ -129,6 +135,12 @@ <data name="NombreDescription" xml:space="preserve"> <value>Nombre de la persona que identifica a esta persona entre todas</value> </data> + <data name="NroOrden" xml:space="preserve"> + <value>Nro. de Orden</value> + </data> + <data name="NroOrdenDescription" xml:space="preserve"> + <value>Un número consecutivo que identifica al evento en el tiempo.</value> + </data> <data name="PonenteDescription" xml:space="preserve"> <value>Seleccione el ponente o responsable del evento</value> </data> @@ -162,4 +174,10 @@ <data name="UrlInvitacionUrl" xml:space="preserve"> <value>la url ingresada no es válida</value> </data> + <data name="UrlWiki" xml:space="preserve"> + <value>Url de la Wiki</value> + </data> + <data name="UrlWikiDescription" xml:space="preserve"> + <value>La url donde se publica la presentación.</value> + </data> </root> \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Fri Aug 05 22:05:19 2011 -0300 @@ -288,6 +288,7 @@ [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"; var publicador1 = new Mock<IPublicador>(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); @@ -296,7 +297,7 @@ var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); agenda.Confirmar(evento.Id); - agenda.Publicar(evento.Id, 0, string.Empty); + agenda.Publicar(evento.Id, 1, urlWiki); Assert.IsInstanceOf(typeof(EventoPublicadoState), evento.Estado); Assert.That(evento.GetTrackNews().Count(t => t.Accion == Accion.Publicar) == 1); @@ -350,8 +351,40 @@ DefaultEventoRepository.GetByState(EventoPropuestoState.GetInstance()).Single(e => e.Titulo == "Html 5"); Assert.IsFalse(evento.Estado.GetType() == typeof(EventoConfirmadoState)); - - agenda.Publicar(evento.Id, 0, string.Empty); + const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; + agenda.Publicar(evento.Id, 1, urlWiki); } - } + + [Test] + public void Publicar_Evento_Con_NroOrden_Invalido_Genera_Excepcion() + { + var publicador1 = new Mock<IPublicador>(); + + 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); + + const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; + + Assert.Throws<ArgumentOutOfRangeException>(() => agenda.Publicar(evento.Id, 0, urlWiki)); + Assert.Throws<ArgumentOutOfRangeException>(() => agenda.Publicar(evento.Id, -1, urlWiki)); + } + + [Test] + public void Publicar_Evento_Con_Url_Invalida_Genera_Excepcion() + { + var publicador1 = new Mock<IPublicador>(); + + 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<ArgumentException>(() => agenda.Publicar(evento.Id, 1, "")); + Assert.Throws<ArgumentException>(() => agenda.Publicar(evento.Id, 1, " ")); + } + } } \ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Workflows/Workflow.cs Fri Aug 05 22:05:19 2011 -0300 @@ -36,7 +36,7 @@ public void Publicar(Guid eventoId) { - var resultado = _agenda.Publicar(eventoId, 0, string.Empty); + var resultado = _agenda.Publicar(eventoId, 1, "http://www.altnethispano.org/"); Assert.IsTrue(resultado.Succeful); }
--- a/Agendas/trunk/src/Agendas.Tests/Workflows/WorkflowTests.cs Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Workflows/WorkflowTests.cs Fri Aug 05 22:05:19 2011 -0300 @@ -170,6 +170,8 @@ [Test] public void Proponer_agendar_confirmar_publicar() { + const string urlWiki = "http://www.altnethispano.org/wiki/van-2010-10-21-mono-cecil.ashx"; + _workflow.Proponer(); _workflow.Agendar();
--- a/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Fri Aug 05 22:05:19 2011 -0300 @@ -220,6 +220,7 @@ <Content Include="Views\Shared\DefaultEditor.cshtml" /> </ItemGroup> <ItemGroup> + <Content Include="Views\Evento\Publicar.cshtml" /> <Content Include="Views\Shared\_MenuPortal.cshtml" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
--- a/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Fri Aug 05 22:05:19 2011 -0300 @@ -77,10 +77,36 @@ public ActionResult Publicar(string id) { var agenda = AgendaFactory.GetAgenda(); - agenda.Publicar(new Guid(id), 0, string.Empty); + var evento = agenda.GetEvento(new Guid(id)); + + var model = new EventoPublicarModel + { + Id = id, + Titulo = evento.Titulo, + NroOrden = 0, //TODO: Obtener el último y sumarle uno. + UrlWiki = evento.UrlWiki, + DuracionReal = new TimeSpan(0, 0, 0) + }; + return View(model); + } - this.AddNotification("Evento publicado"); - return RedirectToAction("Index"); + [HttpPost] + [Authorize] + public ActionResult Publicar(EventoPublicarModel model) + { + if (ModelState.IsValid) + { + var agenda = AgendaFactory.GetAgenda(); + + var r = agenda.Publicar(new Guid(model.Id), model.NroOrden, model.UrlWiki); + if (r.Succeful) + { + this.AddNotification(string.Format("Evento publicado {0}", model.Titulo)); + return RedirectToAction("Index"); + } + ModelState.AddModelError("error", r.ToString()); + } + return View(model); } [Authorize]
--- a/Agendas/trunk/src/Agendas.Web/Controllers/HistoricoController.cs Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/HistoricoController.cs Fri Aug 05 22:05:19 2011 -0300 @@ -24,7 +24,7 @@ Ponente = e.Ponente.Nombre, Numero = e.NumeroOrden.ToString(), Tipo = e.Tipo.ToString(), - Duracion = "0:00" + Duracion = "0:00" //TODO: e.GetEvento() } }; return View(model);
--- a/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs Fri Aug 05 21:55:45 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs Fri Aug 05 22:05:19 2011 -0300 @@ -65,6 +65,29 @@ public string UrlInvitacion { get; set; } } + public class EventoPublicarModel + { + [HiddenInput(DisplayValue = false)] + public string Id { get; set; } + + [Required] + [HiddenInput] + public string Titulo { get; set; } + + [Required] + [UIHint("NroOrden")] + [Range(1, short.MaxValue)] + public short NroOrden { get; set; } + + [Required] + [Url] + public string UrlWiki { get; set; } + + [Required] + [UIHint("DuracionReal")] + public TimeSpan DuracionReal { get; set; } + } + public class EventoDto { public string Id { get; set; }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Views/Evento/Publicar.cshtml Fri Aug 05 22:05:19 2011 -0300 @@ -0,0 +1,28 @@ +@model AltNetHispano.Agendas.Web.Models.EventoPublicarModel +<h2>Agenda</h2> +<p> + Modifique los datos que desea corregir y presione guardar +</p> + +<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> +<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> + +<script type="text/javascript"> + $(document).ready(function () { + $("#Fecha").datepicker({ dateFormat: 'dd-mm-yy' }); + }); +</script> + +@using (Html.BeginForm()) +{ + @Html.ValidationSummary(true, "Los datos ingresados no son validos, por favor verifíquelos") + <div> + <fieldset> + <legend>Datos del evento:</legend> + @Html.EditorForModel() + <p> + <input type="submit" value="Guardar" /> + </p> + </fieldset> + </div> +} \ No newline at end of file