Mercurial > altnet-hispano
annotate Agendas/trunk/src/Agendas.Tests/AgendarTests.cs @ 87:26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
Quitamos el concepto de Recordador ya que el mismo es un publicador, cuándo publicar es responsabilidad de cada publicador
author | nelopauselli |
---|---|
date | Fri, 27 May 2011 14:42:38 -0300 |
parents | 926bd1cdb98f |
children | db4b1e2cae49 |
rev | line source |
---|---|
75 | 1 using System; |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
2 using System.Collections.Generic; |
75 | 3 using System.Linq; |
4 using AltNetHispano.Agendas.Domain; | |
5 using AltNetHispano.Agendas.Domain.Exceptions; | |
6 using AltNetHispano.Agendas.Domain.Repositories; | |
7 using Moq; | |
8 using NUnit.Framework; | |
9 | |
10 namespace AltNetHispano.Agendas.Tests | |
11 { | |
12 [TestFixture] | |
13 public class AgendarTests : TestBase | |
14 { | |
15 private const string urlInvitacion = "http://groups.google.com/group/altnet-hispano/browse_thread/thread/65d6d26eb381386e"; | |
16 | |
17 [Test] | |
18 public void CompositePublicador_constructor_parametro_null_debe_generar_ArgumentNullException() | |
19 { | |
20 Assert.Throws<ArgumentNullException>(() => new CompositePublicador(null)); | |
21 } | |
22 | |
23 [Test] | |
24 public void Intentar_agendar_evento_donde_ocurre_una_excepcion_no_manejada() | |
25 { | |
26 var publicador = new Mock<IPublicador>(); | |
27 var repository = new Mock<IEventoRepository>(); | |
28 | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
29 publicador.Setup(p => p.Publicar(It.IsAny<IEnumerable<Track>>())).Throws(new Exception("Error intencional")); |
75 | 30 |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
31 var agenda = new Agenda(publicador.Object, repository.Object, DefaultPonenteRepository); |
75 | 32 |
33 Assert.Throws<Exception>(() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion)); | |
34 Assert.AreEqual(0, agenda.GetEventosAgendados().Count); | |
35 | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
36 publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1)); |
75 | 37 repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); |
38 } | |
39 | |
40 [Test] | |
41 public void Intentar_agendar_evento_sin_servicio_de_seguridad() | |
42 { | |
43 IdentityContext.Current = null; | |
44 | |
45 var publicador = new Mock<IPublicador>(); | |
46 var repository = new Mock<IEventoRepository>(); | |
47 | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
48 var agenda = new Agenda(publicador.Object, repository.Object, DefaultPonenteRepository); |
75 | 49 |
50 Assert.Throws<IdentityContextNotConfiguredException>( | |
51 () => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, | |
52 urlInvitacion)); | |
53 repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); | |
54 } | |
55 | |
56 [Test] | |
57 public void Intentar_agendar_evento_sin_usuario_autenticado() | |
58 { | |
59 SetCurrentUser(null); | |
60 | |
61 var publicador = new Mock<IPublicador>(); | |
62 var repository = new Mock<IEventoRepository>(); | |
63 | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
64 var agenda = new Agenda(publicador.Object, repository.Object, DefaultPonenteRepository); |
75 | 65 |
66 Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, | |
67 urlInvitacion)); | |
68 | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
69 publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(0)); |
75 | 70 repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); |
71 } | |
72 | |
73 [Test] | |
74 public void Intentar_agendar_evento_sin_ponente() | |
75 { | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
76 var agenda = new Agenda(null, DefaultEventoRepository, DefaultPonenteRepository); |
75 | 77 |
78 var r = agenda.Agendar("Van para publicar", string.Empty, DateTime.Now, | |
79 urlInvitacion); | |
80 | |
81 Assert.IsFalse(r.Succeful); | |
82 } | |
83 | |
84 [Test] | |
85 public void Agendar_evento_con_multiples_publicadores() | |
86 { | |
87 var publicador1 = new Mock<IPublicador>(); | |
88 var publicador2 = new Mock<IPublicador>(); | |
89 | |
90 var repository = new Mock<IEventoRepository>(); | |
91 | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
92 var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), |
75 | 93 repository.Object, DefaultPonenteRepository); |
94 | |
95 agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, | |
96 urlInvitacion); | |
97 | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
98 publicador1.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1)); |
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
99 publicador2.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1)); |
75 | 100 repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(1)); |
101 } | |
102 | |
103 [Test] | |
104 public void Agendar_evento_correctamente() | |
105 { | |
106 var publicador = new Mock<IPublicador>(); | |
107 | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
108 var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPonenteRepository); |
75 | 109 |
110 agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, | |
111 urlInvitacion); | |
112 | |
113 Assert.AreEqual(0, agenda.GetEventosPropuestos().Count); | |
114 | |
115 var eventos = agenda.GetEventosAgendados(); | |
116 Assert.AreEqual(1, eventos.Count); | |
117 | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
118 publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1)); |
75 | 119 |
120 var evento = eventos[0]; | |
121 | |
122 Assert.IsNotNull(evento.Ponente); | |
123 Assert.IsNotNull(evento.Ponente.Eventos); | |
124 Assert.AreEqual(1, evento.Ponente.Eventos.Count()); | |
125 Assert.AreEqual(evento, evento.Ponente.Eventos.First()); | |
126 | |
127 } | |
128 | |
129 [Test] | |
130 public void Agendar_y_modificar_evento() | |
131 { | |
132 var repository = DefaultEventoRepository; | |
133 var publicador = new Mock<IPublicador>(); | |
134 | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
135 var agenda = new Agenda(publicador.Object, repository, DefaultPonenteRepository); |
75 | 136 |
137 agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, | |
138 urlInvitacion); | |
139 | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
140 publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1)); |
75 | 141 |
142 var evento = repository.GetEventosConFecha().First(); | |
143 Assert.AreNotEqual(Guid.Empty, evento.Id); | |
144 Assert.IsNotNull(evento.Fecha); | |
145 | |
146 DateTime fecha = evento.Fecha.Value.AddDays(7); | |
147 agenda.ModificarEvento(evento.Id, "otro titulo", "otro ponente", fecha, urlInvitacion); | |
148 | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
149 publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(2)); |
75 | 150 |
151 evento = repository.GetEventosConFecha().First(); | |
152 Assert.AreEqual("otro titulo", evento.Titulo); | |
153 Assert.AreEqual("otro ponente", evento.Ponente.Nombre); | |
154 Assert.AreEqual(fecha, evento.Fecha); | |
155 | |
156 var idEventoNoExistente = new Guid("99999999999999999999999999999999"); | |
157 Assert.Throws<EventoNotFoundException>( | |
158 () => agenda.ModificarEvento(idEventoNoExistente, "algún título", "un ponente", DateTime.Now, urlInvitacion)); | |
159 } | |
160 | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
161 [Test, Ignore("Por ahora no existe el concepto de recordar")] |
75 | 162 public void Agendar_y_recordar_evento() |
163 { | |
164 var publicador1 = new Mock<IPublicador>(); | |
165 var publicador2 = new Mock<IPublicador>(); | |
166 | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
167 var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), |
75 | 168 DefaultEventoRepository, DefaultPonenteRepository); |
169 | |
170 agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, | |
171 urlInvitacion); | |
172 | |
173 var van = agenda.GetEventosAgendados().Single(v => v.Titulo == "Van para publicar"); | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
174 //agenda.Recordar(van.Id); |
75 | 175 |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
176 publicador1.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1)); |
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
177 publicador2.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1)); |
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
178 //recordador1.Verify(r => r.Recordar(It.IsAny<Evento>()), Times.Exactly(1)); |
75 | 179 } |
180 | |
181 [Test] | |
182 public void Agendar_evento_propuesto() | |
183 { | |
184 var publicador1 = new Mock<IPublicador>(); | |
185 var publicador2 = new Mock<IPublicador>(); | |
186 | |
87
26d0513a8410
A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents:
76
diff
changeset
|
187 var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), |
75 | 188 DefaultEventoRepository, DefaultPonenteRepository); |
189 | |
190 agenda.Proponer("Html 5", "jjmontes", urlInvitacion); | |
191 Assert.AreEqual(1, agenda.GetEventosPropuestos().Count); | |
192 Assert.AreEqual(0, agenda.GetEventosAgendados().Count); | |
193 | |
194 var publicado = agenda.GetEventosPropuestos().First(); | |
195 Assert.AreEqual(1, publicado.Tracks.Count()); | |
196 | |
76
926bd1cdb98f
Corrección de un test para que simule lo que pasa realmente en la UI
nelopauselli
parents:
75
diff
changeset
|
197 agenda.ModificarEvento(publicado.Id, "Html 5", "jjmontes", DateTime.Today.AddDays(5), urlInvitacion); |
75 | 198 Assert.AreEqual(0, agenda.GetEventosPropuestos().Count); |
199 Assert.AreEqual(1, agenda.GetEventosAgendados().Count); | |
200 | |
201 var agendado = agenda.GetEventosAgendados().First(); | |
202 Assert.AreSame(publicado, agendado); | |
203 Assert.AreEqual(2, agendado.Tracks.Count()); | |
204 | |
205 Assert.IsNotNull(agendado.Tracks.Where(t => t.Accion == Accion.Proponer).SingleOrDefault()); | |
206 Assert.IsNotNull(agendado.Tracks.Where(t => t.Accion == Accion.Agendar).SingleOrDefault()); | |
207 } | |
208 } | |
209 } |