# HG changeset patch # User juanjose.montesdeocaarbos # Date 1317812241 10800 # Node ID 5cc1681d3789e122d770e69f62fe87abde0c79af # Parent a7daa939ef0c1cf059413d1fb42e9adf4991e8b8# Parent b43dc14886e38fc5ef009eb063503c333e44f63e Combinar diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/db/v1.0/01 - Otros Ponentes.sql --- a/Agendas/trunk/db/v1.0/01 - Otros Ponentes.sql Wed Oct 05 07:43:09 2011 -0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -create table OtrosPonentes ( - evento_key uniqueidentifier not null, - elt uniqueidentifier not null, - constraint PK_Colaboradores primary key(evento_key, elt), - constraint FK_Colaboradores_Evento foreign key (evento_key) references Evento, - constraint FK_Colaboradores_Persona foreign key (elt) references Persona) diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/db/v1.0/01 - Ponentes.sql --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/db/v1.0/01 - Ponentes.sql Wed Oct 05 07:57:21 2011 -0300 @@ -0,0 +1,19 @@ +if (OBJECT_ID('Ponentes') is null) +begin + if (OBJECT_ID('OtrosPonentes') is not null) + EXEC sp_rename 'dbo.OtrosPonentes', 'Ponentes' + else + create table Ponentes ( + evento_key uniqueidentifier not null, + elt uniqueidentifier not null, + constraint PK_Ponentes primary key(evento_key, elt), + constraint FK_Ponentes_Evento foreign key (evento_key) references Evento, + constraint FK_Ponentes_Persona foreign key (elt) references Persona) +end +go + +insert into Ponentes (evento_key, elt) + select e.Id, e.Ponente + from Evento e + where e.Ponente is not null and e.Ponente not in (select p.elt from Ponentes p where p.evento_key = e.Id) +go diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Domain/Agenda.cs --- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs Wed Oct 05 07:57:21 2011 -0300 @@ -46,29 +46,23 @@ return _eventosRepository.GetByState(EventoPublicadoState.GetInstance()) ?? new List(); } - public EventoResultado ModificarEvento(Guid eventoId, string titulo, Guid ponenteId, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion) + public EventoResultado ModificarEvento(Guid eventoId, string titulo, IEnumerable ponentesId, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion) { Evento evento = GetEvento(eventoId); - if (evento.Tipo == TipoEvento.Van && ponenteId == Guid.Empty) + if (evento.Tipo == TipoEvento.Van && (ponentesId == null || !ponentesId.Any(id=>id!=Guid.Empty))) return new EventoResultado(false, "Debe indicar el ponente para este tipo de evento", null); - Persona persona = null; - if (ponenteId != Guid.Empty) - { - persona = _personaRepository.Get(ponenteId); - if (persona == null) - return new EventoResultado(false, string.Format("No se encontró el ponente indicado ({0})", ponenteId), null); - } - if (evento.Titulo != titulo) evento.CambiarTitulo(titulo); if (evento.FechaInicio == null && fechaInicio != null && evento.FechaTermino == null && fechaTermino != null) - evento.Agendar(persona, fechaInicio, fechaTermino, urlInvitacion); - else if (evento.FechaInicio != fechaInicio || evento.Ponente != persona || evento.UrlInvitacion != urlInvitacion || - evento.FechaTermino != fechaTermino) - evento.Actualizar(persona, fechaInicio, fechaTermino, urlInvitacion); + evento.Agendar(fechaInicio, fechaTermino, urlInvitacion); + else if (evento.FechaInicio != fechaInicio || evento.UrlInvitacion != urlInvitacion || evento.FechaTermino != fechaTermino) + evento.Actualizar(fechaInicio, fechaTermino, urlInvitacion); + + var r = ActualizarPonentes(evento, ponentesId, Accion.Modificar); + if (!r.Succeful) return r; Notify(evento); @@ -77,21 +71,20 @@ return new EventoResultado(true,"Evento modificado", warnings); } - public EventoResultado ModificarPropuesta(Guid id, string titulo, Guid ponenteId, string urlInvitacion) + public EventoResultado ModificarPropuesta(Guid id, string titulo, IEnumerable ponentesId, string urlInvitacion) { - return ModificarEvento(id, titulo, ponenteId, null, null, urlInvitacion); + return ModificarEvento(id, titulo, ponentesId, null, null, urlInvitacion); } - public EventoResultado Proponer(string titulo, Guid? ponenteId, string urlInvitacion, TipoEvento tipo) + public EventoResultado Proponer(string titulo, IEnumerable ponentesId, string urlInvitacion, TipoEvento tipo) { - Persona persona = null; - if (ponenteId.HasValue) - persona = _personaRepository.Get(ponenteId.Value); + if (string.IsNullOrWhiteSpace(titulo)) + return new EventoResultado(false, "Debe indicar el título del evento", null); - var evento = Evento.Proponer(titulo, persona, urlInvitacion, tipo); + var evento = Evento.Proponer(titulo, urlInvitacion, tipo); - if (string.IsNullOrWhiteSpace(evento.Titulo)) - return new EventoResultado(false,"Debe indicar el título del evento", null); + var r = ActualizarPonentes(evento, ponentesId, null); + if (!r.Succeful) return r; Notify(evento); @@ -102,23 +95,15 @@ return new EventoResultado(true,"Evento propuesto", warnings); } - public EventoResultado Agendar(string titulo, Guid ponenteId, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion, TipoEvento tipo, IEnumerable colaboradoresId = null) + public EventoResultado Agendar(string titulo, IEnumerable ponentesId, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion, TipoEvento tipo) { if (!fechaInicio.HasValue) return new EventoResultado(false, "Debe indicar la fecha", null); if (!fechaTermino.HasValue) return new EventoResultado(false, "Debe indicar la hora y duración", null); - if (tipo==TipoEvento.Van && ponenteId == Guid.Empty) + if (tipo == TipoEvento.Van && (ponentesId == null || !ponentesId.Any(id => id != Guid.Empty))) return new EventoResultado(false, "Debe indicar el ponente para este tipo de evento", null); - Persona persona = null; - if (ponenteId != Guid.Empty) - { - persona = _personaRepository.Get(ponenteId); - if (persona == null) - return new EventoResultado(false, string.Format("No se encontró el ponente indicado ({0})", ponenteId), null); - } - var existeOtroEvento = _eventosRepository.GetNoPropuestoByTitulo(titulo); if (existeOtroEvento != null) return new EventoResultado(false, @@ -137,23 +122,12 @@ } if (evento == null) - evento = Evento.Agendar(titulo, persona, fechaInicio.Value, fechaTermino.Value, urlInvitacion, tipo); + evento = Evento.Agendar(titulo, fechaInicio.Value, fechaTermino.Value, urlInvitacion, tipo); else - evento.Agendar(persona, fechaInicio, fechaTermino, urlInvitacion); + evento.Agendar(fechaInicio, fechaTermino, urlInvitacion); - var colaboradores = new List(); - if (colaboradoresId!=null) - { - foreach (var colaboradorId in colaboradoresId) - { - var colaborador = _personaRepository.Get(colaboradorId); - if (colaborador == null) - return new EventoResultado(false, string.Format("No se encontró el colaborador indicado ({0})", colaboradorId), - null); - colaboradores.Add(colaborador); - } - evento.ActualizarOtrosPonentes(colaboradores); - } + var r = ActualizarPonentes(evento, ponentesId, null); + if (!r.Succeful) return r; Notify(evento); @@ -164,7 +138,25 @@ return new EventoResultado(true, "Evento creado", warnings); } - public EventoResultado Confirmar(Guid eventoId) + private EventoResultado ActualizarPonentes(Evento evento, IEnumerable ponentesId, Accion? action) + { + var ponentes = new List(); + if (ponentesId != null) + { + foreach (var ponenteId in ponentesId.Where(id=>id!=Guid.Empty)) + { + var colaborador = _personaRepository.Get(ponenteId); + if (colaborador == null) + return new EventoResultado(false, string.Format("No se encontró el colaborador indicado ({0})", ponenteId), + null); + ponentes.Add(colaborador); + } + evento.ActualizarPonentes(ponentes, action); + } + return new EventoResultado(true, "Ponentes actualizados", null); + } + + public EventoResultado Confirmar(Guid eventoId) { Evento evento = GetEvento(eventoId); diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Domain/Evento.cs --- a/Agendas/trunk/src/Agendas.Domain/Evento.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs Wed Oct 05 07:57:21 2011 -0300 @@ -9,7 +9,7 @@ protected Evento() { _tracks = new List(); - _otrosPonentes = new List(); + _ponentes = new List(); //_patrocinadores = new List(); } @@ -51,7 +51,7 @@ /// /// Ponente o responsable del evento /// - public virtual Persona Ponente { get; private set; } + /// public virtual Persona Ponente { get; private set; } /// /// Track de cambios que ha sufrido el evento @@ -92,28 +92,34 @@ get; set; } - private readonly IList _otrosPonentes; - public virtual IEnumerable OtrosPonentes - { - get { return _otrosPonentes; } - } - + private readonly IList _ponentes; public virtual IEnumerable Ponentes { - get { return Ponente != null ? new List {Ponente}.Union(OtrosPonentes) : OtrosPonentes; } + get { return _ponentes; } } - public virtual void ActualizarOtrosPonentes(IEnumerable otrosPonentes) + public virtual void ActualizarPonentes(IEnumerable ponentes, Accion? action) { - foreach (var otro in otrosPonentes) + bool modificados = false; + + foreach (var ponente in ponentes) { - if (!_otrosPonentes.Contains(otro)) - _otrosPonentes.Add(otro); + if (!_ponentes.Contains(ponente)) + { + _ponentes.Add(ponente); + modificados = true; + } } - var sobran = _otrosPonentes.Where(c => !otrosPonentes.Contains(c)).ToList(); + var sobran = _ponentes.Where(c => !ponentes.Contains(c)).ToList(); foreach (var sobra in sobran) - _otrosPonentes.Remove(sobra); + { + _ponentes.Remove(sobra); + modificados = true; + } + + if (modificados && action.HasValue) + AddTrack(new Track(this, action.Value)); } //protected internal virtual void AddPatrocinador(Patrocinador patrocinador) @@ -139,9 +145,9 @@ /// Url con la invitación realizada por el ponente /// Tipo del evento /// - public static Evento Proponer(string titulo, Persona persona, string urlInvitacion, TipoEvento tipo) + public static Evento Proponer(string titulo, string urlInvitacion, TipoEvento tipo) { - var evento = new Evento { Titulo = titulo, Ponente = persona, UrlInvitacion = urlInvitacion, Tipo = tipo }; + var evento = new Evento { Titulo = titulo, UrlInvitacion = urlInvitacion, Tipo = tipo }; evento.Estado.Promover(evento, Accion.Proponer); return evento; @@ -151,16 +157,15 @@ /// Agenda un evento que no estaba propuesto /// /// Título del evento a agendar - /// Ponente para el evento /// Fecha de realización del evento /// Fecha de termino del evento /// Url con la invitación realizada por el ponente /// Tipo del evento /// - public static Evento Agendar(string titulo, Persona persona, DateTime fechaInicio, DateTime fechaTermino, string urlInvitacion, TipoEvento tipo) + public static Evento Agendar(string titulo, DateTime fechaInicio, DateTime fechaTermino, string urlInvitacion, TipoEvento tipo) { var evento = new Evento { Titulo = titulo, Tipo = tipo }; - evento.Agendar(persona, fechaInicio, fechaTermino, urlInvitacion); + evento.Agendar(fechaInicio, fechaTermino, urlInvitacion); return evento; } @@ -168,22 +173,19 @@ /// /// Agenda el evento actual /// - /// Ponente para el evento /// Fecha de realización del evento /// Fecha de termino del evento /// Url con la invitación realizada por el ponente - public virtual void Agendar(Persona persona, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion) + public virtual void Agendar(DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion) { - Ponente = persona; FechaInicio = fechaInicio; FechaTermino = fechaTermino; UrlInvitacion = urlInvitacion; Estado.Promover(this, Accion.Agendar); } - public virtual void Actualizar(Persona persona, DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion) + public virtual void Actualizar(DateTime? fechaInicio, DateTime? fechaTermino, string urlInvitacion) { - Ponente = persona; FechaInicio = fechaInicio; FechaTermino = fechaTermino; UrlInvitacion = urlInvitacion; diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Google.Test/GCalendarTest.cs --- a/Agendas/trunk/src/Agendas.Google.Test/GCalendarTest.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Google.Test/GCalendarTest.cs Wed Oct 05 07:57:21 2011 -0300 @@ -17,7 +17,7 @@ public void CrearEventoGoogleCalendar() { var gCalendar = new GCalendarAdapter("VAN"); - var ev = Evento.Agendar("Evento Test", null, _fechaEvento, _fechaTermino, "url", TipoEvento.Cafe); + var ev = Evento.Agendar("Evento Test", _fechaEvento, _fechaTermino, "url", TipoEvento.Cafe); string message; var detail = new CafeGEventDetail(); detail.Generate(ev); diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Google.Test/PublicadorTest.cs --- a/Agendas/trunk/src/Agendas.Google.Test/PublicadorTest.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Google.Test/PublicadorTest.cs Wed Oct 05 07:57:21 2011 -0300 @@ -28,7 +28,7 @@ adapter.Verify(ad => ad.CreateEvent(It.IsAny(), out message), Times.Never()); - agenda.Agendar("Agile Patterns", TestsHelper.GetOrCreatePonente("Alejandro Labra"), fechaInicio, + agenda.Agendar("Agile Patterns",new[]{ TestsHelper.GetOrCreatePonente("Alejandro Labra")}, fechaInicio, fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", TipoEvento.Van); adapter.Verify(ad => ad.CreateEvent(It.IsAny(), out message), Times.Once()); @@ -45,7 +45,7 @@ var publicador = new GooglePublicador(adapter.Object); var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository); agenda.Proponer("Agile Patterns", null, null, TipoEvento.Van); - agenda.Agendar("Agile Patterns", TestsHelper.GetOrCreatePonente("Alejandro Labra"), fechaInicio, + agenda.Agendar("Agile Patterns", new[]{ TestsHelper.GetOrCreatePonente("Alejandro Labra")}, fechaInicio, fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", TipoEvento.Van); @@ -85,7 +85,7 @@ var publicador = new GooglePublicador(adapter.Object); var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository); agenda.Proponer("Agile Patterns", null, null, TipoEvento.Cafe); - agenda.Agendar("Agile Patterns", TestsHelper.GetOrCreatePonente("Alejandro Labra"), fechaInicio, + agenda.Agendar("Agile Patterns", new[]{ TestsHelper.GetOrCreatePonente("Alejandro Labra")}, fechaInicio, fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", TipoEvento.Cafe); @@ -125,7 +125,7 @@ var publicador = new GooglePublicador(adapter.Object); var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository); agenda.Proponer("Agile Patterns", null, null, TipoEvento.GrupoEstudio); - agenda.Agendar("Agile Patterns", TestsHelper.GetOrCreatePonente("Alejandro Labra"), fechaInicio, + agenda.Agendar("Agile Patterns", new[]{ TestsHelper.GetOrCreatePonente("Alejandro Labra")}, fechaInicio, fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", TipoEvento.GrupoEstudio); @@ -169,7 +169,7 @@ agenda.Proponer("Agile Patterns", null, null, TipoEvento.Van); adapter.Verify(ad => ad.DeleteEvent(It.IsAny(), It.IsAny(), out message), Times.Never()); - agenda.Agendar("Agile Patterns", TestsHelper.GetOrCreatePonente("Alejandro Labra"), fechaInicio, + agenda.Agendar("Agile Patterns", new[]{ TestsHelper.GetOrCreatePonente("Alejandro Labra")}, fechaInicio, fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", TipoEvento.Van); adapter.Verify(ad => ad.DeleteEvent(It.IsAny(), It.IsAny(), out message), Times.Never()); @@ -190,9 +190,9 @@ var publicador = new GooglePublicador(adapter.Object); var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository); - agenda.Agendar("Identity Providers Públicos y Empresariales", TestsHelper.GetOrCreatePonente("Carlos Peix"), fechaInicio, + agenda.Agendar("Identity Providers Públicos y Empresariales", new[]{ TestsHelper.GetOrCreatePonente("Carlos Peix"),TestsHelper.GetOrCreatePonente("Nelo Pauselli")}, fechaInicio, fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", - TipoEvento.Van, new[] { TestsHelper.GetOrCreatePonente("Nelo Pauselli") }); + TipoEvento.Van); var ev = DefaultEventoRepository.GetActivos()[0]; detail.Generate(ev); @@ -210,7 +210,7 @@ var publicador = new GooglePublicador(adapter.Object); var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository); - agenda.Agendar("Identity Providers Públicos y Empresariales", Guid.Empty, fechaInicio, + agenda.Agendar("Identity Providers Públicos y Empresariales", null, fechaInicio, fechaTermino, "https://groups.google.com/d/topic/altnet-hispano/arYEMsPiAtY/discussion", TipoEvento.Cafe); diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.NHibernate/NhHelper.cs --- a/Agendas/trunk/src/Agendas.NHibernate/NhHelper.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.NHibernate/NhHelper.cs Wed Oct 05 07:57:21 2011 -0300 @@ -35,7 +35,7 @@ orm.Complex(e => e.Estado); - orm.Bag(e=>e.OtrosPonentes); + orm.Bag(e=>e.Ponentes); orm.ManyToMany(); orm.TablePerClass(); diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Repositories.Memory/EventoRepository.cs --- a/Agendas/trunk/src/Agendas.Repositories.Memory/EventoRepository.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Repositories.Memory/EventoRepository.cs Wed Oct 05 07:57:21 2011 -0300 @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using AltNetHispano.Agendas.Domain; using AltNetHispano.Agendas.Domain.Repositories; @@ -15,7 +14,7 @@ public bool ExistePonente(Persona ponente) { - return Objects.Values.Any(ev => ev.Ponente == ponente); + return Objects.Values.Any(ev => ev.Ponentes.Contains(ponente)); } public IList GetByState(EventoState state) diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Repositories.NHibernate/EventoRepository.cs --- a/Agendas/trunk/src/Agendas.Repositories.NHibernate/EventoRepository.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Repositories.NHibernate/EventoRepository.cs Wed Oct 05 07:57:21 2011 -0300 @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; +using System.Linq; using AltNetHispano.Agendas.Domain; using AltNetHispano.Agendas.Domain.Repositories; using NHibernate; +using NHibernate.Linq; namespace AltNetHispano.Agendas.Repositories.NHibernate { @@ -49,7 +51,7 @@ public bool ExistePonente(Persona ponente) { - return Session.QueryOver().Where(ev => ev.Ponente == ponente).RowCount() > 0; + return Session.Query().Where(ev => ev.Ponentes.Contains(ponente)).Any(); } public IList GetByState(EventoState state) diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Repositories.Tests/EventoCrud.cs --- a/Agendas/trunk/src/Agendas.Repositories.Tests/EventoCrud.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Repositories.Tests/EventoCrud.cs Wed Oct 05 07:57:21 2011 -0300 @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using Agendas.Repositories.Tests.Infraestructure; using AltNetHispano.Agendas.Domain; @@ -41,11 +42,9 @@ { using (_requestEmulator.Invoke()) { - var ponente = new Persona("Carlos Blé") {Twitter = "carlosble"}; - _personaRepository.Save(ponente); - var colaboradores = new[] { + new Persona("Carlos Blé") {Twitter = "carlosble"}, new Persona("Alejandro Labra") {Twitter = "alejandrolabra"}, new Persona("Carlos Peix") {Twitter = "carlospeix"} }; @@ -56,8 +55,8 @@ var usuario = new Persona("Nelo") {Twitter = "nelopauselli"}; _personaRepository.Save(usuario); - var evento = Evento.Proponer("TDD - Diseño Basado en Ejemplos", ponente, string.Empty, TipoEvento.Van); - evento.ActualizarOtrosPonentes(colaboradores); + var evento = Evento.Proponer("TDD - Diseño Basado en Ejemplos", string.Empty, TipoEvento.Van); + evento.ActualizarPonentes(colaboradores, null); evento.Tracks.First().LogAdd(new TrackLog(TrackLogPropietario.Twitter, "Mensaje", usuario, true)); @@ -77,16 +76,17 @@ Evento van = _eventoRepository.Get(eventoId); Assert.IsNotNull(van); - Assert.IsNotNull(van.Ponente); - Assert.AreEqual("Carlos Blé", van.Ponente.Nombre); - + Assert.IsNotNull(van.Ponentes); + Assert.IsTrue(van.Ponentes.Any(p => p.Nombre == "Carlos Blé")); + Assert.IsTrue(van.Ponentes.Any(p => p.Nombre == "Alejandro Labra")); + Assert.IsTrue(van.Ponentes.Any(p => p.Nombre == "Carlos Peix")); var track1 = van.Tracks.Where(t => t.Accion == Accion.Proponer).FirstOrDefault(); Assert.IsNotNull(track1); Assert.AreEqual(van, track1.Evento); Assert.AreEqual("TDD - Diseño Basado en Ejemplos", van.Titulo); - Assert.AreEqual(2, van.OtrosPonentes.Count()); + Assert.AreEqual(3, van.Ponentes.Count()); } } @@ -108,7 +108,13 @@ var otroPonente = new Persona("José"); _personaRepository.Save(otroPonente); - van.Actualizar(otroPonente, fechaInicio, fechaTermino, null); + van.Actualizar(fechaInicio, fechaTermino, null); + + var ponentes = new List(van.Ponentes); + ponentes.RemoveAll(p => p.Nombre == "Carlos Blé"); + ponentes.Add(otroPonente); + + van.ActualizarPonentes(ponentes, null); _eventoRepository.Update(van); } @@ -118,8 +124,12 @@ Evento van = _eventoRepository.Get(eventoId); Assert.IsNotNull(van); - Assert.IsNotNull(van.Ponente); - Assert.AreEqual("José", van.Ponente.Nombre); + + Assert.IsFalse(van.Ponentes.Any(p => p.Nombre == "Carlos Blé")); + Assert.IsTrue(van.Ponentes.Any(p => p.Nombre == "Alejandro Labra")); + Assert.IsTrue(van.Ponentes.Any(p => p.Nombre == "Carlos Peix")); + Assert.IsTrue(van.Ponentes.Any(p => p.Nombre == "José")); + Assert.AreEqual("TDD & Ejemplos", van.Titulo); Assert.AreEqual(new DateTime(2010, 04, 17).ToUniversalTime(), van.FechaInicio); Assert.AreEqual(fechaTermino, van.FechaTermino); @@ -170,7 +180,7 @@ Evento evento = _eventoRepository.Get(eventoId); Assert.AreEqual(EventoPropuestoState.GetInstance(), evento.Estado); - evento.Agendar(evento.Ponente, evento.FechaInicio, evento.FechaTermino, null); + evento.Agendar(evento.FechaInicio, evento.FechaTermino, null); } using (_requestEmulator.Invoke()) diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Repositories.Tests/Infraestructure/NhHelperTest.cs --- a/Agendas/trunk/src/Agendas.Repositories.Tests/Infraestructure/NhHelperTest.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Repositories.Tests/Infraestructure/NhHelperTest.cs Wed Oct 05 07:57:21 2011 -0300 @@ -9,7 +9,7 @@ var sf = NhHelper.GetSessionFactory(); var session = sf.OpenStatelessSession(); - session.CreateSQLQuery("DELETE FROM OtrosPonentes").ExecuteUpdate(); + session.CreateSQLQuery("DELETE FROM Ponentes").ExecuteUpdate(); session.CreateSQLQuery("DELETE FROM Evento").ExecuteUpdate(); session.CreateSQLQuery("DELETE FROM Persona").ExecuteUpdate(); } diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Repositories.Tests/TestsHelper.cs --- a/Agendas/trunk/src/Agendas.Repositories.Tests/TestsHelper.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Repositories.Tests/TestsHelper.cs Wed Oct 05 07:57:21 2011 -0300 @@ -1,4 +1,5 @@ using System; +using Agendas.NHibernate; using AltNetHispano.Agendas.Domain; using AltNetHispano.Agendas.Domain.Repositories; @@ -20,6 +21,9 @@ { persona = new Persona(nombre) { Twitter = nombre.Replace(" ", string.Empty).ToLower() }; _repository.Save(persona); + + if (_repository is AltNetHispano.Agendas.Repositories.NHibernate.PersonaRepository) + NhHelper.GetSessionFactory().GetCurrentSession().Flush(); } return persona.Id; } diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Repositories.Tests/Workflow.cs --- a/Agendas/trunk/src/Agendas.Repositories.Tests/Workflow.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Repositories.Tests/Workflow.cs Wed Oct 05 07:57:21 2011 -0300 @@ -28,10 +28,11 @@ { using (_requestEmulator.Invoke()) { - var resultado = _agenda.Proponer("SOLID", _testsHelper.GetOrCreatePonente("Jorge"), null, TipoEvento.Van); + var resultado = _agenda.Proponer("SOLID", new[] {_testsHelper.GetOrCreatePonente("Jorge")}, null, TipoEvento.Van); + Console.WriteLine(resultado.Message); Assert.IsTrue(resultado.Succeful); } - + GetId(); } @@ -42,7 +43,7 @@ { var fechaInicio = DateTime.Today.AddDays(5).ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - var resultado = _agenda.Agendar("SOLID", _testsHelper.GetOrCreatePonente("Jorge"), fechaInicio, fechaTermino, null, + var resultado = _agenda.Agendar("SOLID", new[]{ _testsHelper.GetOrCreatePonente("Jorge")}, fechaInicio, fechaTermino, null, TipoEvento.Van); Assert.IsTrue(resultado.Succeful); } diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Tests/AgendarTests.cs --- a/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/AgendarTests.cs Wed Oct 05 07:57:21 2011 -0300 @@ -35,7 +35,7 @@ var fechaTermino = fechaInicio.AddHours(2); Assert.Throws( () => - agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + agenda.Agendar("Van para publicar", new[]{ TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van)); Assert.AreEqual(0, agenda.GetEventosActivos().Count); @@ -57,7 +57,7 @@ var fechaTermino = fechaInicio.AddHours(2); Assert.Throws( () => - agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + agenda.Agendar("Van para publicar", new[]{ TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van)); repository.Verify(p => p.Save(It.IsAny()), Times.Exactly(0)); } @@ -76,7 +76,7 @@ var fechaTermino = fechaInicio.AddHours(2); Assert.Throws( () => - agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + agenda.Agendar("Van para publicar", new[]{ TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van)); publicador.Verify(p => p.Publicar(It.IsAny>()), Times.Exactly(0)); @@ -84,13 +84,26 @@ } [Test] - public void Intentar_agendar_van_sin_ponente() + public void Intentar_agendar_van_sin_ponentes_null() { var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository); var fechaInicio = DateTime.Now.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - var r = agenda.Agendar("Van para publicar", Guid.Empty, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); + var r = agenda.Agendar("Van para publicar", null, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); + + Assert.IsFalse(r.Succeful); + } + + [Test] + public void Intentar_agendar_van_sin_ponentes_empty() + { + var agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository); + + var fechaInicio = DateTime.Now.ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + var r = agenda.Agendar("Van para publicar", new[] {Guid.Empty}, fechaInicio, fechaTermino, urlInvitacion, + TipoEvento.Van); Assert.IsFalse(r.Succeful); } @@ -102,8 +115,9 @@ var fechaInicio = DateTime.Now.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - var r = agenda.Agendar("Cafe para publicar", Guid.Empty, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Cafe); + var r = agenda.Agendar("Cafe para publicar", new[] { Guid.Empty }, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Cafe); + Console.WriteLine(r.Message); Assert.IsTrue(r.Succeful); } @@ -114,7 +128,7 @@ var fechaInicio = DateTime.Now.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - var r = agenda.Agendar("GrupoEstudio para publicar", Guid.Empty, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.GrupoEstudio); + var r = agenda.Agendar("GrupoEstudio para publicar", new[] { Guid.Empty }, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.GrupoEstudio); Assert.IsTrue(r.Succeful); } @@ -132,7 +146,7 @@ var fechaInicio = DateTime.Now.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + agenda.Agendar("Van para publicar", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); publicador1.Verify(p => p.Publicar(It.IsAny>()), Times.Exactly(1)); @@ -149,7 +163,7 @@ var fechaInicio = DateTime.Now.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + agenda.Agendar("Van para publicar",new[]{ TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); Assert.AreEqual(0, agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).Count); @@ -171,7 +185,9 @@ var fechaInicio = DateTime.Now.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Identity Providers, oAuth y Autenticaciones on-line", TestsHelper.GetOrCreatePonente("carlospeix"), fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van, new[] {TestsHelper.GetOrCreatePonente("nelopauselli")}); + agenda.Agendar("Identity Providers, oAuth y Autenticaciones on-line", + new[] {TestsHelper.GetOrCreatePonente("Carlos Peix"), TestsHelper.GetOrCreatePonente("Nelo Pauselli")}, + fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); Assert.AreEqual(0, agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).Count); @@ -180,13 +196,11 @@ var evento = eventos[0]; - Assert.IsNotNull(evento.Ponente); - Assert.AreEqual("carlospeix", evento.Ponente.Twitter); + var carlos = evento.Ponentes.Single(p => p.Twitter == "carlospeix"); + Assert.AreEqual("Carlos Peix", carlos.Nombre); - Assert.IsNotNull(evento.OtrosPonentes); - Assert.AreEqual(1, evento.OtrosPonentes.Count()); - var colaborador = evento.OtrosPonentes.First(); - Assert.AreEqual("nelopauselli", colaborador.Twitter); + var nelo = evento.Ponentes.Single(p => p.Twitter == "nelopauselli"); + Assert.AreEqual("Nelo Pauselli", nelo.Nombre); } [Test] @@ -199,9 +213,7 @@ var fechaInicioVanPublicar = DateTime.Now.ToUniversalTime(); var fechaTerminoVanPublicar = fechaInicioVanPublicar.AddHours(2); - agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicioVanPublicar, - fechaTerminoVanPublicar, - urlInvitacion, TipoEvento.Van); + agenda.Agendar("Van para publicar", new[] {TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicioVanPublicar, fechaTerminoVanPublicar, urlInvitacion, TipoEvento.Van); publicador.Verify(p => p.Publicar(It.IsAny>()), Times.Exactly(1)); @@ -211,20 +223,20 @@ var fechaInicio = evento.FechaInicio.Value.AddDays(7); var fechaTermino = fechaInicio.AddHours(2); - agenda.ModificarEvento(evento.Id, "otro titulo", TestsHelper.GetOrCreatePonente("otro ponente"), fechaInicio, + agenda.ModificarEvento(evento.Id, "otro titulo", new[]{TestsHelper.GetOrCreatePonente("otro ponente")}, fechaInicio, fechaTermino, urlInvitacion); publicador.Verify(p => p.Publicar(It.IsAny>()), Times.Exactly(2)); evento = repository.GetActivos().First(); Assert.AreEqual("otro titulo", evento.Titulo); - Assert.AreEqual("otro ponente", evento.Ponente.Nombre); + Assert.IsTrue(evento.Ponentes.Any(p=>p.Nombre=="otro ponente")); Assert.AreEqual(fechaInicio, evento.FechaInicio); var idEventoNoExistente = new Guid("99999999999999999999999999999999"); Assert.Throws( () => - agenda.ModificarEvento(idEventoNoExistente, "algún título", TestsHelper.GetOrCreatePonente("un ponente"), + agenda.ModificarEvento(idEventoNoExistente, "algún título",new[]{ TestsHelper.GetOrCreatePonente("un ponente")}, DateTime.Now, DateTime.Now.AddHours(2), urlInvitacion)); } @@ -239,7 +251,7 @@ var fechaInicio = DateTime.Now.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + agenda.Agendar("Van para publicar", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); var van = agenda.GetEventosActivos().Single(v => v.Titulo == "Van para publicar"); @@ -259,7 +271,7 @@ var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), DefaultEventoRepository, DefaultPersonaRepository); - agenda.Proponer("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), urlInvitacion, TipoEvento.Van); + agenda.Proponer("Html 5", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, urlInvitacion, TipoEvento.Van); Assert.AreEqual(1, agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).Count); Assert.AreEqual(1, agenda.GetEventosActivos().Count); @@ -268,7 +280,7 @@ var fechaInicio = DateTime.Today.AddDays(5).ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - agenda.ModificarEvento(publicado.Id, "Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, + agenda.ModificarEvento(publicado.Id, "Html 5", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion); Assert.AreEqual(0, agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).Count); Assert.AreEqual(1, agenda.GetEventosActivos(EventoAgendadoState.GetInstance()).Count); @@ -288,7 +300,7 @@ var publicador1 = new Mock(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); - agenda.Proponer("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), urlInvitacion, TipoEvento.Van); + agenda.Proponer("Html 5", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetByState(EventoPropuestoState.GetInstance()).Single(e => e.Titulo == "Html 5"); @@ -305,7 +317,7 @@ var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); var fechaInicio = DateTime.MinValue.ToUniversalTime(); var fechatermino = fechaInicio.AddHours(2); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechatermino, urlInvitacion, + agenda.Agendar("Html 5", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechatermino, urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); @@ -322,7 +334,7 @@ var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); var fechaInicio = DateTime.MinValue.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + agenda.Agendar("Html 5", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); @@ -342,7 +354,7 @@ var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); var fechaInicio = DateTime.MinValue.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + agenda.Agendar("Html 5", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); @@ -363,7 +375,7 @@ var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); var fechaInicio = DateTime.MinValue.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + agenda.Agendar("Html 5", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); @@ -384,7 +396,7 @@ var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); var fechaInicio = DateTime.MinValue.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, urlInvitacion, + agenda.Agendar("Html 5", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); @@ -406,7 +418,7 @@ var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); var fechaInicio = DateTime.MinValue.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, urlInvitacion, + agenda.Agendar("Html 5", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); @@ -426,7 +438,7 @@ var publicador1 = new Mock(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); - agenda.Proponer("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), urlInvitacion, TipoEvento.Van); + agenda.Proponer("Html 5", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetByState(EventoPropuestoState.GetInstance()).Single(e => e.Titulo == "Html 5"); @@ -445,7 +457,7 @@ var publicador1 = new Mock(); var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); - agenda.Proponer("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), urlInvitacion, TipoEvento.Van); + agenda.Proponer("Html 5", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetByState(EventoPropuestoState.GetInstance()).Single(e => e.Titulo == "Html 5"); @@ -463,7 +475,7 @@ var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); var fechaInicio = DateTime.MinValue.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + agenda.Agendar("Html 5", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); @@ -484,7 +496,7 @@ var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); var fechaInicio = DateTime.MinValue.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + agenda.Agendar("Html 5", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); @@ -503,7 +515,7 @@ var agenda = new Agenda(publicador1.Object, DefaultEventoRepository, DefaultPersonaRepository); var fechaInicio = DateTime.MinValue.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, urlInvitacion, + agenda.Agendar("Html 5", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); var evento = DefaultEventoRepository.GetActivos().Single(e => e.Titulo == "Html 5"); @@ -521,20 +533,20 @@ var fechaInicio = new DateTime(2011, 7, 1, 18, 00, 00); var fechaTermino = fechaInicio.AddHours(2); - var r = agenda.Agendar("Conceptos de HTTP y Fiddler web debugger", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, + var r = agenda.Agendar("Conceptos de HTTP y Fiddler web debugger", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, string.Empty, TipoEvento.Van); Assert.IsTrue(r.Succeful); fechaInicio = new DateTime(2011, 7, 1, 05, 00, 00); fechaTermino = fechaInicio.AddHours(2); r = agenda.Agendar("Una primer van que NO se superpone", - TestsHelper.GetOrCreatePonente("jjmontes"), + new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, string.Empty, TipoEvento.Van); Assert.IsTrue(r.Succeful); r = agenda.Agendar("Otra van que se superpone", - TestsHelper.GetOrCreatePonente("jjmontes"), + new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, string.Empty, TipoEvento.Van); Assert.IsFalse(r.Succeful); @@ -542,7 +554,7 @@ fechaInicio = new DateTime(2011, 7, 1, 17, 00, 00); fechaTermino = fechaInicio.AddHours(2); r = agenda.Agendar("Otra van que se superpone", - TestsHelper.GetOrCreatePonente("jjmontes"), + new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, string.Empty, TipoEvento.Van); Assert.IsFalse(r.Succeful); @@ -550,7 +562,7 @@ fechaInicio = new DateTime(2011, 7, 1, 19, 00, 00); fechaTermino = fechaInicio.AddHours(2); r = agenda.Agendar("Otra van que se superpone", - TestsHelper.GetOrCreatePonente("jjmontes"), + new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, string.Empty, TipoEvento.Van); Assert.IsFalse(r.Succeful); @@ -558,7 +570,7 @@ fechaInicio = new DateTime(2011, 7, 1, 21, 00, 00); fechaTermino = fechaInicio.AddHours(2); r = agenda.Agendar("Una segunda van que NO se superpone", - TestsHelper.GetOrCreatePonente("jjmontes"), + new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, string.Empty, TipoEvento.Van); Assert.IsTrue(r.Succeful); @@ -572,16 +584,16 @@ var fechaInicio = new DateTime(2011, 7, 1, 18, 00, 00); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Conceptos de HTTP y Fiddler web debugger", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, + agenda.Agendar("Conceptos de HTTP y Fiddler web debugger", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, string.Empty, TipoEvento.Van); - agenda.Proponer("Otra van que se superpone", TestsHelper.GetOrCreatePonente("jjmontes"), string.Empty, TipoEvento.Van); + agenda.Proponer("Otra van que se superpone", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, string.Empty, TipoEvento.Van); var eventoPropuesto = DefaultEventoRepository.GetPropuestaByTitulo("Otra van que se superpone"); Assert.IsNotNull(eventoPropuesto); Assert.IsNull(eventoPropuesto.FechaInicio); Assert.IsNull(eventoPropuesto.FechaTermino); var r = agenda.Agendar("Otra van que se superpone", - TestsHelper.GetOrCreatePonente("jjmontes"), + new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, string.Empty, TipoEvento.Van); Assert.IsFalse(r.Succeful); @@ -599,14 +611,14 @@ var fechaInicio = new DateTime(2011, 8, 20, 18, 00, 00); var fechaTermino = fechaInicio.AddHours(2); - var r = agenda.Agendar("Conceptos de HTTP y Fiddler web debugger", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, + var r = agenda.Agendar("Conceptos de HTTP y Fiddler web debugger", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, string.Empty, TipoEvento.Van); Assert.IsTrue(r.Succeful); fechaInicio = new DateTime(2011, 8, 27, 05, 00, 00); fechaTermino = fechaInicio.AddHours(2); r = agenda.Agendar("Conceptos de HTTP y Fiddler web debugger", - TestsHelper.GetOrCreatePonente("alabra"), + new[]{TestsHelper.GetOrCreatePonente("alabra")}, fechaInicio, fechaTermino, string.Empty, TipoEvento.Van); diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs --- a/Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PersonaServiceTests.cs Wed Oct 05 07:57:21 2011 -0300 @@ -200,7 +200,7 @@ var fechaInicio = DateTime.Now.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Van para publicar", TestsHelper.GetOrCreatePonente("alabra"), fechaInicio, fechaTermino, + agenda.Agendar("Van para publicar", new[]{TestsHelper.GetOrCreatePonente("alabra")}, fechaInicio, fechaTermino, "http://groups.google.com/group/altnet-hispano/browse_thread/thread/65d6d26eb381386e", TipoEvento.Van); Assert.AreEqual(0, agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).Count); @@ -209,9 +209,11 @@ Assert.AreEqual(1, eventos.Count); var evento = eventos[0]; - Assert.IsNotNull(evento.Ponente); - var delete = personaService.Delete(evento.Ponente.Id); + var ponente = evento.Ponentes.FirstOrDefault(); + Assert.IsNotNull(ponente); + + var delete = personaService.Delete(ponente.Id); Assert.IsFalse(delete.Succeful); } } diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Tests/PonentesTests.cs --- a/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PonentesTests.cs Wed Oct 05 07:57:21 2011 -0300 @@ -22,12 +22,12 @@ var fechaInicioNHibernate = new DateTime(2011, 2, 26, 18, 0, 0, DateTimeKind.Utc); var fechaTerminoNHibernate = fechaInicioNHibernate.AddHours(2); - agenda.Agendar("Audit (parallel model) con NHibernate 3", TestsHelper.GetOrCreatePonente("Fabio Maulo"), + agenda.Agendar("Audit (parallel model) con NHibernate 3", new[]{TestsHelper.GetOrCreatePonente("Fabio Maulo")}, fechaInicioNHibernate, fechaTerminoNHibernate, urlInvitacion, TipoEvento.Van); var fechaInicioConform = new DateTime(2011, 3, 5, 18, 0, 0, DateTimeKind.Utc); var fechaTerminoConform = fechaInicioNHibernate.AddHours(2); - agenda.Agendar("Conform - Parte 2", TestsHelper.GetOrCreatePonente("Fabio Maulo"), fechaInicioConform, + agenda.Agendar("Conform - Parte 2", new[]{TestsHelper.GetOrCreatePonente("Fabio Maulo")}, fechaInicioConform, fechaTerminoConform, urlInvitacion, TipoEvento.Van); var eventos = agenda.GetEventosActivos(); @@ -39,7 +39,8 @@ var evento = eventos[0]; - Assert.IsNotNull(evento.Ponente); + Assert.IsNotNull(evento.Ponentes); + Assert.AreEqual(1, evento.Ponentes.Count()); } [Test] @@ -55,7 +56,7 @@ agenda.RegistrarPonente("Fabio Maulo", "fabiomaulo@gmail.com", "@fabiomaulo", "http://fabiomaulo.blogspot.com"); var fechaInicio = new DateTime(2011, 2, 26, 18, 0, 0, DateTimeKind.Utc); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Audit (parallel model) con NHibernate 3", TestsHelper.GetOrCreatePonente("Fabio Maulo"), + agenda.Agendar("Audit (parallel model) con NHibernate 3", new[]{TestsHelper.GetOrCreatePonente("Fabio Maulo")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); Assert.AreEqual(1, agenda.GetEventosActivos().Count); @@ -63,10 +64,11 @@ publicador.Verify(p => p.Publicar(It.IsAny>()), Times.Exactly(1)); Assert.IsNotNull(evento); - Assert.AreEqual("Fabio Maulo", evento.Ponente.Nombre); - Assert.AreEqual("fabiomaulo@gmail.com", evento.Ponente.Mail); - Assert.AreEqual("@fabiomaulo", evento.Ponente.Twitter); - Assert.AreEqual("http://fabiomaulo.blogspot.com", evento.Ponente.Blog); + var ponente = evento.Ponentes.First(); + Assert.AreEqual("Fabio Maulo", ponente.Nombre); + Assert.AreEqual("fabiomaulo@gmail.com", ponente.Mail); + Assert.AreEqual("@fabiomaulo", ponente.Twitter); + Assert.AreEqual("http://fabiomaulo.blogspot.com", ponente.Blog); } [Test] @@ -81,7 +83,7 @@ var fechaInicio = new DateTime(2011, 2, 26, 18, 0, 0, DateTimeKind.Utc); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Audit (parallel model) con NHibernate 3", TestsHelper.GetOrCreatePonente("Fabio Maulo"), + agenda.Agendar("Audit (parallel model) con NHibernate 3", new[]{TestsHelper.GetOrCreatePonente("Fabio Maulo")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); Assert.AreEqual(1, agenda.GetEventosActivos().Count); @@ -89,8 +91,9 @@ publicador.Verify(p => p.Publicar(It.IsAny>()), Times.Exactly(1)); Assert.IsNotNull(evento); - Assert.AreEqual("Fabio Maulo", evento.Ponente.Nombre); - Assert.AreEqual("fabiomaulo", evento.Ponente.Twitter); + var ponente = evento.Ponentes.First(); + Assert.AreEqual("Fabio Maulo", ponente.Nombre); + Assert.AreEqual("fabiomaulo", ponente.Twitter); } [Test] @@ -103,7 +106,7 @@ DateTime fechaInicio=DateTime.Now; - var r = agenda.Agendar(titulo, TestsHelper.GetOrCreatePonente("Fabio"), fechaInicio, fechaInicio.AddHours(2), urlInvitacion, TipoEvento.Van); + var r = agenda.Agendar(titulo, new[]{TestsHelper.GetOrCreatePonente("Fabio")}, fechaInicio, fechaInicio.AddHours(2), urlInvitacion, TipoEvento.Van); { Assert.IsTrue(r.Succeful); @@ -111,12 +114,13 @@ Assert.AreEqual(1, eventos.Count); Evento evento = eventos[0]; - Assert.AreEqual("Fabio", evento.Ponente.Nombre); + var ponente = evento.Ponentes.First(); + Assert.AreEqual("Fabio", ponente.Nombre); eventoId = evento.Id; } - r = agenda.ModificarEvento(eventoId, titulo, Guid.Empty, fechaInicio, fechaInicio.AddHours(2), urlInvitacion); + r = agenda.ModificarEvento(eventoId, titulo, new[]{Guid.Empty}, fechaInicio, fechaInicio.AddHours(2), urlInvitacion); Assert.IsFalse(r.Succeful); } @@ -131,7 +135,7 @@ DateTime fechaInicio = DateTime.Now; - var r = agenda.Agendar(titulo, TestsHelper.GetOrCreatePonente("Fabio"), fechaInicio, fechaInicio.AddHours(2), urlInvitacion, TipoEvento.Cafe); + var r = agenda.Agendar(titulo, new[]{TestsHelper.GetOrCreatePonente("Fabio")}, fechaInicio, fechaInicio.AddHours(2), urlInvitacion, TipoEvento.Cafe); { Assert.IsTrue(r.Succeful); @@ -139,12 +143,13 @@ Assert.AreEqual(1, eventos.Count); Evento evento = eventos[0]; - Assert.AreEqual("Fabio", evento.Ponente.Nombre); + var ponente = evento.Ponentes.First(); + Assert.AreEqual("Fabio", ponente.Nombre); eventoId = evento.Id; } - r = agenda.ModificarEvento(eventoId, titulo, Guid.Empty, fechaInicio, fechaInicio.AddHours(2), urlInvitacion); + r = agenda.ModificarEvento(eventoId, titulo, new[]{Guid.Empty}, fechaInicio, fechaInicio.AddHours(2), urlInvitacion); { Console.WriteLine(r.Message); Assert.IsTrue(r.Succeful); @@ -153,7 +158,7 @@ Assert.AreEqual(1, eventos.Count); Evento evento = eventos[0]; - Assert.IsNull(evento.Ponente); + Assert.AreEqual(0, evento.Ponentes.Count()); } } @@ -165,25 +170,25 @@ const string titulo = "Audit (parallel model) con NHibernate 3"; Guid eventoId; - agenda.Proponer(titulo, TestsHelper.GetOrCreatePonente("Fabio"), urlInvitacion, TipoEvento.Van); + agenda.Proponer(titulo, new[]{TestsHelper.GetOrCreatePonente("Fabio")}, urlInvitacion, TipoEvento.Van); { var eventos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()); Assert.AreEqual(1, eventos.Count); Evento evento = eventos[0]; - Assert.AreEqual("Fabio", evento.Ponente.Nombre); + Assert.IsTrue(evento.Ponentes.Any(p => p.Nombre == "Fabio")); eventoId = evento.Id; } - agenda.ModificarPropuesta(eventoId, titulo, TestsHelper.GetOrCreatePonente("José"), urlInvitacion); + agenda.ModificarPropuesta(eventoId, titulo, new[]{TestsHelper.GetOrCreatePonente("José")}, urlInvitacion); { var eventos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()); Assert.AreEqual(1, eventos.Count); Evento evento = eventos[0]; - Assert.IsNotNull(evento.Ponente); - } + Assert.IsTrue(evento.Ponentes.Any(p => p.Nombre == "José")); + } } } } \ No newline at end of file diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs --- a/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/PropuestasTests.cs Wed Oct 05 07:57:21 2011 -0300 @@ -28,19 +28,21 @@ Assert.AreEqual(0, eventosAgendados.Count); var evento = eventosPropuestos.FirstOrDefault(); - agenda.ModificarPropuesta(evento.Id, "Van 2", TestsHelper.GetOrCreatePonente("otro ponente"), urlInvitacion); + agenda.ModificarPropuesta(evento.Id, "Van 2", new[]{TestsHelper.GetOrCreatePonente("otro ponente")}, urlInvitacion); eventosPropuestos = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()); Assert.AreEqual(1, eventosPropuestos.Count); evento = eventosPropuestos.FirstOrDefault(); Assert.AreEqual("Van 2", evento.Titulo); - Assert.AreEqual("otro ponente", evento.Ponente.Nombre); + + var ponente = evento.Ponentes.First(); + Assert.AreEqual("otro ponente", ponente.Nombre); } var fechaInicio = DateTime.Now.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - var r = agenda.Agendar("Van 2", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + var r = agenda.Agendar("Van 2", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); Assert.IsTrue(r.Succeful); { @@ -64,11 +66,11 @@ { var van = agenda.GetEventosActivos(EventoPropuestoState.GetInstance()).FirstOrDefault(); Assert.IsNotNull(van); - var r = agenda.Agendar(van.Titulo, TestsHelper.GetOrCreatePonente("Ponente"), null, null, + var r = agenda.Agendar(van.Titulo,new[]{ TestsHelper.GetOrCreatePonente("Ponente")}, null, null, urlInvitacion, TipoEvento.Van); Assert.IsFalse(r.Succeful); - r = agenda.Agendar(van.Titulo, TestsHelper.GetOrCreatePonente("Ponente"), DateTime.MinValue, null, + r = agenda.Agendar(van.Titulo, new[]{TestsHelper.GetOrCreatePonente("Ponente")}, DateTime.MinValue, null, urlInvitacion, TipoEvento.Van); Assert.IsFalse(r.Succeful); } @@ -89,8 +91,8 @@ var fechaInicio = DateTime.Today.AddDays(5).ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - van.Actualizar(null, fechaInicio, fechaTermino, urlInvitacion); - var r = agenda.Agendar(van.Titulo, Guid.Empty, van.FechaInicio, van.FechaTermino, + van.Actualizar(fechaInicio, fechaTermino, urlInvitacion); + var r = agenda.Agendar(van.Titulo, new[]{Guid.Empty}, van.FechaInicio, van.FechaTermino, urlInvitacion, TipoEvento.Van); Assert.IsFalse(r.Succeful); } @@ -149,7 +151,7 @@ agenda.Proponer("Van propuesta", null, urlInvitacion, TipoEvento.Van); var fechaInicio = DateTime.Now.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - var r = agenda.Agendar("Van publicada", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + var r = agenda.Agendar("Van publicada", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); Assert.IsTrue(r.Succeful); diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Tests/TrackTests.cs --- a/Agendas/trunk/src/Agendas.Tests/TrackTests.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/TrackTests.cs Wed Oct 05 07:57:21 2011 -0300 @@ -19,7 +19,7 @@ var fechaInicio = DateTime.Now.AddDays(5).ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); + agenda.Agendar("Html 5", new[]{TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); var evento = repository.GetActivos().First(); Assert.AreEqual(1, evento.Tracks.Count()); @@ -29,7 +29,10 @@ Assert.IsNotNull(ultimo.Usuario); Assert.AreEqual("Nelo Pauselli", ultimo.Usuario.Nombre); - agenda.ModificarEvento(evento.Id, "Html 5", TestsHelper.GetOrCreatePonente("otro ponente"), fechaInicio, fechaTermino, urlInvitacion); + var r = agenda.ModificarEvento(evento.Id, "Html 5", new[]{TestsHelper.GetOrCreatePonente("otro ponente")}, fechaInicio, fechaTermino, urlInvitacion); + Console.WriteLine(r.Message); + Assert.IsTrue(r.Succeful); + Assert.AreEqual(2, evento.Tracks.Count()); ultimo = evento.Tracks.Last(); Assert.AreEqual(evento, ultimo.Evento); @@ -37,7 +40,7 @@ Assert.IsNotNull(ultimo.Usuario); Assert.AreEqual("Nelo Pauselli", ultimo.Usuario.Nombre); - agenda.ModificarEvento(evento.Id, "Html 5 y Css 3", TestsHelper.GetOrCreatePonente("otro ponente"), fechaInicio, fechaTermino, urlInvitacion); + agenda.ModificarEvento(evento.Id, "Html 5 y Css 3", new[]{TestsHelper.GetOrCreatePonente("otro ponente")}, fechaInicio, fechaTermino, urlInvitacion); Assert.AreEqual(3, evento.Tracks.Count()); ultimo = evento.Tracks.Last(); Assert.AreEqual(evento, ultimo.Evento); @@ -55,7 +58,7 @@ var fechaInicio = DateTime.Now.ToUniversalTime(); var fechaTermino = fechaInicio.AddHours(2); - agenda.Agendar("Html 5", TestsHelper.GetOrCreatePonente("jjmontes"), fechaInicio, fechaTermino, + agenda.Agendar("Html 5",new[]{ TestsHelper.GetOrCreatePonente("jjmontes")}, fechaInicio, fechaTermino, urlInvitacion, TipoEvento.Van); var evento = repository.GetActivos().First(); diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Twitter.Tests/Publicador_tests.cs --- a/Agendas/trunk/src/Agendas.Twitter.Tests/Publicador_tests.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Twitter.Tests/Publicador_tests.cs Wed Oct 05 07:57:21 2011 -0300 @@ -50,7 +50,7 @@ adapter.Verify(a => a.Update(It.IsAny(), out message), Times.Once()); - agenda.Agendar("Identity Providers", TestsHelper.GetOrCreatePonente("Nelo Pauselli"), fechaInicio, fechaTermino, + agenda.Agendar("Identity Providers", new[]{TestsHelper.GetOrCreatePonente("Nelo Pauselli")}, fechaInicio, fechaTermino, null, TipoEvento.GrupoEstudio); adapter.Verify(a => a.Update(It.IsAny(), out message), Times.Exactly(2)); @@ -71,17 +71,19 @@ var publicador = new TwitterPublicador(adapter.Object); var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository); - var ponente = new Persona("Carlos Peix", "carlospeix@gmail.com", "carlospeix", "http://www.carlospeix.com.ar"); - DefaultPersonaRepository.Save(ponente); + var ponentes = new[] + { + new Persona("Carlos Peix", "carlospeix@gmail.com", "carlospeix", "http://www.carlospeix.com.ar"), + new Persona("Nelo Pauselli", "nelopauselli@gmail.com", "nelopauselli", + "http://nelopauselli.blogspot.com/") + }; - var otrosPonentes = new Persona("Nelo Pauselli", "nelopauselli@gmail.com", "nelopauselli", - "http://nelopauselli.blogspot.com/"); - DefaultPersonaRepository.Save(otrosPonentes); + foreach (var ponente in ponentes) + DefaultPersonaRepository.Save(ponente); - var inicio = DateTime.Now.AddDays(3); + var inicio = new DateTime(2011, 10, 1); - agenda.Agendar("Identity Providers Públicos y Empresariales", ponente.Id, inicio, inicio.AddHours(2), null, TipoEvento.Van, - new[] {otrosPonentes.Id}); + agenda.Agendar("Identity Providers Públicos y Empresariales", ponentes.Select(p=>p.Id), inicio, inicio.AddHours(2), null, TipoEvento.Van); Assert.IsTrue(twitters.Any()); var joined = string.Empty; @@ -115,9 +117,9 @@ var publicador = new TwitterPublicador(adapter.Object); var agenda = new Agenda(publicador, DefaultEventoRepository, DefaultPersonaRepository); - var inicio = DateTime.Now.AddDays(3); + var inicio = new DateTime(2011, 10, 1); - agenda.Agendar("Identity Providers Públicos y Empresariales", Guid.Empty, inicio, inicio.AddHours(2), null, TipoEvento.Cafe); + agenda.Agendar("Identity Providers Públicos y Empresariales",new[]{ Guid.Empty}, inicio, inicio.AddHours(2), null, TipoEvento.Cafe); Assert.IsTrue(twitters.Any()); var joined = string.Empty; diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Twitter.Tests/Recordatorios_tests.cs --- a/Agendas/trunk/src/Agendas.Twitter.Tests/Recordatorios_tests.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Twitter.Tests/Recordatorios_tests.cs Wed Oct 05 07:57:21 2011 -0300 @@ -20,7 +20,7 @@ DefaultPersonaRepository.Save(ponente); DateTime inicio=DateTime.Today.AddDays(7).AddHours(18); - var resultado = agenda.Agendar("Node.js", ponente.Id, inicio, inicio.AddHours(2), string.Empty, TipoEvento.Van); + var resultado = agenda.Agendar("Node.js", new[]{ponente.Id}, inicio, inicio.AddHours(2), string.Empty, TipoEvento.Van); Assert.IsTrue(resultado.Succeful); diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Web.Tests/Agendas.Web.Tests.csproj diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Web.Tests/Controllers/EventoControllerTests.cs --- a/Agendas/trunk/src/Agendas.Web.Tests/Controllers/EventoControllerTests.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web.Tests/Controllers/EventoControllerTests.cs Wed Oct 05 07:57:21 2011 -0300 @@ -13,38 +13,38 @@ namespace Agendas.Web.Tests.Controllers { - [TestFixture] - public class EventoControllerTests - { - [SetUp] - public void SetearUsuario() - { - var seguridad = new Mock(); - seguridad.Setup(s => s.GetUserName()).Returns("neluz"); - IdentityContext.Init(seguridad.Object, new PersonaRepository(NhHelper.GetSessionFactory())); + [TestFixture] + public class EventoControllerTests + { + [SetUp] + public void SetearUsuario() + { + var seguridad = new Mock(); + seguridad.Setup(s => s.GetUserName()).Returns("neluz"); + IdentityContext.Init(seguridad.Object, new PersonaRepository(NhHelper.GetSessionFactory())); - } + } - [Test] - //[Ignore] - public void Publicar_Evento() - { - var eventoController = new EventoController(); + [Test] + [Ignore] + public void Publicar_Evento() + { + var eventoController = new EventoController(); - var eventoNew = new EventoNewModel - { - Duracion = new TimeSpan(0, 0, 0), - Fecha = DateTime.Today.AddDays(5), - Hora = new TimeSpan(18, 0, 0), - //Ponentes = new[] { Guid.NewGuid() }, - TipoEvento = (int)TipoEvento.Van, - Titulo = "Título 1" - }; + var eventoNew = new EventoNewModel + { + Duracion = new TimeSpan(0, 0, 0), + Fecha = DateTime.Today.AddDays(5), + Hora = new TimeSpan(18, 0, 0), + Ponentes = new[] {Guid.NewGuid()}, + TipoEvento = (int) TipoEvento.Van, + Titulo = "Título 1" + }; - using (new RequestEmulator(NhHelper.GetSessionFactory())) - { - var resultNuevo = eventoController.Nuevo(eventoNew); - } + using (new RequestEmulator(NhHelper.GetSessionFactory())) + { + var resultNuevo = eventoController.Nuevo(eventoNew); + } var eventoPublicar = new EventoPublicarModel { @@ -61,4 +61,4 @@ } } -} +} \ No newline at end of file diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj --- a/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Agendas.Web.csproj Wed Oct 05 07:57:21 2011 -0300 @@ -217,9 +217,6 @@ - - - @@ -247,7 +244,7 @@ - + diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs --- a/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Controllers/EventoController.cs Wed Oct 05 07:57:21 2011 -0300 @@ -59,9 +59,9 @@ { return GenericAction( - (agenda, m) => agenda.Agendar(m.Titulo, m.Ponente, GenerarFechaInicio(m.Fecha, m.Hora), + (agenda, m) => agenda.Agendar(m.Titulo, model.Ponentes, GenerarFechaInicio(m.Fecha, m.Hora), GenerarFechaTermino(m.Fecha, m.Hora, m.Duracion), m.UrlInvitacion, - (TipoEvento) m.TipoEvento, model.OtrosPonentes), + (TipoEvento) m.TipoEvento), m => View("Defaulteditor", m), model); } @@ -130,7 +130,7 @@ { Id = id, Titulo = evento.Titulo, - Ponente = evento.Ponente != null ? evento.Ponente.Id : Guid.Empty, + Ponentes = evento.Ponentes.Select(p=>p.Id), Fecha = evento.FechaInicio, Hora = evento.FechaInicio != null ? evento.FechaInicio.Value.TimeOfDay : (TimeSpan?)null, Duracion = evento.FechaInicio!=null && evento.FechaTermino!=null ? evento.FechaTermino.Value.Subtract(evento.FechaInicio.Value) : (TimeSpan?) null, @@ -146,7 +146,7 @@ return GenericAction( (agenda, m) => - agenda.ModificarEvento(new Guid(m.Id), m.Titulo, m.Ponente, GenerarFechaInicio(m.Fecha, m.Hora), + agenda.ModificarEvento(new Guid(m.Id), m.Titulo, m.Ponentes, GenerarFechaInicio(m.Fecha, m.Hora), GenerarFechaTermino(m.Fecha, m.Hora, m.Duracion), m.UrlInvitacion), m => View("Defaulteditor", m), model); @@ -162,7 +162,7 @@ { Id = id, Titulo = evento.Titulo, - Ponente = evento.Ponente != null ? evento.Ponente.Id : Guid.Empty, + Ponentes = evento.Ponentes.Select(p=>p.Id), Fecha = evento.FechaInicio, Hora = evento.FechaInicio != null ? evento.FechaInicio.Value.TimeOfDay : (TimeSpan?)null, Duracion = evento.FechaInicio != null && evento.FechaTermino != null ? evento.FechaTermino.Value.Subtract(evento.FechaInicio.Value) : (TimeSpan?)null, @@ -178,7 +178,7 @@ return GenericAction( (agenda, m) => - agenda.ModificarEvento(new Guid(m.Id), m.Titulo, m.Ponente, GenerarFechaInicio(m.Fecha, m.Hora), + agenda.ModificarEvento(new Guid(m.Id), m.Titulo, m.Ponentes, GenerarFechaInicio(m.Fecha, m.Hora), GenerarFechaTermino(m.Fecha, m.Hora, m.Duracion), m.UrlInvitacion), m => View("Defaulteditor", m), model); @@ -197,7 +197,7 @@ { return GenericAction( - (agenda, m) => agenda.Proponer(m.Titulo, m.Ponente, m.UrlInvitacion, (TipoEvento)m.TipoEvento), + (agenda, m) => agenda.Proponer(m.Titulo, m.Ponentes, m.UrlInvitacion, (TipoEvento)m.TipoEvento), m => View("Defaulteditor", m), model); } diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Web/DataProviders.cs --- a/Agendas/trunk/src/Agendas.Web/DataProviders.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/DataProviders.cs Wed Oct 05 07:57:21 2011 -0300 @@ -16,20 +16,7 @@ select new SelectListItem {Text = t.TipoEventoStr, Value = t.TipoEvento.ToString()}; } - public static IEnumerable GetPonentes(this HtmlHelper helper, Guid id) - { - var lista = new List {new SelectListItem {Text = "[Ninguno]", Value = Guid.Empty.ToString()}}; - - var personaService = AgendaFactory.GetPersonaService(); - var personas = from p in personaService.GetAll() - orderby p.Nombre - select - new SelectListItem {Text = p.Nombre, Value = p.Id.ToString(), Selected = p.Id.Equals(id)}; - - return lista.Union(personas); - } - - public static IEnumerable GetOtrosPonentes(this HtmlHelper helper, IEnumerable ids) + public static IEnumerable GetPonentes(this HtmlHelper helper, IEnumerable ids) { var personas = AgendaFactory.GetPersonaService(); if (ids == null || !ids.Any()) return new SelectListItem[] {}; @@ -40,7 +27,7 @@ } - public static IEnumerable GetOtrosPonentesExcepto(this HtmlHelper helper, IEnumerable ids) + public static IEnumerable GetPonentesExcepto(this HtmlHelper helper, IEnumerable ids) { var personas = AgendaFactory.GetPersonaService(); diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs --- a/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Models/EventoModel.cs Wed Oct 05 07:57:21 2011 -0300 @@ -20,9 +20,7 @@ [Required] public string Titulo { get; set; } - public Guid Ponente { get; set; } - - public Guid[] OtrosPonentes { get; set; } + public IEnumerable Ponentes { get; set; } [Required] public DateTime Fecha { get; set; } @@ -45,8 +43,6 @@ [Required] public string Titulo { get; set; } - public Guid Ponente { get; set; } - [Required] public DateTime? Fecha { get; set; } @@ -58,6 +54,8 @@ [Url] public string UrlInvitacion { get; set; } + + public IEnumerable Ponentes { get; set; } } public class EventoAgendarModel @@ -68,7 +66,7 @@ [Required] public string Titulo { get; set; } - public Guid Ponente { get; set; } + public IEnumerable Ponentes { get; set; } [Required] public DateTime? Fecha { get; set; } diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Web/Models/PropuestaModel.cs --- a/Agendas/trunk/src/Agendas.Web/Models/PropuestaModel.cs Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Models/PropuestaModel.cs Wed Oct 05 07:57:21 2011 -0300 @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Web.Mvc; using DataAnnotationsExtensions; namespace AltNetHispano.Agendas.Web.Models @@ -14,7 +13,7 @@ [Required] public string Titulo { get; set; } - public Guid Ponente { get; set; } + public IEnumerable Ponentes { get; set; } [Url] public string UrlInvitacion { get; set; } diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Web/Views/Shared/DefaultEditor.cshtml --- a/Agendas/trunk/src/Agendas.Web/Views/Shared/DefaultEditor.cshtml Wed Oct 05 07:43:09 2011 -0300 +++ b/Agendas/trunk/src/Agendas.Web/Views/Shared/DefaultEditor.cshtml Wed Oct 05 07:57:21 2011 -0300 @@ -12,7 +12,7 @@ -@Html.ListBox(string.Empty, Html.GetOtrosPonentes(Model), new { style = "vertical-align: top;" }) -
-
- - @Html.DropDownList("posiblesOtrosPonentes", Html.GetOtrosPonentesExcepto(Model), new { style = "vertical-align: top;", id = "posiblesOtrosPonentes" }) -
-
- -
-
-
-
-
\ No newline at end of file diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Web/Views/Shared/EditorTemplates/Ponente.cshtml --- a/Agendas/trunk/src/Agendas.Web/Views/Shared/EditorTemplates/Ponente.cshtml Wed Oct 05 07:43:09 2011 -0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -@model Guid - -@Html.DropDownList(string.Empty, Html.GetPonentes(Model), new { style = "vertical-align: top;" }) -
\ No newline at end of file diff -r a7daa939ef0c -r 5cc1681d3789 Agendas/trunk/src/Agendas.Web/Views/Shared/EditorTemplates/Ponentes.cshtml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Web/Views/Shared/EditorTemplates/Ponentes.cshtml Wed Oct 05 07:57:21 2011 -0300 @@ -0,0 +1,70 @@ +@model IEnumerable + +@Html.ListBox(string.Empty, Html.GetPonentes(Model), new { style = "vertical-align: top;" }) +
+
+ + @Html.DropDownList("posiblesPonentes", Html.GetPonentesExcepto(Model), new { style = "vertical-align: top;", id = "posiblesPonentes" }) +
+
+ +
+
+
+
+
\ No newline at end of file