changeset 39:e548379cc314

track de cambios en evento
author nelo@MTEySS.neluz.int
date Fri, 18 Mar 2011 00:10:21 -0300
parents 3c5657d99727
children c49ba9697ca5
files Agendas/trunk/src/Agendas.Domain/Agenda.cs Agendas/trunk/src/Agendas.Domain/Evento.cs Agendas/trunk/src/Agendas.Repositories.Memory/PonenteRepository.cs Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj Agendas/trunk/src/Agendas.Tests/PulicarTests.cs Agendas/trunk/src/Agendas.Tests/TrackTests.cs
diffstat 6 files changed, 120 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Thu Mar 17 23:16:35 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Agenda.cs	Fri Mar 18 00:10:21 2011 -0300
@@ -38,6 +38,9 @@
 
         	if (_publicador != null)
         		_publicador.Publicar(evento);
+
+            evento.AddTracks(new Track(Accion.Publicar));
+
         	_eventosRepository.Save(evento);
         	_ponenteRepository.Save(ponente);
         }
@@ -88,11 +91,19 @@
 			var ponente = GetPonente(ponenteNombre);
 
             if (evento.Titulo != titulo)
-			    evento.CambiarTitulo(titulo);
+            {
+                evento.CambiarTitulo(titulo);
+                evento.AddTracks(new Track(Accion.CambiarTitulo));
+            }
 
-		    evento.Actualizar(ponente, fecha);
+		    if (evento.Fecha != fecha || evento.Ponente != ponente)
+            {
+                evento.Actualizar(ponente, fecha);
+                evento.AddTracks(new Track(Accion.Modificar));
+            }
 
-			if (_publicador != null)
+
+		    if (_publicador != null)
 				_publicador.Publicar(evento);
 		}
 
@@ -109,13 +120,25 @@
 
 		private Ponente GetPonente(string nombre)
 		{
-		    return _ponenteRepository.GetByNombre(nombre) ?? new Ponente(nombre);
+		    var ponente=_ponenteRepository.GetByNombre(nombre) ?? new Ponente(nombre);
+            _ponenteRepository.Save(ponente);
+		    return ponente;
 		}
 
 		public void ModificarPropuesta(Guid id, string titulo, string ponenteNombre)
 		{
 			ModificarEvento(id, titulo, ponenteNombre, null);
 		}
+
+	    public void RealizarEvento(Guid eventoId, string sintesis)
+	    {
+	        var evento = _eventosRepository.Get(eventoId);
+            if (evento != null)
+            {
+                evento.Realizado(sintesis);
+                evento.AddTracks(new Track(Accion.Realizar));
+            }
+	    }
 	}
 
 	public class EventoNotFoundException : Exception
--- a/Agendas/trunk/src/Agendas.Domain/Evento.cs	Thu Mar 17 23:16:35 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Domain/Evento.cs	Fri Mar 18 00:10:21 2011 -0300
@@ -10,6 +10,7 @@
 	        Id = Guid.NewGuid();
 	        Titulo = titulo;
 	        _enlaces = new List<string>();
+	        _tracks = new List<Track>();
 	    }
 
 	    public Guid Id { get; private set; }
@@ -19,14 +20,21 @@
         public Ponente Ponente { get; private set; }
 
 	    private IList<string> _enlaces;
+
 	    public IEnumerable<string> Enlaces
 	    {
 	        get { return _enlaces; }
 	    }
 
+        private readonly IList<Track> _tracks;
+        public IEnumerable<Track> Tracks
+	    {
+	        get { return _tracks; }
+	    }
+
 	    public void Actualizar(Ponente ponente, DateTime? fecha)
 	    {
-	        Ponente = ponente;
+            Ponente = ponente;
 	        Fecha = fecha;
 	    }
 
@@ -46,5 +54,33 @@
 	        Sintesis = sintesis;
 	        _enlaces = enlaces;
 	    }
+
+	    public void AddTracks(Track track)
+	    {
+	        _tracks.Add(track);
+	    }
+
+	    public void Realizado(string sintesis)
+	    {
+	        Sintesis = sintesis;
+	    }
 	}
+
+    public class Track
+    {
+        public Track(string accion)
+        {
+            Accion = accion;
+        }
+
+        public string Accion { get; private set; }
+    }
+    
+    public class Accion
+    {
+        public const string Publicar = "Publicar";
+        public const string Modificar = "Modificar";
+        public const string CambiarTitulo = "CambiarTitulo";
+        public const string Realizar = "Realizar";
+    }
 }
