Mercurial > altnet-hispano
changeset 287:eeca9ddb330a
BUG: Los Patrocinadores quedaban asociados a un único evento. Se armó un test que lo demuestra y se modificó el modelo de la base de datos.
line wrap: on
line diff
--- a/Agendas/trunk/db/v1.1/02 - Patrocinadores.sql Mon Jan 02 15:51:19 2012 -0300 +++ b/Agendas/trunk/db/v1.1/02 - Patrocinadores.sql Mon Jan 02 19:44:41 2012 -0300 @@ -1,14 +1,19 @@ -/****** Object: Table [dbo].[Patrocinador] Script Date: 11/30/2011 07:46:21 ******/ -IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Patrocinador_Evento]') AND parent_object_id = OBJECT_ID(N'[dbo].[Patrocinador]')) -ALTER TABLE [dbo].[Patrocinador] DROP CONSTRAINT [FK_Patrocinador_Evento] +IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Patrocinadores_Evento]') AND parent_object_id = OBJECT_ID(N'[dbo].[Patrocinadores]')) +ALTER TABLE [dbo].[Patrocinadores] DROP CONSTRAINT [FK_Patrocinadores_Evento] GO -/****** Object: Table [dbo].[Patrocinador] Script Date: 11/30/2011 07:46:35 ******/ +IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Patrocinadores_Patrocinador]') AND parent_object_id = OBJECT_ID(N'[dbo].[Patrocinadores]')) +ALTER TABLE [dbo].[Patrocinadores] DROP CONSTRAINT [FK_Patrocinadores_Patrocinador] +GO + +IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Patrocinadores]') AND type in (N'U')) +DROP TABLE [dbo].[Patrocinadores] +GO + IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Patrocinador]') AND type in (N'U')) DROP TABLE [dbo].[Patrocinador] GO - SET ANSI_NULLS ON GO @@ -22,8 +27,6 @@ [Id] [uniqueidentifier] NOT NULL, [Nombre] [nvarchar](255) NULL, [Logo] [varbinary](8000) NULL, - [evento_key] [uniqueidentifier] NULL, - [idx] [int] NULL, PRIMARY KEY CLUSTERED ( [Id] ASC @@ -35,11 +38,31 @@ SET ANSI_PADDING OFF GO -ALTER TABLE [dbo].[Patrocinador] WITH CHECK ADD CONSTRAINT [FK_Patrocinador_Evento] FOREIGN KEY([evento_key]) +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +CREATE TABLE [dbo].[Patrocinadores]( + [evento_key] [uniqueidentifier] NOT NULL, + [elt] [uniqueidentifier] NOT NULL, + [idx] [int] NOT NULL, +PRIMARY KEY CLUSTERED +( + [evento_key] ASC, + [idx] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] +) ON [PRIMARY] +GO + +ALTER TABLE [dbo].[Patrocinadores] WITH CHECK ADD CONSTRAINT [FK_Patrocinadores_Evento] FOREIGN KEY([evento_key]) REFERENCES [dbo].[Evento] ([Id]) GO -ALTER TABLE [dbo].[Patrocinador] CHECK CONSTRAINT [FK_Patrocinador_Evento] +ALTER TABLE [dbo].[Patrocinadores] CHECK CONSTRAINT [FK_Patrocinadores_Evento] GO - +ALTER TABLE [dbo].[Patrocinadores] WITH CHECK ADD CONSTRAINT [FK_Patrocinadores_Patrocinador] FOREIGN KEY([elt]) +REFERENCES [dbo].[Patrocinador] ([Id]) +GO +ALTER TABLE [dbo].[Patrocinadores] CHECK CONSTRAINT [FK_Patrocinadores_Patrocinador] +GO
--- a/Agendas/trunk/src/Agendas.NHibernate/NhHelper.cs Mon Jan 02 15:51:19 2012 -0300 +++ b/Agendas/trunk/src/Agendas.NHibernate/NhHelper.cs Mon Jan 02 19:44:41 2012 -0300 @@ -42,6 +42,7 @@ orm.TablePerClass<TrackLog>(); orm.TablePerClass<Cuenta>(); orm.TablePerClass<Patrocinador>(); + orm.ManyToMany<Evento, Patrocinador>(); orm.Cascade<Evento, Persona>(Cascade.None); orm.Cascade<Persona, Evento>(Cascade.None);
--- a/Agendas/trunk/src/Agendas.Repositories.Tests/Agendas.Repositories.Tests.csproj Mon Jan 02 15:51:19 2012 -0300 +++ b/Agendas/trunk/src/Agendas.Repositories.Tests/Agendas.Repositories.Tests.csproj Mon Jan 02 19:44:41 2012 -0300 @@ -69,6 +69,9 @@ <Compile Include="PatrocinadorCrud.cs" /> <Compile Include="PatrocinadorCrudMemoryTests.cs" /> <Compile Include="PatrocinadorCrudNhTests.cs" /> + <Compile Include="PatrocinadorEventoMemoryTests.cs" /> + <Compile Include="PatrocinadorEventoNhTests.cs" /> + <Compile Include="PatrocinadorEventoTests.cs" /> <Compile Include="PersonaCrud.cs" /> <Compile Include="PersonaCrudMemoryTests.cs" /> <Compile Include="PersonaCrudNhTests.cs" />
--- a/Agendas/trunk/src/Agendas.Repositories.Tests/EventoCrudMemory.cs Mon Jan 02 15:51:19 2012 -0300 +++ b/Agendas/trunk/src/Agendas.Repositories.Tests/EventoCrudMemory.cs Mon Jan 02 19:44:41 2012 -0300 @@ -12,6 +12,7 @@ { EventoRepository.Clear(); PersonaRepository.Clear(); + PatrocinadorRepository.Clear(); } }
--- a/Agendas/trunk/src/Agendas.Repositories.Tests/Infraestructure/NhHelperTest.cs Mon Jan 02 15:51:19 2012 -0300 +++ b/Agendas/trunk/src/Agendas.Repositories.Tests/Infraestructure/NhHelperTest.cs Mon Jan 02 19:44:41 2012 -0300 @@ -10,8 +10,10 @@ var session = sf.OpenStatelessSession(); session.CreateSQLQuery("DELETE FROM Ponentes").ExecuteUpdate(); + session.CreateSQLQuery("DELETE FROM Patrocinadores").ExecuteUpdate(); + session.CreateSQLQuery("DELETE FROM Evento").ExecuteUpdate(); session.CreateSQLQuery("DELETE FROM Patrocinador").ExecuteUpdate(); - session.CreateSQLQuery("DELETE FROM Evento").ExecuteUpdate(); + session.CreateSQLQuery("DELETE FROM Roles").ExecuteUpdate(); session.CreateSQLQuery("DELETE FROM Persona").ExecuteUpdate(); } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Repositories.Tests/PatrocinadorEventoMemoryTests.cs Mon Jan 02 19:44:41 2012 -0300 @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Agendas.Repositories.Tests.Infraestructure; +using AltNetHispano.Agendas.Repositories.Memory; +using NUnit.Framework; + +namespace Agendas.Repositories.Tests +{ + [TestFixture] + public class PatrocinadorEventoMemoryTests : PatrocinadorEventoTests<MemoryInfraestrutureFactory> + { + [SetUp] + public void BorrarRepositorios() + { + EventoRepository.Clear(); + PersonaRepository.Clear(); + PatrocinadorRepository.Clear(); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Repositories.Tests/PatrocinadorEventoNhTests.cs Mon Jan 02 19:44:41 2012 -0300 @@ -0,0 +1,15 @@ +using Agendas.Repositories.Tests.Infraestructure; +using NUnit.Framework; + +namespace Agendas.Repositories.Tests +{ + [TestFixture] + public class PatrocinadorEventoNhTests : PatrocinadorEventoTests<NhInfraestrutureFactory> + { + [SetUp] + public void BorrarRepositorios() + { + NhHelperTest.CleanDb(); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Agendas/trunk/src/Agendas.Repositories.Tests/PatrocinadorEventoTests.cs Mon Jan 02 19:44:41 2012 -0300 @@ -0,0 +1,131 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Agendas.Repositories.Tests.Infraestructure; +using AltNetHispano.Agendas.Domain; +using AltNetHispano.Agendas.Domain.Repositories; +using Moq; +using NUnit.Framework; + +namespace Agendas.Repositories.Tests +{ + public abstract class PatrocinadorEventoTests<T> where T : IInfraestrutureFactory, new() + { + private readonly IPersonaRepository _personaRepository; + private readonly IEventoRepository _eventoRepository; + private readonly IPatrocinadorRepository _patrocinadorRepository; + private readonly Func<IDisposable> _requestEmulator; + + private Guid _apressId; + private Guid _eventoUnoId; + private Guid _eventoDosId; + private Agenda _agenda; + private readonly TestsHelper _testsHelper; + + protected PatrocinadorEventoTests() + { + var infraestrutureFactory = new T(); + + _eventoRepository = infraestrutureFactory.GetEventoRepository(); + _personaRepository = infraestrutureFactory.GetPonenteRepository(); + _patrocinadorRepository = infraestrutureFactory.GetPatrocinadorRepository(); + _requestEmulator = infraestrutureFactory.GetRequestEmulator(); + + _testsHelper = new TestsHelper(_personaRepository, _patrocinadorRepository); + } + + [SetUp] + public void SetearUsuario() + { + var seguridad = new Mock<ISeguridad>(); + seguridad.Setup(s => s.GetUserName()).Returns("neluz"); + IdentityContext.Init(seguridad.Object, _personaRepository); + } + + private Guid CrearEvento(string[] nombrePonentes, string nombreEvento, DateTime fechaInicio, DateTime fechaTermino) + { + Evento evento; + var ponentes = new Guid[nombrePonentes.Length]; + for (var nroPonente = 0; nroPonente < nombrePonentes.Length; nroPonente++) + { + using (_requestEmulator.Invoke()) + { + ponentes[nroPonente] = _testsHelper.GetOrCreatePonente(nombrePonentes[nroPonente]); + } + } + + using (_requestEmulator.Invoke()) + { + _agenda.Agendar(nombreEvento, ponentes, fechaInicio, fechaTermino, null, TipoEvento.Van); + } + using (_requestEmulator.Invoke()) + { + evento = _eventoRepository.GetActivos().First(e => e.Titulo == nombreEvento); + } + return evento.Id; + } + + private Guid CrearPatrocinador(string nombre, string images) + { + var patrocinador = new Patrocinador(nombre); + patrocinador.LoadLogo(images); + using (_requestEmulator.Invoke()) + { + _patrocinadorRepository.Save(patrocinador); + } + return patrocinador.Id; + } + + protected void CrearDatos() + { + var fechaInicio = DateTime.Today.AddDays(7).ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); + _agenda = new Agenda(null, _eventoRepository, _personaRepository, _patrocinadorRepository); + + _apressId = CrearPatrocinador("Apress", "images/apress.gif"); + _eventoUnoId = CrearEvento(new[] { "Carlos Peix", "Nelo Pauselli" }, "ADFS", fechaInicio, fechaTermino); + _eventoDosId = CrearEvento(new[] { "Carlos Peix", "Nelo Pauselli" }, "ADFS: Segunda parte.", fechaInicio.AddDays(3), fechaTermino.AddDays(3)); + } + + [Test] + public void MismoPatrocinadorEnDosEventosDiferentes() + { + CrearDatos(); + Evento eventoUno, eventoDos; + { + using (_requestEmulator.Invoke()) + { + _agenda.IndicarPatrocinadores(_eventoUnoId, new[] {_apressId}); + } + using (_requestEmulator.Invoke()) + { + eventoUno = _eventoRepository.GetActivos().First(e => e.Id == _eventoUnoId); + Assert.AreEqual(1, eventoUno.Patrocinadores.Count()); + } + } + + { + using (_requestEmulator.Invoke()) + { + _agenda.IndicarPatrocinadores(_eventoDosId, new[] {_apressId}); + } + using (_requestEmulator.Invoke()) + { + eventoDos = _eventoRepository.GetActivos().First(e => e.Id == _eventoDosId); + Assert.AreEqual(1, eventoDos.Patrocinadores.Count()); + } + } + using (_requestEmulator.Invoke()) + { + eventoDos = _eventoRepository.GetActivos().First(e => e.Id == _eventoDosId); + Assert.AreEqual(1, eventoDos.Patrocinadores.Count()); + } + using (_requestEmulator.Invoke()) + { + eventoUno = _eventoRepository.GetActivos().First(e => e.Id == _eventoUnoId); + Assert.AreEqual(1, eventoUno.Patrocinadores.Count()); + } + } + } +}
--- a/Agendas/trunk/src/Agendas.Repositories.Tests/WorkflowMemoryTests.cs Mon Jan 02 15:51:19 2012 -0300 +++ b/Agendas/trunk/src/Agendas.Repositories.Tests/WorkflowMemoryTests.cs Mon Jan 02 19:44:41 2012 -0300 @@ -12,6 +12,7 @@ { EventoRepository.Clear(); PersonaRepository.Clear(); + PatrocinadorRepository.Clear(); } }
--- a/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj Mon Jan 02 15:51:19 2012 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj Mon Jan 02 19:44:41 2012 -0300 @@ -86,6 +86,10 @@ <Project>{28C5EBFB-EE69-4765-A880-D4DE0BC89F48}</Project> <Name>Agendas.Repositories.Memory</Name> </ProjectReference> + <ProjectReference Include="..\Agendas.Repositories.NHibernate\Agendas.Repositories.NHibernate.csproj"> + <Project>{0973DF44-3B90-4D2A-B579-C64C93B6C853}</Project> + <Name>Agendas.Repositories.NHibernate</Name> + </ProjectReference> </ItemGroup> <ItemGroup> <None Include="App.config">
--- a/Agendas/trunk/src/Agendas.Tests/Eventos_y_patrocinadores_tests.cs Mon Jan 02 15:51:19 2012 -0300 +++ b/Agendas/trunk/src/Agendas.Tests/Eventos_y_patrocinadores_tests.cs Mon Jan 02 19:44:41 2012 -0300 @@ -11,23 +11,27 @@ { private Guid _apressId; private Guid _jetbrainsId; - private Guid _eventoId; + private Guid _eventoUnoId; + private Guid _eventoDosId; private Agenda _agenda; [SetUp] public void CrearDatos() { + var fechaInicio = DateTime.Today.AddDays(7).ToUniversalTime(); + var fechaTermino = fechaInicio.AddHours(2); _agenda = new Agenda(null, DefaultEventoRepository, DefaultPersonaRepository, DefaultPatrocinadorRepository); _apressId = CrearPatrocinador("Apress", "images/apress.gif"); _jetbrainsId = CrearPatrocinador("jetbrains", "images/jetbrains.png"); - _eventoId = CrearEvento(); + _eventoUnoId = CrearEvento(new[] { "Carlos Peix", "Nelo Pauselli" }, "ADFS", fechaInicio, fechaTermino); + _eventoDosId = CrearEvento(new[] { "Carlos Peix", "Nelo Pauselli" }, "ADFS: Segunda parte.", fechaInicio.AddDays(3), fechaTermino.AddDays(3)); } [Test] public void Indicar_patrociadores() { - _agenda.IndicarPatrocinadores(_eventoId, new[] { _apressId, _jetbrainsId }); + _agenda.IndicarPatrocinadores(_eventoUnoId, new[] { _apressId, _jetbrainsId }); var evento = DefaultEventoRepository.GetActivos().First(); Assert.AreNotEqual(Guid.Empty, evento.Id); @@ -42,7 +46,7 @@ public void Agregar_patrociador() { { - _agenda.IndicarPatrocinadores(_eventoId, new[] { _apressId }); + _agenda.IndicarPatrocinadores(_eventoUnoId, new[] { _apressId }); var evento = DefaultEventoRepository.GetActivos().First(); Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "Apress")); @@ -50,7 +54,7 @@ } { - _agenda.IndicarPatrocinadores(_eventoId, new[] { _apressId, _jetbrainsId }); + _agenda.IndicarPatrocinadores(_eventoUnoId, new[] { _apressId, _jetbrainsId }); var evento = DefaultEventoRepository.GetActivos().First(); Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "Apress")); @@ -62,7 +66,7 @@ public void Quitar_patrociador() { { - _agenda.IndicarPatrocinadores(_eventoId, new[] { _apressId, _jetbrainsId }); + _agenda.IndicarPatrocinadores(_eventoUnoId, new[] { _apressId, _jetbrainsId }); var evento = DefaultEventoRepository.GetActivos().First(); Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "Apress")); @@ -70,7 +74,7 @@ } { - _agenda.IndicarPatrocinadores(_eventoId, new[] { _apressId }); + _agenda.IndicarPatrocinadores(_eventoUnoId, new[] { _apressId }); var evento = DefaultEventoRepository.GetActivos().First(); Assert.IsTrue(evento.Patrocinadores.Any(p => p.Nombre == "Apress")); @@ -78,7 +82,7 @@ } { - _agenda.IndicarPatrocinadores(_eventoId, new Guid[] { }); + _agenda.IndicarPatrocinadores(_eventoUnoId, new Guid[] { }); var evento = DefaultEventoRepository.GetActivos().First(); Assert.IsFalse(evento.Patrocinadores.Any()); @@ -96,14 +100,17 @@ return patrocinador.Id; } - private Guid CrearEvento() + private Guid CrearEvento(string[] nombrePonentes, string nombreEvento, DateTime fechaInicio, DateTime fechaTermino) { - var fechaInicio = DateTime.Today.AddDays(7).ToUniversalTime(); - var fechaTermino = fechaInicio.AddHours(2); - var ponentes = new[] {TestsHelper.GetOrCreatePonente("Carlos Peix"), TestsHelper.GetOrCreatePonente("Nelo Pauselli")}; - _agenda.Agendar("ADFS", ponentes, fechaInicio, fechaTermino, null, TipoEvento.Van); + var ponentes = new Guid[nombrePonentes.Length]; + for (var nroPonente = 0; nroPonente < nombrePonentes.Length; nroPonente++) + { + ponentes[nroPonente] = TestsHelper.GetOrCreatePonente(nombrePonentes[nroPonente]); + } - var evento = DefaultEventoRepository.GetActivos().First(); + _agenda.Agendar(nombreEvento, ponentes, fechaInicio, fechaTermino, null, TipoEvento.Van); + + var evento = DefaultEventoRepository.GetActivos().First(e=>e.Titulo == nombreEvento); return evento.Id; }