annotate Agendas/trunk/src/Agendas.Twitter/TwitterPublicador.cs @ 272:33e6ee3d1776

Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
author juanjose.montesdeocaarbos
date Fri, 18 Nov 2011 23:09:58 -0300
parents e2c6610b14c7
children
rev   line source
182
beeb48ddb44a Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
nelopauselli
parents: 158
diff changeset
1 using System;
beeb48ddb44a Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
nelopauselli
parents: 158
diff changeset
2 using System.Collections.Generic;
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
3 using System.Linq;
158
734d3f0853bf Manejando configuración de los publicadores con una sección propia en los .config
nelopauselli
parents: 122
diff changeset
4 using AltNetHispano.Agendas.Configurations;
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
5 using AltNetHispano.Agendas.Domain;
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
6 using AltNetHispano.Agendas.Twitter.Writers;
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
7
34
475be11edf56 Ajuste en los nombre de los assemblies y namespaces
nelo@MTEySS.neluz.int
parents: 3
diff changeset
8 namespace AltNetHispano.Agendas.Twitter
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
9 {
87
26d0513a8410 A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents: 34
diff changeset
10 public class TwitterPublicador : IPublicador
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
11 {
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
12 private readonly IDictionary<Accion, ITwitterWriter> _writers;
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
13 private readonly ITwitterAdapter _twitterAdapter;
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
14
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
15 public TwitterPublicador()
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
16 : this(new TwitterAdapter())
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
17 {
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
18 }
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
19
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
20 public TwitterPublicador(ITwitterAdapter twitterAdapter)
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
21 {
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
22 _writers = new Dictionary<Accion, ITwitterWriter>
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
23 {
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
24 {Accion.Proponer, new ProponerTwitterWriter()},
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
25 {Accion.Agendar, new AgendarTwitterWriter()},
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
26 {Accion.Confirmar, new ConfirmarTwitterWriter()},
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
27 {Accion.Publicar, new PublicarTwitterWriter()}
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
28 };
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
29
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
30 _twitterAdapter = twitterAdapter;
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
31 }
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
32
228
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
33 private const int LIMITE_MENSAJE = 134;
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
34
87
26d0513a8410 A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents: 34
diff changeset
35 public void Publicar(IEnumerable<Track> tracks)
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
36 {
158
734d3f0853bf Manejando configuración de los publicadores con una sección propia en los .config
nelopauselli
parents: 122
diff changeset
37 if (!AgendasConfigurationManager.Publicadores.Twitter.Enabled) return;
734d3f0853bf Manejando configuración de los publicadores con una sección propia en los .config
nelopauselli
parents: 122
diff changeset
38
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
39 foreach (var track in tracks)
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
40 {
272
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
41 if (track.Evento.FechaInicio < DateTime.Today || track.Evento.FechaTermino < DateTime.Today)
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
42 {
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
43 var message = string.Empty;
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
44
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
45 message = "Solo se generan twitts de eventos futuros.";
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
46
272
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
47 track.LogAdd(new TrackLog(TrackLogPropietario.Twitter, message, track.Usuario, false));
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
48 }
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
49 else
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
50 {
272
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
51 //Si ya hicimos el twitt de este track, no volvemos a hacerlo
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
52 if (track.Logs.Any(l => l.Propietario == TrackLogPropietario.Twitter && l.Successful)) continue;
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
53
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
54 var twitt = BuildTwitt(track);
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
55 if (twitt.Length > 0)
182
beeb48ddb44a Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
nelopauselli
parents: 158
diff changeset
56 {
272
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
57 try
228
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
58 {
272
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
59 var success = true;
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
60 var message = string.Empty;
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
61
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
62 foreach (var t in twitt)
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
63 {
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
64 string m;
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
65 success &= _twitterAdapter.Update(t, out m);
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
66 message += m;
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
67 }
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
68 track.LogAdd(new TrackLog(TrackLogPropietario.Twitter, message, track.Usuario, success));
228
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
69 }
272
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
70 catch (Exception ex)
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
71 {
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
72 track.LogAdd(new TrackLog(TrackLogPropietario.Twitter, track.Usuario, ex));
33e6ee3d1776 Ticket #181: No twittear eventos pasados. Tests armado, y su corrección. Corrección de otros tests que intentaban twittear con fechas fijas.
juanjose.montesdeocaarbos
parents: 271
diff changeset
73 }
182
beeb48ddb44a Warning con los errores que se guarden en el log del track de un evento durante una notificación (twitter, calendar, blog)
nelopauselli
parents: 158
diff changeset
74 }
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
75 }
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
76 }
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
77 }
108
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
78
228
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
79 private string[] BuildTwitt(Track track)
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
80 {
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
81 ITwitterWriter writer;
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
82 if (!_writers.TryGetValue(track.Accion, out writer))
271
e2c6610b14c7 Ticket #194: Error enviar twit cuando Cancela Evento. Test y Corrección.
juanjose.montesdeocaarbos
parents: 228
diff changeset
83 return new string[0];
228
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
84
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
85 var partes = writer.Write(track).Where(t => !string.IsNullOrWhiteSpace(t)).ToArray();
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
86
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
87 var twitters = new List<string>();
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
88
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
89 string twitter = string.Empty;
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
90 for (int index = 0; index < partes.Length; index++)
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
91 {
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
92 string parte = partes[index];
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
93
228
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
94 var nuevo = twitter + parte;
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
95 if (nuevo.Length < LIMITE_MENSAJE)
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
96 twitter = nuevo;
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
97 else
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
98 {
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
99 if (index<parte.Length-1)
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
100 twitter += "...";
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
101 if (twitters.Any())
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
102 twitter = "..." + twitter;
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
103
228
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
104 twitters.Add(twitter);
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
105 twitter = parte.Trim();
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
106 }
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
107 }
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
108 if (!string.IsNullOrWhiteSpace(twitter))
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
109 {
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
110 if (twitters.Any())
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
111 twitter = "..." + twitter;
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
112 twitters.Add(twitter);
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
113 }
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
114
9f61e8555114 Nombrando a todos los ponentes en los twitter y partiendo los mensajes que superan el máximo permitido
nelopauselli
parents: 182
diff changeset
115 return twitters.ToArray();
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
116 }
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
117 }
3
5f007e266509 code cleanup
nelopauselli
parents: 1
diff changeset
118 }