\ No newline at end of file
--- a/Agendas/trunk/src/Agendas.Repositories.Memory/PonenteRepository.cs	Thu Mar 17 23:16:35 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Repositories.Memory/PonenteRepository.cs	Fri Mar 18 00:10: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;
@@ -14,18 +13,6 @@
 				Objects.Add(ponente.Id, ponente);
 		}
 
-		public void Update(Ponente ponente)
-		{
-			//nada que hacer en este método para este repositorio
-		}
-
-		public Ponente Get(Guid vanId)
-		{
-			Ponente ponente;
-			return Objects.TryGetValue(vanId, out ponente) ? ponente : null;
-		}
-
-
 		public Ponente GetByNombre(string nombre)
 		{
 			return Objects.Values.SingleOrDefault(p => p.Nombre == nombre);
--- a/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj	Thu Mar 17 23:16:35 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/Agendas.Tests.csproj	Fri Mar 18 00:10:21 2011 -0300
@@ -53,6 +53,7 @@
     <Compile Include="PulicarTests.cs" />
     <Compile Include="SeguridadObjectMother.cs" />
     <Compile Include="TestBase.cs" />
+    <Compile Include="TrackTests.cs" />
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\Agendas.Domain\Agendas.Domain.csproj">
--- a/Agendas/trunk/src/Agendas.Tests/PulicarTests.cs	Thu Mar 17 23:16:35 2011 -0300
+++ b/Agendas/trunk/src/Agendas.Tests/PulicarTests.cs	Fri Mar 18 00:10:21 2011 -0300
@@ -7,7 +7,7 @@
 
 namespace AltNetHispano.Agendas.Tests
 {
-	[TestFixture]
+    [TestFixture]
 	public class PulicarTests : TestBase
 	{
 		[Test]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Agendas/trunk/src/Agendas.Tests/TrackTests.cs	Fri Mar 18 00:10:21 2011 -0300
@@ -0,0 +1,53 @@
+using System;
+using System.Linq;
+using AltNetHispano.Agendas.Domain;
+using NUnit.Framework;
+
+namespace AltNetHispano.Agendas.Tests
+{
+    [TestFixture]
+    public class TrackTests : TestBase
+    {
+        [Test]
+        public void Track_al_publicar_y_modificar_evento()
+        {
+            var repository = DefaultEventoRepository;
+
+            var agenda = new Agenda(null, null, SeguridadServiceDefault, repository, DefaultPonenteRepository);
+
+            var fecha = DateTime.Now.AddDays(5);
+            agenda.Publicar("Html 5", "jjmontes", fecha);
+            var evento = repository.GetEventosConFecha().First();
+
+            Assert.AreEqual(1, evento.Tracks.Count());
+            Assert.AreEqual(Accion.Publicar, evento.Tracks.Last().Accion);
+
+            agenda.ModificarEvento(evento.Id, "Html 5", "otro ponente", fecha);
+            Assert.AreEqual(2, evento.Tracks.Count());
+            Assert.AreEqual(Accion.Modificar, evento.Tracks.Last().Accion);
+
+            agenda.ModificarEvento(evento.Id, "Html 5 y Css 3", "otro ponente", fecha);
+            Assert.AreEqual(3, evento.Tracks.Count());
+            Assert.AreEqual(Accion.CambiarTitulo, evento.Tracks.Last().Accion);
+        }
+
+        [Test]
+        public void Track_al_publicar_y_realizar_evento()
+        {
+            var repository = DefaultEventoRepository;
+
+            var agenda = new Agenda(null, null, SeguridadServiceDefault, repository, DefaultPonenteRepository);
+
+            agenda.Publicar("Html 5", "jjmontes", DateTime.Now);
+            var evento = repository.GetEventosConFecha().First();
+
+            Assert.AreEqual(1, evento.Tracks.Count());
+            Assert.AreEqual(Accion.Publicar, evento.Tracks.Last().Accion);
+
+            agenda.RealizarEvento(evento.Id, "Esta es la sintesis");
+            Assert.AreEqual(2, evento.Tracks.Count());
+            Assert.AreEqual(Accion.Realizar, evento.Tracks.Last().Accion);
+        }
+
+    }
+}
\ No newline at end of file