taskmapper-unfuddle 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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