taskmapper-unfuddle 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.rvmrc +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +16 -0
- data/Gemfile.lock +57 -0
- data/LICENSE +20 -0
- data/README.md +28 -0
- data/Rakefile +42 -0
- data/VERSION +1 -0
- data/lib/provider/comment.rb +45 -0
- data/lib/provider/project.rb +50 -0
- data/lib/provider/ticket.rb +53 -0
- data/lib/provider/unfuddle.rb +39 -0
- data/lib/taskmapper-unfuddle.rb +5 -0
- data/lib/unfuddle/unfuddle-api.rb +153 -0
- data/spec/comments_spec.rb +76 -0
- data/spec/fixtures/comments/0.xml +11 -0
- data/spec/fixtures/comments/2.xml +11 -0
- data/spec/fixtures/comments/3.xml +11 -0
- data/spec/fixtures/comments/create.xml +11 -0
- data/spec/fixtures/comments.xml +13 -0
- data/spec/fixtures/projects/33041.xml +30 -0
- data/spec/fixtures/projects/33042.xml +30 -0
- data/spec/fixtures/projects/create.xml +30 -0
- data/spec/fixtures/projects.xml +32 -0
- data/spec/fixtures/tickets/476814.xml +33 -0
- data/spec/fixtures/tickets/476816.xml +29 -0
- data/spec/fixtures/tickets/476834.xml +31 -0
- data/spec/fixtures/tickets/create.xml +31 -0
- data/spec/fixtures/tickets.xml +433 -0
- data/spec/projects_spec.rb +60 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/taskmapper-unfuddle_spec.rb +27 -0
- data/spec/tickets_spec.rb +77 -0
- data/taskmapper-unfuddle.gemspec +92 -0
- metadata +166 -0
@@ -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éditos virtuales al día para participar en sorteos "de mentiritas" :)
|
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ápida.
|
8
|
+
|
9
|
+
Se debe implementar la funcionalidad para que cada usuario mantenga créditos virtuales. dinero virtual ganado. Además se debe poder generar sorteos virtuales
|
10
|
+
|
11
|
+
También se debe restringir que solamente se pueda participar en sorteos reales con cré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é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ón usa el plugin resful_authentication para toda la parte de registro de usuarios y manejo de login y autenticació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ó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ó 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á congelado en la versión 2.2.2
|
68
|
+
La última versión estable de Rails es la 2.3.4. Así que se debe actualizar la versió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ólares de cada crédito.
|
97
|
+
También se deben definir settings para el aporte real(neto) en pesos y en dólares que cada cré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á un esquema de generación automática de sorteos con parámetros establecidos.
|
125
|
+
Por ejemplo: nombre del "Sorteo 100 jugadores, mejores 5 ganan", máximo de tickets 100, mínimo de tickets 50, buy-in 1.
|
126
|
+
|
127
|
+
Debe crearse el modelo RaffleTemplate que manejará 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é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á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ínima de tickets comprados (min_tickets) el sorteo debe invalidarse y los cŕ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é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ón sobre el atributo "credits" de un jugador debe almacenar un registro manejado por el modelo CredidTransaction, debe especificar el tipo de transacción, la cantidad de créditos, la fecha y hora, la candidad créditos involucrados en la transacció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ó luego dado que no serví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ó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ó STI porque no era necesario, en cambio se creó 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á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á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ó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ódulo para la administració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ís en el que vive. Debe proveerse soporte para dicha funcionalidad.
|
407
|
+
Los sorteos también deben tener un atributo que indica en que moneda se está 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
|
data/spec/spec_helper.rb
ADDED
@@ -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
|