comparison 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
comparison
equal deleted inserted replaced
86:723aed93a0e6 87:26d0513a8410
1 using System; 1 using System;
2 using System.Collections.Generic;
2 using System.Linq; 3 using System.Linq;
3 using AltNetHispano.Agendas.Domain; 4 using AltNetHispano.Agendas.Domain;
4 using AltNetHispano.Agendas.Domain.Exceptions; 5 using AltNetHispano.Agendas.Domain.Exceptions;
5 using AltNetHispano.Agendas.Domain.Repositories; 6 using AltNetHispano.Agendas.Domain.Repositories;
6 using Moq; 7 using Moq;
23 public void Intentar_agendar_evento_donde_ocurre_una_excepcion_no_manejada() 24 public void Intentar_agendar_evento_donde_ocurre_una_excepcion_no_manejada()
24 { 25 {
25 var publicador = new Mock<IPublicador>(); 26 var publicador = new Mock<IPublicador>();
26 var repository = new Mock<IEventoRepository>(); 27 var repository = new Mock<IEventoRepository>();
27 28
28 publicador.Setup(p => p.Publicar(It.IsAny<Evento>())).Throws(new Exception("Error intencional")); 29 publicador.Setup(p => p.Publicar(It.IsAny<IEnumerable<Track>>())).Throws(new Exception("Error intencional"));
29 30
30 var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository); 31 var agenda = new Agenda(publicador.Object, repository.Object, DefaultPonenteRepository);
31 32
32 Assert.Throws<Exception>(() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion)); 33 Assert.Throws<Exception>(() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, urlInvitacion));
33 Assert.AreEqual(0, agenda.GetEventosAgendados().Count); 34 Assert.AreEqual(0, agenda.GetEventosAgendados().Count);
34 35
35 publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); 36 publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
36 repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); 37 repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0));
37 } 38 }
38 39
39 [Test] 40 [Test]
40 public void Intentar_agendar_evento_sin_servicio_de_seguridad() 41 public void Intentar_agendar_evento_sin_servicio_de_seguridad()
42 IdentityContext.Current = null; 43 IdentityContext.Current = null;
43 44
44 var publicador = new Mock<IPublicador>(); 45 var publicador = new Mock<IPublicador>();
45 var repository = new Mock<IEventoRepository>(); 46 var repository = new Mock<IEventoRepository>();
46 47
47 var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository); 48 var agenda = new Agenda(publicador.Object, repository.Object, DefaultPonenteRepository);
48 49
49 Assert.Throws<IdentityContextNotConfiguredException>( 50 Assert.Throws<IdentityContextNotConfiguredException>(
50 () => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, 51 () => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
51 urlInvitacion)); 52 urlInvitacion));
52 repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); 53 repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0));
58 SetCurrentUser(null); 59 SetCurrentUser(null);
59 60
60 var publicador = new Mock<IPublicador>(); 61 var publicador = new Mock<IPublicador>();
61 var repository = new Mock<IEventoRepository>(); 62 var repository = new Mock<IEventoRepository>();
62 63
63 var agenda = new Agenda(publicador.Object, null, repository.Object, DefaultPonenteRepository); 64 var agenda = new Agenda(publicador.Object, repository.Object, DefaultPonenteRepository);
64 65
65 Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, 66 Assert.Throws<UsuarioNoAutenticadoException>(() => agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
66 urlInvitacion)); 67 urlInvitacion));
67 68
68 publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(0)); 69 publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(0));
69 repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0)); 70 repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(0));
70 } 71 }
71 72
72 [Test] 73 [Test]
73 public void Intentar_agendar_evento_sin_ponente() 74 public void Intentar_agendar_evento_sin_ponente()
74 { 75 {
75 var agenda = new Agenda(null, null, DefaultEventoRepository, DefaultPonenteRepository); 76 var agenda = new Agenda(null, DefaultEventoRepository, DefaultPonenteRepository);
76 77
77 var r = agenda.Agendar("Van para publicar", string.Empty, DateTime.Now, 78 var r = agenda.Agendar("Van para publicar", string.Empty, DateTime.Now,
78 urlInvitacion); 79 urlInvitacion);
79 80
80 Assert.IsFalse(r.Succeful); 81 Assert.IsFalse(r.Succeful);
86 var publicador1 = new Mock<IPublicador>(); 87 var publicador1 = new Mock<IPublicador>();
87 var publicador2 = new Mock<IPublicador>(); 88 var publicador2 = new Mock<IPublicador>();
88 89
89 var repository = new Mock<IEventoRepository>(); 90 var repository = new Mock<IEventoRepository>();
90 91
91 var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), null, 92 var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}),
92 repository.Object, DefaultPonenteRepository); 93 repository.Object, DefaultPonenteRepository);
93 94
94 agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, 95 agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
95 urlInvitacion); 96 urlInvitacion);
96 97
97 publicador1.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); 98 publicador1.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
98 publicador2.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); 99 publicador2.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
99 repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(1)); 100 repository.Verify(p => p.Save(It.IsAny<Evento>()), Times.Exactly(1));
100 } 101 }
101 102
102 [Test] 103 [Test]
103 public void Agendar_evento_correctamente() 104 public void Agendar_evento_correctamente()
104 { 105 {
105 var publicador = new Mock<IPublicador>(); 106 var publicador = new Mock<IPublicador>();
106 107
107 var agenda = new Agenda(publicador.Object, null, DefaultEventoRepository, DefaultPonenteRepository); 108 var agenda = new Agenda(publicador.Object, DefaultEventoRepository, DefaultPonenteRepository);
108 109
109 agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, 110 agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
110 urlInvitacion); 111 urlInvitacion);
111 112
112 Assert.AreEqual(0, agenda.GetEventosPropuestos().Count); 113 Assert.AreEqual(0, agenda.GetEventosPropuestos().Count);
113 114
114 var eventos = agenda.GetEventosAgendados(); 115 var eventos = agenda.GetEventosAgendados();
115 Assert.AreEqual(1, eventos.Count); 116 Assert.AreEqual(1, eventos.Count);
116 117
117 publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); 118 publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
118 119
119 var evento = eventos[0]; 120 var evento = eventos[0];
120 121
121 Assert.IsNotNull(evento.Ponente); 122 Assert.IsNotNull(evento.Ponente);
122 Assert.IsNotNull(evento.Ponente.Eventos); 123 Assert.IsNotNull(evento.Ponente.Eventos);
129 public void Agendar_y_modificar_evento() 130 public void Agendar_y_modificar_evento()
130 { 131 {
131 var repository = DefaultEventoRepository; 132 var repository = DefaultEventoRepository;
132 var publicador = new Mock<IPublicador>(); 133 var publicador = new Mock<IPublicador>();
133 134
134 var agenda = new Agenda(publicador.Object, null, repository, DefaultPonenteRepository); 135 var agenda = new Agenda(publicador.Object, repository, DefaultPonenteRepository);
135 136
136 agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, 137 agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
137 urlInvitacion); 138 urlInvitacion);
138 139
139 publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); 140 publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
140 141
141 var evento = repository.GetEventosConFecha().First(); 142 var evento = repository.GetEventosConFecha().First();
142 Assert.AreNotEqual(Guid.Empty, evento.Id); 143 Assert.AreNotEqual(Guid.Empty, evento.Id);
143 Assert.IsNotNull(evento.Fecha); 144 Assert.IsNotNull(evento.Fecha);
144 145
145 DateTime fecha = evento.Fecha.Value.AddDays(7); 146 DateTime fecha = evento.Fecha.Value.AddDays(7);
146 agenda.ModificarEvento(evento.Id, "otro titulo", "otro ponente", fecha, urlInvitacion); 147 agenda.ModificarEvento(evento.Id, "otro titulo", "otro ponente", fecha, urlInvitacion);
147 148
148 publicador.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(2)); 149 publicador.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(2));
149 150
150 evento = repository.GetEventosConFecha().First(); 151 evento = repository.GetEventosConFecha().First();
151 Assert.AreEqual("otro titulo", evento.Titulo); 152 Assert.AreEqual("otro titulo", evento.Titulo);
152 Assert.AreEqual("otro ponente", evento.Ponente.Nombre); 153 Assert.AreEqual("otro ponente", evento.Ponente.Nombre);
153 Assert.AreEqual(fecha, evento.Fecha); 154 Assert.AreEqual(fecha, evento.Fecha);
155 var idEventoNoExistente = new Guid("99999999999999999999999999999999"); 156 var idEventoNoExistente = new Guid("99999999999999999999999999999999");
156 Assert.Throws<EventoNotFoundException>( 157 Assert.Throws<EventoNotFoundException>(
157 () => agenda.ModificarEvento(idEventoNoExistente, "algún título", "un ponente", DateTime.Now, urlInvitacion)); 158 () => agenda.ModificarEvento(idEventoNoExistente, "algún título", "un ponente", DateTime.Now, urlInvitacion));
158 } 159 }
159 160
160 [Test] 161 [Test, Ignore("Por ahora no existe el concepto de recordar")]
161 public void Agendar_y_recordar_evento() 162 public void Agendar_y_recordar_evento()
162 { 163 {
163 var publicador1 = new Mock<IPublicador>(); 164 var publicador1 = new Mock<IPublicador>();
164 var publicador2 = new Mock<IPublicador>(); 165 var publicador2 = new Mock<IPublicador>();
165 var recordador1 = new Mock<IRecordador>(); 166
166 167 var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}),
167 var agenda = new Agenda(new CompositePublicador(new[] {publicador1.Object, publicador2.Object}), recordador1.Object,
168 DefaultEventoRepository, DefaultPonenteRepository); 168 DefaultEventoRepository, DefaultPonenteRepository);
169 169
170 agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now, 170 agenda.Agendar("Van para publicar", "jjmontes", DateTime.Now,
171 urlInvitacion); 171 urlInvitacion);
172 172
173 var van = agenda.GetEventosAgendados().Single(v => v.Titulo == "Van para publicar"); 173 var van = agenda.GetEventosAgendados().Single(v => v.Titulo == "Van para publicar");
174 agenda.Recordar(van.Id); 174 //agenda.Recordar(van.Id);
175 175
176 publicador1.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); 176 publicador1.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
177 publicador2.Verify(p => p.Publicar(It.IsAny<Evento>()), Times.Exactly(1)); 177 publicador2.Verify(p => p.Publicar(It.IsAny<IEnumerable<Track>>()), Times.Exactly(1));
178 recordador1.Verify(r => r.Recordar(It.IsAny<Evento>()), Times.Exactly(1)); 178 //recordador1.Verify(r => r.Recordar(It.IsAny<Evento>()), Times.Exactly(1));
179 } 179 }
180 180
181 [Test] 181 [Test]
182 public void Agendar_evento_propuesto() 182 public void Agendar_evento_propuesto()
183 { 183 {
184 var publicador1 = new Mock<IPublicador>(); 184 var publicador1 = new Mock<IPublicador>();
185 var publicador2 = new Mock<IPublicador>(); 185 var publicador2 = new Mock<IPublicador>();
186 var recordador1 = new Mock<IRecordador>(); 186
187 187 var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }),
188 var agenda = new Agenda(new CompositePublicador(new[] { publicador1.Object, publicador2.Object }), recordador1.Object,
189 DefaultEventoRepository, DefaultPonenteRepository); 188 DefaultEventoRepository, DefaultPonenteRepository);
190 189
191 agenda.Proponer("Html 5", "jjmontes", urlInvitacion); 190 agenda.Proponer("Html 5", "jjmontes", urlInvitacion);
192 Assert.AreEqual(1, agenda.GetEventosPropuestos().Count); 191 Assert.AreEqual(1, agenda.GetEventosPropuestos().Count);
193 Assert.AreEqual(0, agenda.GetEventosAgendados().Count); 192 Assert.AreEqual(0, agenda.GetEventosAgendados().Count);