taskmapper-unfuddle 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,433 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <tickets type="array">
3
+ <ticket>
4
+ <assignee-id type="integer">44282</assignee-id>
5
+ <component-id type="integer" nil="true"></component-id>
6
+ <description>Los jugadores pueden cargar una cantidad definida de cr&#233;ditos virtuales al d&#237;a para participar en sorteos &quot;de mentiritas&quot; :)
7
+ Esto va a ayudar a que los jugadores experimenten el funcionamiento del sistema de una manera cercana a la real, se motiven a jugar sorteos reales y en general se genere contenido en el sitio de manera mas r&#225;pida.
8
+
9
+ Se debe implementar la funcionalidad para que cada usuario mantenga cr&#233;ditos virtuales. dinero virtual ganado. Adem&#225;s se debe poder generar sorteos virtuales
10
+
11
+ Tambi&#233;n se debe restringir que solamente se pueda participar en sorteos reales con cr&#233;ditos reales y viceversa.</description>
12
+ <description-format>markdown</description-format>
13
+ <due-on type="date" nil="true"></due-on>
14
+ <field1-value-id type="integer" nil="true"></field1-value-id>
15
+ <field2-value-id type="integer" nil="true"></field2-value-id>
16
+ <field3-value-id type="integer" nil="true"></field3-value-id>
17
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
18
+ <hours-estimate-initial type="float">0.0</hours-estimate-initial>
19
+ <id type="integer">476814</id>
20
+ <milestone-id type="integer">3</milestone-id>
21
+ <number type="integer">13</number>
22
+ <priority>5</priority>
23
+ <project-id type="integer">33041</project-id>
24
+ <reporter-id type="integer">44282</reporter-id>
25
+ <resolution>fixed</resolution>
26
+ <resolution-description></resolution-description>
27
+ <resolution-description-format>markdown</resolution-description-format>
28
+ <severity-id type="integer" nil="true"></severity-id>
29
+ <status>resolved</status>
30
+ <summary>Adicionar funcionalidad para jugar con cr&#233;ditos virtuales.</summary>
31
+ <version-id type="integer" nil="true"></version-id>
32
+ <created-at>2009-03-18T03:55:49Z</created-at>
33
+ <updated-at>2009-11-23T22:55:50Z</updated-at>
34
+ </ticket>
35
+ <ticket>
36
+ <assignee-id type="integer">44282</assignee-id>
37
+ <component-id type="integer" nil="true"></component-id>
38
+ <description>Actualmente la aplicaci&#243;n usa el plugin resful_authentication para toda la parte de registro de usuarios y manejo de login y autenticaci&#243;n.
39
+ Este plugin es demasiado obstrusivo.
40
+ Buscar y reemplazar este plugin por uno menos obstrusivo o bien implementar nuestro propio mecanismo de login y autenticaci&#243;n en caso de ser requerido.</description>
41
+ <description-format>markdown</description-format>
42
+ <due-on type="date" nil="true"></due-on>
43
+ <field1-value-id type="integer" nil="true"></field1-value-id>
44
+ <field2-value-id type="integer" nil="true"></field2-value-id>
45
+ <field3-value-id type="integer" nil="true"></field3-value-id>
46
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
47
+ <hours-estimate-initial type="float">0.0</hours-estimate-initial>
48
+ <id type="integer">476815</id>
49
+ <milestone-id type="integer">3</milestone-id>
50
+ <number type="integer">14</number>
51
+ <priority>5</priority>
52
+ <project-id type="integer">33041</project-id>
53
+ <reporter-id type="integer">44282</reporter-id>
54
+ <resolution>fixed</resolution>
55
+ <resolution-description>Se implement&#243; un mecanismo propio.</resolution-description>
56
+ <resolution-description-format>markdown</resolution-description-format>
57
+ <severity-id type="integer" nil="true"></severity-id>
58
+ <status>closed</status>
59
+ <summary>Reemplazar el plugin restful_authentication </summary>
60
+ <version-id type="integer" nil="true"></version-id>
61
+ <created-at>2009-03-18T06:11:36Z</created-at>
62
+ <updated-at>2009-04-13T01:07:44Z</updated-at>
63
+ </ticket>
64
+ <ticket>
65
+ <assignee-id type="integer">44282</assignee-id>
66
+ <component-id type="integer" nil="true"></component-id>
67
+ <description>Actualmente Rails est&#225; congelado en la versi&#243;n 2.2.2
68
+ La &#250;ltima versi&#243;n estable de Rails es la 2.3.4. As&#237; que se debe actualizar la versi&#243;n de Rails.</description>
69
+ <description-format>markdown</description-format>
70
+ <due-on type="date" nil="true"></due-on>
71
+ <field1-value-id type="integer" nil="true"></field1-value-id>
72
+ <field2-value-id type="integer" nil="true"></field2-value-id>
73
+ <field3-value-id type="integer" nil="true"></field3-value-id>
74
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
75
+ <hours-estimate-initial type="float">0.0</hours-estimate-initial>
76
+ <id type="integer">476816</id>
77
+ <milestone-id type="integer">3</milestone-id>
78
+ <number type="integer">15</number>
79
+ <priority>5</priority>
80
+ <project-id type="integer">33041</project-id>
81
+ <reporter-id type="integer">44282</reporter-id>
82
+ <resolution>fixed</resolution>
83
+ <resolution-description></resolution-description>
84
+ <resolution-description-format>markdown</resolution-description-format>
85
+ <severity-id type="integer" nil="true"></severity-id>
86
+ <status>closed</status>
87
+ <summary>Actualizar a Rails 2.3.4</summary>
88
+ <version-id type="integer" nil="true"></version-id>
89
+ <created-at>2009-03-18T06:12:59Z</created-at>
90
+ <updated-at>2009-11-11T13:55:43Z</updated-at>
91
+ </ticket>
92
+ <ticket>
93
+ <assignee-id type="integer">44282</assignee-id>
94
+ <component-id type="integer" nil="true"></component-id>
95
+ <description>Adicionar al proyecto el plugin Settings.
96
+ Crear settings que definen el valor en pesos y en d&#243;lares de cada cr&#233;dito.
97
+ Tambi&#233;n se deben definir settings para el aporte real(neto) en pesos y en d&#243;lares que cada cr&#233;dito hace al pot de un raffle.</description>
98
+ <description-format>markdown</description-format>
99
+ <due-on type="date">2009-02-22</due-on>
100
+ <field1-value-id type="integer" nil="true"></field1-value-id>
101
+ <field2-value-id type="integer" nil="true"></field2-value-id>
102
+ <field3-value-id type="integer" nil="true"></field3-value-id>
103
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
104
+ <hours-estimate-initial type="float">0.0</hours-estimate-initial>
105
+ <id type="integer">476802</id>
106
+ <milestone-id type="integer">3</milestone-id>
107
+ <number type="integer">1</number>
108
+ <priority>4</priority>
109
+ <project-id type="integer">33041</project-id>
110
+ <reporter-id type="integer">44282</reporter-id>
111
+ <resolution>fixed</resolution>
112
+ <resolution-description></resolution-description>
113
+ <resolution-description-format>markdown</resolution-description-format>
114
+ <severity-id type="integer" nil="true"></severity-id>
115
+ <status>closed</status>
116
+ <summary>Adicionar el plugin Settings</summary>
117
+ <version-id type="integer" nil="true"></version-id>
118
+ <created-at>2009-02-15T18:05:38Z</created-at>
119
+ <updated-at>2009-03-02T04:27:05Z</updated-at>
120
+ </ticket>
121
+ <ticket>
122
+ <assignee-id type="integer">44282</assignee-id>
123
+ <component-id type="integer" nil="true"></component-id>
124
+ <description>El sistema tendr&#225; un esquema de generaci&#243;n autom&#225;tica de sorteos con par&#225;metros establecidos.
125
+ Por ejemplo: nombre del &quot;Sorteo 100 jugadores, mejores 5 ganan&quot;, m&#225;ximo de tickets 100, m&#237;nimo de tickets 50, buy-in 1.
126
+
127
+ Debe crearse el modelo RaffleTemplate que manejar&#225; los atributos generales para crear sorteos con attributos iguales.</description>
128
+ <description-format>markdown</description-format>
129
+ <due-on type="date" nil="true"></due-on>
130
+ <field1-value-id type="integer" nil="true"></field1-value-id>
131
+ <field2-value-id type="integer" nil="true"></field2-value-id>
132
+ <field3-value-id type="integer" nil="true"></field3-value-id>
133
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
134
+ <hours-estimate-initial type="float">0.0</hours-estimate-initial>
135
+ <id type="integer">476803</id>
136
+ <milestone-id type="integer">3</milestone-id>
137
+ <number type="integer">2</number>
138
+ <priority>4</priority>
139
+ <project-id type="integer">33041</project-id>
140
+ <reporter-id type="integer">44282</reporter-id>
141
+ <resolution>fixed</resolution>
142
+ <resolution-description></resolution-description>
143
+ <resolution-description-format>markdown</resolution-description-format>
144
+ <severity-id type="integer" nil="true"></severity-id>
145
+ <status>closed</status>
146
+ <summary>Crear el modelo RaffleTemplate</summary>
147
+ <version-id type="integer" nil="true"></version-id>
148
+ <created-at>2009-02-15T18:13:07Z</created-at>
149
+ <updated-at>2009-03-04T04:03:53Z</updated-at>
150
+ </ticket>
151
+ <ticket>
152
+ <assignee-id type="integer">44282</assignee-id>
153
+ <component-id type="integer" nil="true"></component-id>
154
+ <description>Crear en el modelo Raffle un m&#233;todo que aleatoriamente marque los tickets ganadores.
155
+ Debe tenerse en cuenta el valor max_winners.</description>
156
+ <description-format>markdown</description-format>
157
+ <due-on type="date" nil="true"></due-on>
158
+ <field1-value-id type="integer" nil="true"></field1-value-id>
159
+ <field2-value-id type="integer" nil="true"></field2-value-id>
160
+ <field3-value-id type="integer" nil="true"></field3-value-id>
161
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
162
+ <hours-estimate-initial type="float">0.0</hours-estimate-initial>
163
+ <id type="integer">476804</id>
164
+ <milestone-id type="integer">3</milestone-id>
165
+ <number type="integer">3</number>
166
+ <priority>4</priority>
167
+ <project-id type="integer">33041</project-id>
168
+ <reporter-id type="integer">44282</reporter-id>
169
+ <resolution>fixed</resolution>
170
+ <resolution-description></resolution-description>
171
+ <resolution-description-format>markdown</resolution-description-format>
172
+ <severity-id type="integer" nil="true"></severity-id>
173
+ <status>closed</status>
174
+ <summary>Implementar funcionalidad para generar ganaradores.</summary>
175
+ <version-id type="integer" nil="true"></version-id>
176
+ <created-at>2009-02-15T18:35:20Z</created-at>
177
+ <updated-at>2009-03-03T02:42:12Z</updated-at>
178
+ </ticket>
179
+ <ticket>
180
+ <assignee-id type="integer">44282</assignee-id>
181
+ <component-id type="integer" nil="true"></component-id>
182
+ <description>Definir cu&#225;les son los posibles estados de un sorteo.
183
+ Utilizar el plugin act_as_state_machine el cual ya se encuentra adicionado el proyecto para definir dichos estados en el modelo Raffle.</description>
184
+ <description-format>markdown</description-format>
185
+ <due-on type="date" nil="true"></due-on>
186
+ <field1-value-id type="integer" nil="true"></field1-value-id>
187
+ <field2-value-id type="integer" nil="true"></field2-value-id>
188
+ <field3-value-id type="integer" nil="true"></field3-value-id>
189
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
190
+ <hours-estimate-initial type="float">0.0</hours-estimate-initial>
191
+ <id type="integer">476805</id>
192
+ <milestone-id type="integer">3</milestone-id>
193
+ <number type="integer">4</number>
194
+ <priority>4</priority>
195
+ <project-id type="integer">33041</project-id>
196
+ <reporter-id type="integer">44282</reporter-id>
197
+ <resolution>fixed</resolution>
198
+ <resolution-description></resolution-description>
199
+ <resolution-description-format>markdown</resolution-description-format>
200
+ <severity-id type="integer" nil="true"></severity-id>
201
+ <status>closed</status>
202
+ <summary>Definir los posibles estados de un sorteo.</summary>
203
+ <version-id type="integer" nil="true"></version-id>
204
+ <created-at>2009-02-15T18:39:30Z</created-at>
205
+ <updated-at>2009-03-03T03:47:27Z</updated-at>
206
+ </ticket>
207
+ <ticket>
208
+ <assignee-id type="integer">44282</assignee-id>
209
+ <component-id type="integer" nil="true"></component-id>
210
+ <description>Cuando un sorteo no cumple con la cantidad m&#237;nima de tickets comprados (min_tickets) el sorteo debe invalidarse y los c&#341;editos deben volver a sumarse los players.</description>
211
+ <description-format>markdown</description-format>
212
+ <due-on type="date" nil="true"></due-on>
213
+ <field1-value-id type="integer" nil="true"></field1-value-id>
214
+ <field2-value-id type="integer" nil="true"></field2-value-id>
215
+ <field3-value-id type="integer" nil="true"></field3-value-id>
216
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
217
+ <hours-estimate-initial type="float">0.0</hours-estimate-initial>
218
+ <id type="integer">476806</id>
219
+ <milestone-id type="integer">3</milestone-id>
220
+ <number type="integer">5</number>
221
+ <priority>4</priority>
222
+ <project-id type="integer">33041</project-id>
223
+ <reporter-id type="integer">44282</reporter-id>
224
+ <resolution>fixed</resolution>
225
+ <resolution-description></resolution-description>
226
+ <resolution-description-format>markdown</resolution-description-format>
227
+ <severity-id type="integer" nil="true"></severity-id>
228
+ <status>closed</status>
229
+ <summary>Implementar m&#233;todo para invalidar un sorteo debido a pocos tickets.</summary>
230
+ <version-id type="integer" nil="true"></version-id>
231
+ <created-at>2009-02-15T18:41:26Z</created-at>
232
+ <updated-at>2009-03-05T04:24:56Z</updated-at>
233
+ </ticket>
234
+ <ticket>
235
+ <assignee-id type="integer">44282</assignee-id>
236
+ <component-id type="integer" nil="true"></component-id>
237
+ <description>Cada operaci&#243;n sobre el atributo &quot;credits&quot; de un jugador debe almacenar un registro manejado por el modelo CredidTransaction, debe especificar el tipo de transacci&#243;n, la cantidad de cr&#233;ditos, la fecha y hora, la candidad cr&#233;ditos involucrados en la transacci&#243;n.</description>
238
+ <description-format>markdown</description-format>
239
+ <due-on type="date" nil="true"></due-on>
240
+ <field1-value-id type="integer" nil="true"></field1-value-id>
241
+ <field2-value-id type="integer" nil="true"></field2-value-id>
242
+ <field3-value-id type="integer" nil="true"></field3-value-id>
243
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
244
+ <hours-estimate-initial type="float">0.0</hours-estimate-initial>
245
+ <id type="integer">476807</id>
246
+ <milestone-id type="integer">3</milestone-id>
247
+ <number type="integer">6</number>
248
+ <priority>4</priority>
249
+ <project-id type="integer">33041</project-id>
250
+ <reporter-id type="integer">44282</reporter-id>
251
+ <resolution>invalid</resolution>
252
+ <resolution-description>Se creo este modelo pero se elimin&#243; luego dado que no serv&#237;a para nada.</resolution-description>
253
+ <resolution-description-format>markdown</resolution-description-format>
254
+ <severity-id type="integer" nil="true"></severity-id>
255
+ <status>closed</status>
256
+ <summary>Crear el modelo CreditTransaction.</summary>
257
+ <version-id type="integer" nil="true"></version-id>
258
+ <created-at>2009-02-15T18:43:45Z</created-at>
259
+ <updated-at>2009-11-11T13:56:46Z</updated-at>
260
+ </ticket>
261
+ <ticket>
262
+ <assignee-id type="integer">44282</assignee-id>
263
+ <component-id type="integer" nil="true"></component-id>
264
+ <description>Cada vez que un jugador decida retirar una cantidad de dinero de su balance, debe almacenarse un objeto Withdrawal. Debe guardarse la fecha y hora, la cantidad retirada y debe crearse en la tabla un campo type tipo string para implementarse luego el patr&#243;n Herencia Simple de Tabla (STI).
265
+ </description>
266
+ <description-format>markdown</description-format>
267
+ <due-on type="date" nil="true"></due-on>
268
+ <field1-value-id type="integer" nil="true"></field1-value-id>
269
+ <field2-value-id type="integer" nil="true"></field2-value-id>
270
+ <field3-value-id type="integer" nil="true"></field3-value-id>
271
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
272
+ <hours-estimate-initial type="float">0.0</hours-estimate-initial>
273
+ <id type="integer">476808</id>
274
+ <milestone-id type="integer">3</milestone-id>
275
+ <number type="integer">7</number>
276
+ <priority>4</priority>
277
+ <project-id type="integer">33041</project-id>
278
+ <reporter-id type="integer">44282</reporter-id>
279
+ <resolution>fixed</resolution>
280
+ <resolution-description>No se implement&#243; STI porque no era necesario, en cambio se cre&#243; un campo status para determinar si el withdrawal fue exitoso o no.</resolution-description>
281
+ <resolution-description-format>markdown</resolution-description-format>
282
+ <severity-id type="integer" nil="true"></severity-id>
283
+ <status>closed</status>
284
+ <summary>Crear el modelo Withdrawal.</summary>
285
+ <version-id type="integer" nil="true"></version-id>
286
+ <created-at>2009-02-15T18:48:36Z</created-at>
287
+ <updated-at>2009-11-11T14:04:15Z</updated-at>
288
+ </ticket>
289
+ <ticket>
290
+ <assignee-id type="integer">44282</assignee-id>
291
+ <component-id type="integer" nil="true"></component-id>
292
+ <description>Deben implementarse tareas que ser&#225;n llamados por un proceso en background (cron?) para:
293
+
294
+ 1. Mover los sorteos con open_time cumplido a estado 'opened'.
295
+ 2. Mover los sorteos con close_time cumplido a estado 'closed'.
296
+ 3. Mover los sorteos con condiciones para ser cancelados a estado 'cancelled'.
297
+ 4. Generar ganaradores para los sorteos con play_time cumplido. Estos no necesitan moverse a estado 'played' porque al generarse ganadores el sorteo se mueve automaticamente a dicho estado.</description>
298
+ <description-format>markdown</description-format>
299
+ <due-on type="date" nil="true"></due-on>
300
+ <field1-value-id type="integer" nil="true"></field1-value-id>
301
+ <field2-value-id type="integer" nil="true"></field2-value-id>
302
+ <field3-value-id type="integer" nil="true"></field3-value-id>
303
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
304
+ <hours-estimate-initial type="float">0.0</hours-estimate-initial>
305
+ <id type="integer">476811</id>
306
+ <milestone-id type="integer">3</milestone-id>
307
+ <number type="integer">10</number>
308
+ <priority>4</priority>
309
+ <project-id type="integer">33041</project-id>
310
+ <reporter-id type="integer">44282</reporter-id>
311
+ <resolution>fixed</resolution>
312
+ <resolution-description></resolution-description>
313
+ <resolution-description-format>markdown</resolution-description-format>
314
+ <severity-id type="integer" nil="true"></severity-id>
315
+ <status>resolved</status>
316
+ <summary>Implementar tareas para cambiar los estados de los sorteos.</summary>
317
+ <version-id type="integer" nil="true"></version-id>
318
+ <created-at>2009-03-02T15:30:46Z</created-at>
319
+ <updated-at>2009-11-20T14:10:50Z</updated-at>
320
+ </ticket>
321
+ <ticket>
322
+ <assignee-id type="integer" nil="true"></assignee-id>
323
+ <component-id type="integer" nil="true"></component-id>
324
+ <description>Crear la p&#225;gina a donde se dirigen los usuarios luego de ser logeados.</description>
325
+ <description-format>markdown</description-format>
326
+ <due-on type="date" nil="true"></due-on>
327
+ <field1-value-id type="integer" nil="true"></field1-value-id>
328
+ <field2-value-id type="integer" nil="true"></field2-value-id>
329
+ <field3-value-id type="integer" nil="true"></field3-value-id>
330
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
331
+ <hours-estimate-initial type="float">0.0</hours-estimate-initial>
332
+ <id type="integer">476809</id>
333
+ <milestone-id type="integer">3</milestone-id>
334
+ <number type="integer">8</number>
335
+ <priority>3</priority>
336
+ <project-id type="integer">33041</project-id>
337
+ <reporter-id type="integer">44282</reporter-id>
338
+ <resolution></resolution>
339
+ <resolution-description></resolution-description>
340
+ <resolution-description-format>markdown</resolution-description-format>
341
+ <severity-id type="integer" nil="true"></severity-id>
342
+ <status>new</status>
343
+ <summary>Crear el home page.</summary>
344
+ <version-id type="integer" nil="true"></version-id>
345
+ <created-at>2009-02-25T05:01:51Z</created-at>
346
+ <updated-at>2009-02-25T05:01:51Z</updated-at>
347
+ </ticket>
348
+ <ticket>
349
+ <assignee-id type="integer" nil="true"></assignee-id>
350
+ <component-id type="integer" nil="true"></component-id>
351
+ <description>Crear una interfase de administraci&#243;n de Settings.
352
+ Debe modificar los valores de la tabla settings.</description>
353
+ <description-format>markdown</description-format>
354
+ <due-on type="date" nil="true"></due-on>
355
+ <field1-value-id type="integer" nil="true"></field1-value-id>
356
+ <field2-value-id type="integer" nil="true"></field2-value-id>
357
+ <field3-value-id type="integer" nil="true"></field3-value-id>
358
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
359
+ <hours-estimate-initial type="float">0.0</hours-estimate-initial>
360
+ <id type="integer">476810</id>
361
+ <milestone-id type="integer">3</milestone-id>
362
+ <number type="integer">9</number>
363
+ <priority>2</priority>
364
+ <project-id type="integer">33041</project-id>
365
+ <reporter-id type="integer">44282</reporter-id>
366
+ <resolution></resolution>
367
+ <resolution-description></resolution-description>
368
+ <resolution-description-format>markdown</resolution-description-format>
369
+ <severity-id type="integer" nil="true"></severity-id>
370
+ <status>new</status>
371
+ <summary>Administrador de Settings.</summary>
372
+ <version-id type="integer" nil="true"></version-id>
373
+ <created-at>2009-03-02T04:19:24Z</created-at>
374
+ <updated-at>2009-03-02T04:20:47Z</updated-at>
375
+ </ticket>
376
+ <ticket>
377
+ <assignee-id type="integer" nil="true"></assignee-id>
378
+ <component-id type="integer" nil="true"></component-id>
379
+ <description>Debe crearse un m&#243;dulo para la administraci&#243;n de RaffleTemplates (CRUD).</description>
380
+ <description-format>markdown</description-format>
381
+ <due-on type="date" nil="true"></due-on>
382
+ <field1-value-id type="integer" nil="true"></field1-value-id>
383
+ <field2-value-id type="integer" nil="true"></field2-value-id>
384
+ <field3-value-id type="integer" nil="true"></field3-value-id>
385
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
386
+ <hours-estimate-initial type="float">0.0</hours-estimate-initial>
387
+ <id type="integer">476812</id>
388
+ <milestone-id type="integer">3</milestone-id>
389
+ <number type="integer">11</number>
390
+ <priority>2</priority>
391
+ <project-id type="integer">33041</project-id>
392
+ <reporter-id type="integer">44282</reporter-id>
393
+ <resolution></resolution>
394
+ <resolution-description></resolution-description>
395
+ <resolution-description-format>markdown</resolution-description-format>
396
+ <severity-id type="integer" nil="true"></severity-id>
397
+ <status>new</status>
398
+ <summary>Administrador de RaffleTemplates.</summary>
399
+ <version-id type="integer" nil="true"></version-id>
400
+ <created-at>2009-03-04T03:37:22Z</created-at>
401
+ <updated-at>2009-03-04T03:37:22Z</updated-at>
402
+ </ticket>
403
+ <ticket>
404
+ <assignee-id type="integer" nil="true"></assignee-id>
405
+ <component-id type="integer" nil="true"></component-id>
406
+ <description>Cada player tiene una moneda establecida que es determinada por el pa&#237;s en el que vive. Debe proveerse soporte para dicha funcionalidad.
407
+ Los sorteos tambi&#233;n deben tener un atributo que indica en que moneda se est&#225; jugando el sorteo.
408
+ Los players solamente pueden comprar tickets en los sorteos que sean de su misma moneda.
409
+ </description>
410
+ <description-format>markdown</description-format>
411
+ <due-on type="date" nil="true"></due-on>
412
+ <field1-value-id type="integer" nil="true"></field1-value-id>
413
+ <field2-value-id type="integer" nil="true"></field2-value-id>
414
+ <field3-value-id type="integer" nil="true"></field3-value-id>
415
+ <hours-estimate-current type="float">0.0</hours-estimate-current>
416
+ <hours-estimate-initial type="float">0.0</hours-estimate-initial>
417
+ <id type="integer">476813</id>
418
+ <milestone-id type="integer">3</milestone-id>
419
+ <number type="integer">12</number>
420
+ <priority>1</priority>
421
+ <project-id type="integer">33041</project-id>
422
+ <reporter-id type="integer">44282</reporter-id>
423
+ <resolution></resolution>
424
+ <resolution-description></resolution-description>
425
+ <resolution-description-format>markdown</resolution-description-format>
426
+ <severity-id type="integer" nil="true"></severity-id>
427
+ <status>new</status>
428
+ <summary>Definir moneda usada en el sorteo y moneda usada por el jugador.</summary>
429
+ <version-id type="integer" nil="true"></version-id>
430
+ <created-at>2009-03-05T04:30:50Z</created-at>
431
+ <updated-at>2009-11-11T13:57:21Z</updated-at>
432
+ </ticket>
433
+ </tickets>
@@ -0,0 +1,60 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe TaskMapper::Provider::Unfuddle::Project do
4
+ before(:all) do
5
+ @headers = {'Authorization' => 'Basic Zm9vOjAwMDAwMA==', 'Accept' => 'application/xml'}
6
+ @headers_post_put = {'Authorization' => 'Basic Zm9vOjAwMDAwMA==', 'Content-Type' => 'application/xml'}
7
+ end
8
+ let(:project_id) { 33041 }
9
+ let(:taskmapper) { TaskMapper.new(:unfuddle, {:username => 'foo', :password => '000000', :account => 'taskmapper'}) }
10
+ let(:project_class) { TaskMapper::Provider::Unfuddle::Project }
11
+
12
+ describe "Retrieving projects" do
13
+ before(:each) do
14
+ ActiveResource::HttpMock.respond_to do |mock|
15
+ mock.get '/api/v1/projects.xml', @headers, fixture_for('projects'), 200
16
+ mock.get '/api/v1/projects/33041.xml', @headers, fixture_for('projects/33041'), 200
17
+ end
18
+ end
19
+
20
+ context "when calling #projects to an instance of taskmapper" do
21
+ subject { taskmapper.projects }
22
+ it { should be_an_instance_of Array }
23
+ it { subject.first.should be_an_instance_of project_class }
24
+ end
25
+
26
+ context "when calling #projects with an array of id's" do
27
+ subject { taskmapper.projects([project_id]) }
28
+ it { should be_an_instance_of Array }
29
+ it { subject.first.should be_an_instance_of project_class }
30
+ it { subject.first.id.should be_eql project_id }
31
+ end
32
+
33
+ context "when calling #projects with a hash attributes" do
34
+ subject { taskmapper.projects(:id => project_id) }
35
+ it { should be_an_instance_of Array }
36
+ it { subject.first.should be_an_instance_of project_class }
37
+ it { subject.first.id.should be_eql project_id }
38
+ end
39
+ end
40
+
41
+ describe "Retrieving a single project" do
42
+ context "when calling #project with an id" do
43
+ subject { taskmapper.project project_id }
44
+ it { should be_an_instance_of project_class }
45
+ it { subject.id.should be_eql project_id }
46
+ end
47
+
48
+ context "when calling #project with hash attributes" do
49
+ subject { taskmapper.project :id => project_id }
50
+ it { should be_an_instance_of project_class }
51
+ it { subject.id.should be_eql project_id }
52
+ end
53
+ end
54
+
55
+ describe "Update and create" do
56
+ context "when calling #save" do
57
+ pending
58
+ end
59
+ end
60
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,15 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'rubygems'
4
+ require 'taskmapper'
5
+ require 'taskmapper-unfuddle'
6
+ require 'active_resource/http_mock'
7
+ require 'rspec'
8
+
9
+ RSpec.configure do |config|
10
+ config.color_enabled = true
11
+ end
12
+
13
+ def fixture_for(name)
14
+ File.read(File.dirname(__FILE__) + '/fixtures/' + name + '.xml')
15
+ end
@@ -0,0 +1,27 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "TaskMapper::Provider::Unfuddle" do
4
+ before(:each) do
5
+ @taskmapper = TaskMapper.new(:unfuddle, {:account => 'taskmapper', :username => 'foo', :password => '000000'})
6
+ headers = {'Authorization' => 'Basic Zm9vOjAwMDAwMA==', 'Accept' => 'application/xml'}
7
+ ActiveResource::HttpMock.respond_to do |mock|
8
+ mock.get '/api/v1/projects.xml', headers, fixture_for('projects'), 200
9
+ end
10
+ end
11
+
12
+ it "should be able to instantiate a new instance" do
13
+
14
+ @taskmapper.should be_an_instance_of(TaskMapper)
15
+ @taskmapper.should be_a_kind_of(TaskMapper::Provider::Unfuddle)
16
+ end
17
+
18
+ it "should allow to use SSL" do
19
+ @taskmapper = TaskMapper.new(:unfuddle, {:account => 'taskmapper', :username => 'foo', :password => '000000', :protocol => 'https'})
20
+ @taskmapper.provider::TICKET_API.site.should be_an_instance_of(URI::HTTPS)
21
+ @taskmapper.provider::PROJECT_API.site.should be_an_instance_of(URI::HTTPS)
22
+ end
23
+
24
+ it "should return true for a valid authentication" do
25
+ @taskmapper.valid?.should be_true
26
+ end
27
+ end
@@ -0,0 +1,77 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe TaskMapper::Provider::Unfuddle::Ticket do
4
+ before(:each) do
5
+ @headers = {'Authorization' => 'Basic Zm9vOjAwMDAwMA==', 'Accept' => 'application/xml'}
6
+ @headers_post_put = {'Authorization' => 'Basic Zm9vOjAwMDAwMA==', 'Content-Type' => 'application/xml'}
7
+ ActiveResource::HttpMock.respond_to do |mock|
8
+ mock.get '/api/v1/projects/33041.xml', @headers, fixture_for('projects/33041'), 200
9
+ end
10
+ @project = taskmapper.project project_id
11
+ end
12
+ let(:taskmapper) { TaskMapper.new(:unfuddle, :account => 'taskmapper', :username => 'foo', :password => '000000') }
13
+ let(:project_id) { 33041 }
14
+ let(:ticket_id) { 476816 }
15
+ let(:ticket_class) { TaskMapper::Provider::Unfuddle::Ticket }
16
+
17
+ describe "Retrieving tickets" do
18
+ before(:each) do
19
+ ActiveResource::HttpMock.respond_to do |mock|
20
+ mock.get '/api/v1/projects/33041/tickets.xml', @headers, fixture_for('tickets'), 200
21
+ mock.get '/api/v1/projects/33041/tickets/476816.xml', @headers, fixture_for('tickets/476816'), 200
22
+ end
23
+ end
24
+
25
+ context "when calling #tickets to a project instance" do
26
+ subject { @project.tickets }
27
+ it { should be_an_instance_of Array }
28
+ it { subject.first.should be_an_instance_of ticket_class }
29
+ end
30
+
31
+ context "when calling #tickets with an array of id's" do
32
+ subject { @project.tickets [ticket_id] }
33
+ it { should be_an_instance_of Array }
34
+ it { subject.first.should be_an_instance_of ticket_class }
35
+ it { subject.first.id.should be_eql ticket_id }
36
+ end
37
+
38
+ context "when calling #tickets with a hash attributes" do
39
+ subject { @project.tickets :id => ticket_id }
40
+ it { should be_an_instance_of Array }
41
+ it { subject.first.should be_an_instance_of ticket_class }
42
+ it { subject.first.id.should be_eql ticket_id }
43
+ end
44
+ end
45
+
46
+ describe "Retrieving a single ticket" do
47
+ before(:each) do
48
+ ActiveResource::HttpMock.respond_to do |mock|
49
+ mock.get '/api/v1/projects/33041/tickets.xml', @headers, fixture_for('tickets'), 200
50
+ mock.get '/api/v1/projects/33041/tickets/476816.xml', @headers, fixture_for('tickets/476816'), 200
51
+ end
52
+ end
53
+
54
+ context "when calling #ticket with a ticket_id" do
55
+ subject { @project.ticket ticket_id }
56
+ it { should be_an_instance_of ticket_class }
57
+ it { subject.id.should be_eql ticket_id }
58
+ end
59
+
60
+ context "when calling #ticket with a attributes" do
61
+ subject { @project.ticket :id => ticket_id }
62
+ it { should be_an_instance_of ticket_class }
63
+ it { subject.id.should be_eql ticket_id }
64
+ end
65
+ end
66
+
67
+ describe "Update and create" do
68
+ context "when calling #save" do
69
+ pending
70
+ end
71
+
72
+ context "when calling #ticket!" do
73
+ pending
74
+ end
75
+ end
76
+
77
+ end