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.
- 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
|