comparison Agendas/trunk/src/Agendas.Repositories.Tests/EventoCrud.cs @ 222:68b09c30b0d2

Separando los test de persistencia en un proyecto aparte
author nelopauselli
date Mon, 19 Sep 2011 18:18:17 -0300
parents Agendas/trunk/src/Agendas.Tests/Cruds/EventoCrud.cs@2d02adb79322
children f23ee59ef1bd
comparison
equal deleted inserted replaced
221:37ddf81333d3 222:68b09c30b0d2
1 using System;
2 using System.Linq;
3 using Agendas.Repositories.Tests.Infraestructure;
4 using AltNetHispano.Agendas.Domain;
5 using AltNetHispano.Agendas.Domain.Repositories;
6 using Moq;
7 using NUnit.Framework;
8
9 namespace Agendas.Repositories.Tests
10 {
11 public abstract class EventoCrud<T> where T : IInfraestrutureFactory, new()
12 {
13 private readonly IEventoRepository _eventoRepository;
14 private readonly Func<IDisposable> _requestEmulator;
15 private readonly IPersonaRepository _personaRepository;
16
17 protected EventoCrud()
18 {
19 var infraestrutureFactory = new T();
20
21 _eventoRepository = infraestrutureFactory.GetEventoRepository();
22 _personaRepository = infraestrutureFactory.GetPonenteRepository();
23 _requestEmulator = infraestrutureFactory.GetRequestEmulator();
24 }
25
26 [SetUp]
27 public void SetearUsuario()
28 {
29 var seguridad = new Mock<ISeguridad>();
30 seguridad.Setup(s => s.GetUserName()).Returns("neluz");
31 IdentityContext.Init(seguridad.Object, _personaRepository);
32 }
33
34 [Test]
35 public void Create()
36 {
37 Assert.AreNotEqual(Guid.Empty, CreateEvento());
38 }
39
40 private Guid CreateEvento()
41 {
42 using (_requestEmulator.Invoke())
43 {
44 var ponente = new Persona("Carlos Blé") {Twitter = "carlosble"};
45 _personaRepository.Save(ponente);
46
47 var usuario = new Persona("Nelo") {Twitter = "nelopauselli"};
48 _personaRepository.Save(usuario);
49
50 var evento = Evento.Proponer("TDD - Diseño Basado en Ejemplos", ponente, string.Empty, TipoEvento.Van);
51 evento.Tracks.First().LogAdd(new TrackLog(TrackLogPropietario.Twitter, "Mensaje", usuario, true));
52
53 _eventoRepository.Save(evento);
54
55 return evento.Id;
56 }
57 }
58
59 [Test]
60 public void Read()
61 {
62 Guid eventoId = CreateEvento();
63
64 using (_requestEmulator.Invoke())
65 {
66 Evento van = _eventoRepository.Get(eventoId);
67
68 Assert.IsNotNull(van);
69 Assert.IsNotNull(van.Ponente);
70 Assert.AreEqual("Carlos Blé", van.Ponente.Nombre);
71
72 var track1 = van.Tracks.Where(t => t.Accion == Accion.Proponer).FirstOrDefault();
73 Assert.IsNotNull(track1);
74 Assert.AreEqual(van, track1.Evento);
75
76 Assert.AreEqual("TDD - Diseño Basado en Ejemplos", van.Titulo);
77 }
78 }
79
80 [Test]
81 public void Update()
82 {
83 Guid eventoId = CreateEvento();
84 var fechaInicio = new DateTime(2010, 04, 17).ToUniversalTime();
85 var fechaTermino = fechaInicio.AddHours(2);
86
87 using (_requestEmulator.Invoke())
88 {
89 Evento van = _eventoRepository.Get(eventoId);
90
91 Assert.IsNotNull(van);
92
93 van.CambiarTitulo("TDD & Ejemplos");
94
95 var otroPonente = new Persona("José");
96 _personaRepository.Save(otroPonente);
97
98 van.Actualizar(otroPonente, fechaInicio, fechaTermino, null);
99
100 _eventoRepository.Update(van);
101 }
102
103 using (_requestEmulator.Invoke())
104 {
105 Evento van = _eventoRepository.Get(eventoId);
106
107 Assert.IsNotNull(van);
108 Assert.IsNotNull(van.Ponente);
109 Assert.AreEqual("José", van.Ponente.Nombre);
110 Assert.AreEqual("TDD & Ejemplos", van.Titulo);
111 Assert.AreEqual(new DateTime(2010, 04, 17).ToUniversalTime(), van.FechaInicio);
112 Assert.AreEqual(fechaTermino, van.FechaTermino);
113
114 var ponente1 = _personaRepository.GetByNombre("Carlos Blé");
115 Assert.IsNotNull(ponente1);
116
117 var ponente2 = _personaRepository.GetByNombre("José");
118 Assert.IsNotNull(ponente2);
119
120 Assert.AreEqual(1, van.Tracks.Where(t => t.Accion == Accion.Proponer).Count());
121 Assert.AreEqual(1, van.Tracks.Where(t => t.Accion == Accion.Modificar).Count());
122 }
123 }
124
125 [Test]
126 public void Delete()
127 {
128 Guid eventoId = CreateEvento();
129
130 using (_requestEmulator.Invoke())
131 {
132 Evento van = _eventoRepository.Get(eventoId);
133 Assert.IsNotNull(van);
134
135 _eventoRepository.Delete(van);
136 }
137
138 using (_requestEmulator.Invoke())
139 {
140 Evento van = _eventoRepository.Get(eventoId);
141
142 Assert.IsNull(van);
143
144 var ponente = _personaRepository.GetByNombre("Carlos Blé");
145
146 Assert.IsNotNull(ponente);
147 }
148 }
149
150 [Test]
151 public void Workflow()
152 {
153 Guid eventoId = CreateEvento();
154
155 using (_requestEmulator.Invoke())
156 {
157 Evento evento = _eventoRepository.Get(eventoId);
158 Assert.AreEqual(EventoPropuestoState.GetInstance(), evento.Estado);
159
160 evento.Agendar(evento.Ponente, evento.FechaInicio, evento.FechaTermino, null);
161 }
162
163 using (_requestEmulator.Invoke())
164 {
165 Evento evento = _eventoRepository.Get(eventoId);
166 Assert.AreEqual(EventoAgendadoState.GetInstance(), evento.Estado);
167
168 evento.Confirmar();
169 }
170
171 using (_requestEmulator.Invoke())
172 {
173 Evento evento = _eventoRepository.Get(eventoId);
174 Assert.AreEqual(EventoConfirmadoState.GetInstance(), evento.Estado);
175
176 evento.Publicar(1, null, new TimeSpan(0, 0, 0));
177 }
178
179 using (_requestEmulator.Invoke())
180 {
181 Evento evento = _eventoRepository.Get(eventoId);
182 Assert.AreEqual(EventoPublicadoState.GetInstance(), evento.Estado);
183 }
184 }
185 }
186 }