osm 0.5.0 → 0.6.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/CHANGELOG.md +16 -0
- data/README.md +2 -2
- data/lib/osm/badge.rb +191 -32
- data/lib/osm/register.rb +5 -4
- data/spec/osm/badge_spec.rb +293 -26
- data/version.rb +1 -1
- metadata +2 -2
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
## Version 0.6.0
|
2
|
+
|
3
|
+
* Badge::Data
|
4
|
+
* completed attribute is now a Fixnum not Boolean (fixes staged badges)
|
5
|
+
* Add awarded attribute (the last level awarded)
|
6
|
+
* Add due? method to tell if the badge is due
|
7
|
+
* Add started? method to tell if the badge has been started
|
8
|
+
* Add started method to tell which stage has been started
|
9
|
+
* Add first\_name and last\_name attributes
|
10
|
+
* Add mark\_awarded method
|
11
|
+
* Add mark\_due method
|
12
|
+
* Badge
|
13
|
+
* Make get\_badge\_data\_for\_section an instance not class method (called get\_data\_for\_section)
|
14
|
+
* Add get\_summary\_for\_section(api, section, term=nil, options={}) method
|
15
|
+
* Add optional section\_type parameter to get\_badges\_for\_section method
|
16
|
+
|
1
17
|
## Version 0.5.0
|
2
18
|
|
3
19
|
* Code breaking changes to DueBadges:
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
##Build State
|
6
6
|
This project uses continuous integration to help ensure that a quality product is delivered.
|
7
7
|
Travis CI monitors two branches (versions) of the code - Master (which is what gets released)
|
8
|
-
and Staging (which is what is currently being
|
8
|
+
and Staging (which is what is currently being developed ready for moving to master).
|
9
9
|
|
10
10
|
Master [](http://travis-ci.org/robertgauld/osm)
|
11
11
|
|
@@ -32,7 +32,7 @@ Use the [Online Scout Manager](https://www.onlinescoutmanager.co.uk) API.
|
|
32
32
|
Add to your Gemfile and run the `bundle` command to install it.
|
33
33
|
|
34
34
|
```ruby
|
35
|
-
gem 'osm', '~> 0.
|
35
|
+
gem 'osm', '~> 0.6.0'
|
36
36
|
```
|
37
37
|
|
38
38
|
Configure the gem during the initalization of the app (e.g. if using rails then config/initializers/osm.rb would look like):
|
data/lib/osm/badge.rb
CHANGED
@@ -7,7 +7,7 @@ module Osm
|
|
7
7
|
# @return [String] the name of the badge
|
8
8
|
# @!attribute [rw] requirement_notes
|
9
9
|
# @return [String] a description of the badge
|
10
|
-
# @!attribute [rw]
|
10
|
+
# @!attribute [rw] osm_key
|
11
11
|
# @return [String] the key for the badge in OSM
|
12
12
|
# @!attribute [rw] sections_needed
|
13
13
|
# @return [Fixnum]
|
@@ -45,13 +45,15 @@ module Osm
|
|
45
45
|
# Get badges
|
46
46
|
# @param [Osm::Api] api The api to use to make the request
|
47
47
|
# @param [Osm::Section, Fixnum, #to_i] section The section (or its ID) to get the due badges for
|
48
|
+
# @param [Symbol] section_type The type of section to get badges for (if nil uses the type of the section param)
|
48
49
|
# @!macro options_get
|
49
50
|
# @return [Array<Osm::Badge>]
|
50
|
-
def self.get_badges_for_section(api, section, options={})
|
51
|
-
raise Error, 'This method must be called on one of the subclasses (CoreBadge, ChallengeBadge, StagedBadge or ActivityBadge)' if
|
51
|
+
def self.get_badges_for_section(api, section, section_type=nil, options={})
|
52
|
+
raise Error, 'This method must be called on one of the subclasses (CoreBadge, ChallengeBadge, StagedBadge or ActivityBadge)' if type.nil?
|
52
53
|
require_ability_to(api, :read, :badge, section, options)
|
53
54
|
section = Osm::Section.get(api, section, options) unless section.is_a?(Osm::Section)
|
54
|
-
|
55
|
+
section_type ||= section.type
|
56
|
+
cache_key = ['badges', section_type, type]
|
55
57
|
|
56
58
|
if !options[:no_cache] && Osm::Model.cache_exist?(api, cache_key)
|
57
59
|
return cache_read(api, cache_key)
|
@@ -60,7 +62,7 @@ module Osm
|
|
60
62
|
term_id = Osm::Term.get_current_term_for_section(api, section, options).to_i
|
61
63
|
badges = []
|
62
64
|
|
63
|
-
data = api.perform_query("challenges.php?action=getInitialBadges&type=#{
|
65
|
+
data = api.perform_query("challenges.php?action=getInitialBadges&type=#{type}§ionid=#{section.id}§ion=#{section_type}&termid=#{term_id}")
|
64
66
|
badge_order = data["badgeOrder"].to_s.split(',')
|
65
67
|
structures = data["structure"] || {}
|
66
68
|
details = data["details"] || {}
|
@@ -97,34 +99,70 @@ module Osm
|
|
97
99
|
return badges
|
98
100
|
end
|
99
101
|
|
102
|
+
# Get a summary of badges earnt by members
|
103
|
+
# @param [Osm::Api] api The api to use to make the request
|
104
|
+
# @param [Osm::Section, Fixnum, #to_i] section The section (or its ID) to get the due badges for
|
105
|
+
# @param [Osm::Term, Fixnum, #to_i, nil] term The term (or its ID) to get the due badges for, passing nil causes the current term to be used
|
106
|
+
# @!macro options_get
|
107
|
+
# @return [Array<Hash>]
|
108
|
+
def self.get_summary_for_section(api, section, term=nil, options={})
|
109
|
+
raise Error, 'This method must be called on one of the subclasses (CoreBadge, ChallengeBadge, StagedBadge or ActivityBadge)' if type.nil?
|
110
|
+
require_ability_to(api, :read, :badge, section, options)
|
111
|
+
section = Osm::Section.get(api, section, options) unless section.is_a?(Osm::Section)
|
112
|
+
term_id = (term.nil? ? Osm::Term.get_current_term_for_section(api, section, options) : term).to_i
|
113
|
+
cache_key = ['badge-summary', section.id, term_id, type]
|
114
|
+
|
115
|
+
if !options[:no_cache] && Osm::Model.cache_exist?(api, cache_key)
|
116
|
+
return cache_read(api, cache_key)
|
117
|
+
end
|
118
|
+
|
119
|
+
summary = []
|
120
|
+
data = api.perform_query("challenges.php?action=summary§ion=#{section.type}§ionid=#{section.id}&termid=#{term_id}&type=#{type}")
|
121
|
+
data['items'].each do |item|
|
122
|
+
new_item = {
|
123
|
+
:first_name => item['firstname'],
|
124
|
+
:last_name => item['lastname'],
|
125
|
+
}
|
126
|
+
(item.keys - ['firstname', 'lastname']).each do |key|
|
127
|
+
new_item[key] = item[key]
|
128
|
+
end
|
129
|
+
summary.push new_item
|
130
|
+
end
|
131
|
+
|
132
|
+
cache_write(api, cache_key, summary)
|
133
|
+
return summary
|
134
|
+
end
|
135
|
+
|
100
136
|
# Get a list of badge requirements met by members
|
101
137
|
# @param [Osm::Api] api The api to use to make the request
|
102
138
|
# @param [Osm::Section, Fixnum, #to_i] section The section (or its ID) to get the due badges for
|
103
|
-
# @param [Osm::Badge] badge The badge to get data for
|
104
139
|
# @param [Osm::Term, Fixnum, #to_i, nil] term The term (or its ID) to get the due badges for, passing nil causes the current term to be used
|
105
140
|
# @!macro options_get
|
106
141
|
# @return [Array<Osm::Badge::Data>]
|
107
|
-
def
|
108
|
-
raise Error, 'This method must be called on one of the subclasses (CoreBadge, ChallengeBadge, StagedBadge or ActivityBadge)' if
|
142
|
+
def get_data_for_section(api, section, term=nil, options={})
|
143
|
+
raise Error, 'This method must be called on one of the subclasses (CoreBadge, ChallengeBadge, StagedBadge or ActivityBadge)' if type.nil?
|
109
144
|
Osm::Model.require_ability_to(api, :read, :badge, section, options)
|
110
145
|
section = Osm::Section.get(api, section, options) unless section.is_a?(Osm::Section)
|
111
146
|
term_id = (term.nil? ? Osm::Term.get_current_term_for_section(api, section, options) : term).to_i
|
112
|
-
cache_key = ['badge_data', section.id, term_id,
|
147
|
+
cache_key = ['badge_data', section.id, term_id, osm_key]
|
113
148
|
|
114
149
|
if !options[:no_cache] && cache_exist?(api, cache_key)
|
115
150
|
return cache_read(api, cache_key)
|
116
151
|
end
|
117
152
|
|
118
153
|
datas = []
|
119
|
-
data = api.perform_query("challenges.php?termid=#{term_id}&type=#{
|
154
|
+
data = api.perform_query("challenges.php?termid=#{term_id}&type=#{type}§ion=#{section.type}&c=#{osm_key}§ionid=#{section.id}")
|
120
155
|
data['items'].each do |d|
|
121
156
|
datas.push Osm::Badge::Data.new(
|
122
157
|
:member_id => d['scoutid'],
|
123
|
-
:
|
158
|
+
:first_name => d['firstname'],
|
159
|
+
:last_name => d['lastname'],
|
160
|
+
:completed => d['completed'].to_i,
|
161
|
+
:awarded => d['awarded'].to_i,
|
124
162
|
:awarded_date => Osm.parse_date(d['awardeddate']),
|
125
163
|
:requirements => d.select{ |k,v| k.include?('_') },
|
126
164
|
:section_id => section.id,
|
127
|
-
:badge =>
|
165
|
+
:badge => self,
|
128
166
|
)
|
129
167
|
end
|
130
168
|
|
@@ -140,13 +178,20 @@ module Osm
|
|
140
178
|
end
|
141
179
|
|
142
180
|
|
143
|
-
|
144
|
-
def self.badge_type
|
181
|
+
def self.type
|
145
182
|
nil
|
146
183
|
end
|
184
|
+
def type
|
185
|
+
self.class.type
|
186
|
+
end
|
187
|
+
|
188
|
+
private
|
147
189
|
def self.subscription_required
|
148
190
|
:bronze
|
149
191
|
end
|
192
|
+
def subscription_required
|
193
|
+
self.class.subscription_required
|
194
|
+
end
|
150
195
|
|
151
196
|
|
152
197
|
class Requirement
|
@@ -196,14 +241,17 @@ module Osm
|
|
196
241
|
end # Class Requirement
|
197
242
|
|
198
243
|
|
199
|
-
class Data
|
200
|
-
include ::ActiveAttr::MassAssignmentSecurity
|
201
|
-
include ::ActiveAttr::Model
|
202
|
-
|
244
|
+
class Data < Osm::Model
|
203
245
|
# @!attribute [rw] member_id
|
204
246
|
# @return [Fixnum] ID of the member this data relates to
|
247
|
+
# @!attribute [rw] first_name
|
248
|
+
# @return [Fixnum] the member's first name
|
249
|
+
# @!attribute [rw] last_name
|
250
|
+
# @return [Fixnum] Ithe member's last name
|
205
251
|
# @!attribute [rw] completed
|
206
|
-
# @return [
|
252
|
+
# @return [Fixnum] whether this badge has been completed (i.e. it is due?), number indicates stage if appropriate
|
253
|
+
# @!attribute [rw] awarded
|
254
|
+
# @return [Date] the last stage awarded
|
207
255
|
# @!attribute [rw] awarded_date
|
208
256
|
# @return [Date] when the badge was awarded
|
209
257
|
# @!attribute [rw] requirements
|
@@ -214,16 +262,22 @@ module Osm
|
|
214
262
|
# @return [Osm::Badge] the badge that the data belongs to
|
215
263
|
|
216
264
|
attribute :member_id, :type => Integer
|
217
|
-
attribute :
|
218
|
-
attribute :
|
265
|
+
attribute :first_name, :type => String
|
266
|
+
attribute :last_name, :type => String
|
267
|
+
attribute :completed, :type => Integer, :default => 0
|
268
|
+
attribute :awarded, :type => Integer, :default => 0
|
269
|
+
attribute :awarded_date, :type => Date, :default => nil
|
219
270
|
attribute :requirements, :type => Object, :default => DirtyHashy.new
|
220
271
|
attribute :section_id, :type => Integer
|
221
272
|
attribute :badge, :type => Object
|
222
273
|
|
223
|
-
attr_accessible :member_id, :completed, :awarded_date, :requirements, :section_id, :badge
|
274
|
+
attr_accessible :member_id, :first_name, :last_name, :completed, :awarded, :awarded_date, :requirements, :section_id, :badge
|
224
275
|
|
225
276
|
validates_presence_of :badge
|
226
|
-
|
277
|
+
validates_presence_of :first_name
|
278
|
+
validates_presence_of :last_name
|
279
|
+
validates_numericality_of :completed, :only_integer=>true, :greater_than_or_equal_to=>0
|
280
|
+
validates_numericality_of :awarded, :only_integer=>true, :greater_than_or_equal_to=>0
|
227
281
|
validates_numericality_of :member_id, :only_integer=>true, :greater_than=>0
|
228
282
|
validates_numericality_of :section_id, :only_integer=>true, :greater_than=>0
|
229
283
|
validates :requirements, :hash => {:key_type => String, :value_type => String}
|
@@ -246,7 +300,7 @@ module Osm
|
|
246
300
|
def total_gained
|
247
301
|
count = 0
|
248
302
|
requirements.each do |field, data|
|
249
|
-
next if data.blank? || data
|
303
|
+
next if data.blank? || data[0].downcase.eql?('x')
|
250
304
|
count += 1
|
251
305
|
end
|
252
306
|
return count
|
@@ -273,12 +327,110 @@ module Osm
|
|
273
327
|
requirements.each do |field, data|
|
274
328
|
field = field.split('_')[0]
|
275
329
|
count[field] ||= 0
|
276
|
-
next if data.blank? || data
|
330
|
+
next if data.blank? || data[0].downcase.eql?('x')
|
277
331
|
count[field] += 1
|
278
332
|
end
|
279
333
|
return count
|
280
334
|
end
|
281
335
|
|
336
|
+
# Check if this badge is due
|
337
|
+
# @return [Boolean] whether the badge is due to the member
|
338
|
+
def due?
|
339
|
+
completed > awarded
|
340
|
+
end
|
341
|
+
|
342
|
+
# Check if this badge has been started
|
343
|
+
# @return [Boolean] whether the badge has been started by the member (always false if the badge has been completed)
|
344
|
+
def started?
|
345
|
+
unless badge.type == :staged
|
346
|
+
return false if completed?
|
347
|
+
requirements.each do |key, value|
|
348
|
+
return true unless value.blank? || value[0].downcase.eql?('x')
|
349
|
+
end
|
350
|
+
else
|
351
|
+
# Staged badge
|
352
|
+
return (started > completed)
|
353
|
+
end
|
354
|
+
return false
|
355
|
+
end
|
356
|
+
|
357
|
+
# Get which stage has been started
|
358
|
+
# @return [Fixnum] which stage of the badge has been started by the member (lowest)
|
359
|
+
def started
|
360
|
+
unless badge.type == :staged
|
361
|
+
return started? ? 1 : 0
|
362
|
+
else
|
363
|
+
# Staged badge
|
364
|
+
if ['nightsaway', 'hikes'].include?(badge.osm_key) # Special staged badges
|
365
|
+
stages = [1, 5, 10, 20, 35, 50, 75, 100, 125, 150, 175, 200] if badge.osm_key.eql?('nightsaway')
|
366
|
+
stages = [1, 5, 10, 20, 35, 50] if badge.osm_key.eql?('hikes')
|
367
|
+
done = requirements['y_01'].to_i
|
368
|
+
return 0 if done < stages[0] # Not started the first stage
|
369
|
+
return 0 if done >= stages[stages.size - 1] # No more stages can be started
|
370
|
+
(1..stages.size-1).reverse_each do |index|
|
371
|
+
if (done < stages[index]) && (done > stages[index-1])
|
372
|
+
return stages[index]
|
373
|
+
end
|
374
|
+
end
|
375
|
+
else
|
376
|
+
start_group = 'abcde'[completed] # Requirements use the group letter to denote stage
|
377
|
+
started = 'z'
|
378
|
+
requirements.each do |key, value|
|
379
|
+
next if key[0] < start_group # This stage is marked as completed
|
380
|
+
next if key[0] > started # This stage is after the stage currently started
|
381
|
+
started = key[0] unless value.blank? || value[0].downcase.eql?('x')
|
382
|
+
end
|
383
|
+
return started.eql?('z') ? 0 : 'abcde'.index(started)+1
|
384
|
+
end
|
385
|
+
return 0
|
386
|
+
end
|
387
|
+
end
|
388
|
+
|
389
|
+
# Mark the badge as awarded in OSM
|
390
|
+
# @param [Osm::Api] api The api to use to make the request
|
391
|
+
# @param [Date] date The date to mark the badge as awarded
|
392
|
+
# @param [Fixnum] level The level of the badge to award (1 for non-staged badges)
|
393
|
+
# @param [Symbol] mark_as :awarded or :due
|
394
|
+
# @return [Boolean] whether the data was updated in OSM
|
395
|
+
def mark_awarded(api, date=Date.today, level=completed, mark_as=:awarded)
|
396
|
+
raise ArgumentError, 'date is not a Date' unless date.is_a?(Date)
|
397
|
+
raise ArgumentError, 'mark_as is not an allowed value, use :awarded or :du' unless [:awarded, :due].include?(mark_as)
|
398
|
+
raise ArgumentError, 'level can not be negative' if level < 0
|
399
|
+
section = Osm::Section.get(api, section_id)
|
400
|
+
require_ability_to(api, :write, :badge, section)
|
401
|
+
|
402
|
+
date_formatted = date.strftime(Osm::OSM_DATE_FORMAT)
|
403
|
+
|
404
|
+
result = api.perform_query("challenges.php?action=award", {
|
405
|
+
'dateAwarded' => date_formatted,
|
406
|
+
'sectionid' => section_id,
|
407
|
+
'section' => section.type,
|
408
|
+
'chal' => badge.osm_key,
|
409
|
+
'type' => badge.type,
|
410
|
+
'stagedLevel' => level,
|
411
|
+
'due' => mark_as,
|
412
|
+
})
|
413
|
+
updated = result.is_a?(Array) &&
|
414
|
+
result[0].is_a?(Hash) &&
|
415
|
+
(result[0]['sid'].to_i == member_id) &&
|
416
|
+
(result[0]['awarded'].to_i == level) &&
|
417
|
+
(result[0]['awardeddate'] == date_formatted)
|
418
|
+
|
419
|
+
if updated
|
420
|
+
awarded = level
|
421
|
+
awarded_date = date
|
422
|
+
end
|
423
|
+
return updated
|
424
|
+
end
|
425
|
+
|
426
|
+
# Mark the badge as due in OSM
|
427
|
+
# @param [Osm::Api] api The api to use to make the request
|
428
|
+
# @param [Fixnum] level The level of the badge to mark as due (1 for non-staged badges)
|
429
|
+
# @return [Boolean] whether the data was updated in OSM
|
430
|
+
def mark_due(api, level)
|
431
|
+
mark_awarded(api, Date.today, level, :due)
|
432
|
+
end
|
433
|
+
|
282
434
|
# Update data in OSM
|
283
435
|
# @param [Osm::Api] api The api to use to make the request
|
284
436
|
# @return [Boolean] whether the data was updated in OSM
|
@@ -286,13 +438,13 @@ module Osm
|
|
286
438
|
def update(api)
|
287
439
|
raise Osm::ObjectIsInvalid, 'data is invalid' unless valid?
|
288
440
|
section = Osm::Section.get(api, section_id)
|
289
|
-
|
441
|
+
require_ability_to(api, :write, :badge, section)
|
290
442
|
|
291
443
|
updated = true
|
292
444
|
editable_fields = badge.requirements.select{ |r| r.editable }.map{ |r| r.field}
|
293
445
|
requirements.changes.each do |field, (was,now)|
|
294
446
|
if editable_fields.include?(field)
|
295
|
-
result = api.perform_query("challenges.php?type=#{badge.class.
|
447
|
+
result = api.perform_query("challenges.php?type=#{badge.class.type}§ion=#{section.type}", {
|
296
448
|
'action' => 'updatesingle',
|
297
449
|
'id' => member_id,
|
298
450
|
'col' => field,
|
@@ -306,11 +458,18 @@ module Osm
|
|
306
458
|
end
|
307
459
|
end
|
308
460
|
|
309
|
-
|
310
461
|
if updated
|
311
462
|
requirements.clean_up!
|
312
463
|
end
|
313
464
|
|
465
|
+
if changed_attributes.include?('awarded') || changed_attributes.include?('awarded_date')
|
466
|
+
if mark_awarded(api, awarded_date, awarded)
|
467
|
+
reset_changed_attributes
|
468
|
+
else
|
469
|
+
updated = false
|
470
|
+
end
|
471
|
+
end
|
472
|
+
|
314
473
|
return updated
|
315
474
|
end
|
316
475
|
|
@@ -333,28 +492,28 @@ module Osm
|
|
333
492
|
|
334
493
|
class CoreBadge < Osm::Badge
|
335
494
|
private
|
336
|
-
def self.
|
495
|
+
def self.type
|
337
496
|
:core
|
338
497
|
end
|
339
498
|
end # Class CoreBadge
|
340
499
|
|
341
500
|
class ChallengeBadge < Osm::Badge
|
342
501
|
private
|
343
|
-
def self.
|
502
|
+
def self.type
|
344
503
|
:challenge
|
345
504
|
end
|
346
505
|
end # Class ChallengeBadge
|
347
506
|
|
348
507
|
class StagedBadge < Osm::Badge
|
349
508
|
private
|
350
|
-
def self.
|
509
|
+
def self.type
|
351
510
|
:staged
|
352
511
|
end
|
353
512
|
end # Class StagedBadge
|
354
513
|
|
355
514
|
class ActivityBadge < Osm::Badge
|
356
515
|
private
|
357
|
-
def self.
|
516
|
+
def self.type
|
358
517
|
:activity
|
359
518
|
end
|
360
519
|
def self.subscription_required
|
data/lib/osm/register.rb
CHANGED
@@ -56,7 +56,9 @@ module Osm
|
|
56
56
|
end
|
57
57
|
|
58
58
|
data = api.perform_query("users.php?action=register§ionid=#{section_id}&termid=#{term_id}")
|
59
|
-
|
59
|
+
dates_s = get_structure(api, section, term, options)
|
60
|
+
dates_s = dates_s.map{ |f| f.id }.select{ |f| f.match(Osm::OSM_DATE_REGEX) }
|
61
|
+
dates_d = dates_s.map{ |d| Osm::parse_date(d) }
|
60
62
|
|
61
63
|
to_return = []
|
62
64
|
if data.is_a?(Hash) && data['items'].is_a?(Array)
|
@@ -65,9 +67,8 @@ module Osm
|
|
65
67
|
if item.is_a?(Hash)
|
66
68
|
unless item['scoutid'].to_i < 0 # It's a total row
|
67
69
|
attendance = {}
|
68
|
-
|
69
|
-
item_attendance = item[
|
70
|
-
date = Date.strptime(date, Osm::OSM_DATE_FORMAT)
|
70
|
+
dates_d.each_with_index do |date, index|
|
71
|
+
item_attendance = item[dates_s[index]]
|
71
72
|
attendance[date] = :unadvised_absent
|
72
73
|
attendance[date] = :yes if item_attendance.eql?('Yes')
|
73
74
|
attendance[date] = :advised_absent if item_attendance.eql?('No')
|
data/spec/osm/badge_spec.rb
CHANGED
@@ -44,7 +44,10 @@ describe "Badge" do
|
|
44
44
|
it "Create Data" do
|
45
45
|
data = Osm::Badge::Data.new(
|
46
46
|
:member_id => 1,
|
47
|
-
:
|
47
|
+
:first_name => 'First',
|
48
|
+
:last_name => 'Last',
|
49
|
+
:completed => 4,
|
50
|
+
:awarded => 3,
|
48
51
|
:awarded_date => Date.new(2000, 1, 2),
|
49
52
|
:requirements => {},
|
50
53
|
:section_id => 2,
|
@@ -52,7 +55,10 @@ describe "Badge" do
|
|
52
55
|
)
|
53
56
|
|
54
57
|
data.member_id.should == 1
|
55
|
-
data.
|
58
|
+
data.first_name.should == 'First'
|
59
|
+
data.last_name.should == 'Last'
|
60
|
+
data.completed.should == 4
|
61
|
+
data.awarded.should == 3
|
56
62
|
data.awarded_date.should == Date.new(2000, 1, 2)
|
57
63
|
data.requirements.should == {}
|
58
64
|
data.section_id.should == 2
|
@@ -128,6 +134,64 @@ describe "Badge" do
|
|
128
134
|
data.sections_gained.should == 1
|
129
135
|
end
|
130
136
|
|
137
|
+
it "Works out if the badge is due" do
|
138
|
+
Osm::Badge::Data.new(:completed => 0, :awarded => 0).due?.should be_false
|
139
|
+
Osm::Badge::Data.new(:completed => 1, :awarded => 0).due?.should be_true
|
140
|
+
Osm::Badge::Data.new(:completed => 2, :awarded => 2).due?.should be_false
|
141
|
+
Osm::Badge::Data.new(:completed => 2, :awarded => 1).due?.should be_true
|
142
|
+
end
|
143
|
+
|
144
|
+
it "Works out if the badge has been started" do
|
145
|
+
Osm::Badge::Data.new(:badge => Osm::CoreBadge.new, :requirements => {'a_01' => 'Yes', 'a_02' => ''}).started?.should be_true
|
146
|
+
Osm::Badge::Data.new(:badge => Osm::CoreBadge.new, :requirements => {'a_01' => 'Yes', 'a_02' => ''}, :completed => 1).started?.should be_false
|
147
|
+
Osm::Badge::Data.new(:badge => Osm::CoreBadge.new, :requirements => {'a_01' => 'xNo', 'a_02' => ''}).started?.should be_false
|
148
|
+
Osm::Badge::Data.new(:badge => Osm::CoreBadge.new, :requirements => {'a_01' => '', 'a_02' => ''}).started?.should be_false
|
149
|
+
# Staged Badge
|
150
|
+
Osm::Badge::Data.new(
|
151
|
+
:badge => Osm::StagedBadge.new,
|
152
|
+
:requirements => {'a_01' => 'Yes', 'b_01' => 'Yes', 'b_02' => ''},
|
153
|
+
:completed => 1,
|
154
|
+
).started?.should be_true
|
155
|
+
Osm::Badge::Data.new(
|
156
|
+
:badge => Osm::StagedBadge.new(:osm_key => 'nightsaway'),
|
157
|
+
:requirements => {'a_01' => 5, 'y_01' => '5', 'custom_26695' => ''},
|
158
|
+
:completed => 5,
|
159
|
+
).started?.should be_false
|
160
|
+
Osm::Badge::Data.new(
|
161
|
+
:badge => Osm::StagedBadge.new(:osm_key => 'hikes'),
|
162
|
+
:requirements => {'a_01' => 2, 'y_01' => '2', 'custom_26695' => ''},
|
163
|
+
:completed => 1,
|
164
|
+
).started?.should be_true
|
165
|
+
end
|
166
|
+
|
167
|
+
it "Works out what stage of the badge has been started" do
|
168
|
+
Osm::Badge::Data.new(:badge => Osm::CoreBadge.new, :requirements => {'a_01' => 'Yes', 'a_02' => ''}).started.should == 1
|
169
|
+
Osm::Badge::Data.new(:badge => Osm::CoreBadge.new, :requirements => {'a_01' => 'Yes', 'a_02' => ''}, :completed => 1).started.should == 0
|
170
|
+
Osm::Badge::Data.new(:badge => Osm::CoreBadge.new, :requirements => {'a_01' => 'xNo', 'a_02' => ''}).started.should == 0
|
171
|
+
Osm::Badge::Data.new(:badge => Osm::CoreBadge.new, :requirements => {'a_01' => '', 'a_02' => ''}).started.should == 0
|
172
|
+
|
173
|
+
# Staged Badge
|
174
|
+
Osm::Badge::Data.new(
|
175
|
+
:badge => Osm::StagedBadge.new(:osm_key => 'test'),
|
176
|
+
:requirements => {'a_01' => 'Yes', 'b_01' => 'Yes', 'b_02' => ''},
|
177
|
+
:completed => 1,
|
178
|
+
).started.should == 2
|
179
|
+
Osm::Badge::Data.new(
|
180
|
+
:badge => Osm::StagedBadge.new(:osm_key => 'test'),
|
181
|
+
:requirements => {'a_01' => 'Yes', 'b_01' => 'Yes', 'b_02' => '', 'c_01' => 'Yes', 'c_02' => ''},
|
182
|
+
:completed => 1,
|
183
|
+
).started.should == 2
|
184
|
+
Osm::Badge::Data.new(
|
185
|
+
:badge => Osm::StagedBadge.new(:osm_key => 'nightsaway'),
|
186
|
+
:requirements => {'a_01' => 7, 'y_01' => '7', 'custom_26695' => ''},
|
187
|
+
:completed => 5,
|
188
|
+
).started.should == 10
|
189
|
+
Osm::Badge::Data.new(
|
190
|
+
:badge => Osm::StagedBadge.new(:osm_key => 'hikes'),
|
191
|
+
:requirements => {'a_01' => 2, 'y_01' => '2', 'custom_26695' => ''},
|
192
|
+
:completed => 1,
|
193
|
+
).started.should == 5
|
194
|
+
end
|
131
195
|
|
132
196
|
describe "Using the OSM API" do
|
133
197
|
|
@@ -261,6 +325,14 @@ describe "Badge" do
|
|
261
325
|
requirement.badge.osm_key.should == 'badge'
|
262
326
|
end
|
263
327
|
|
328
|
+
it "For a different section type" do
|
329
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=getInitialBadges&type=activity§ionid=1§ion=cubs&termid=2", :body => @data)
|
330
|
+
Osm::Term.stub(:get_current_term_for_section){ Osm::Term.new(:id => 2) }
|
331
|
+
|
332
|
+
badges = Osm::ActivityBadge.get_badges_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), :cubs)
|
333
|
+
badges.size.should == 1
|
334
|
+
end
|
335
|
+
|
264
336
|
end
|
265
337
|
|
266
338
|
|
@@ -274,8 +346,8 @@ describe "Badge" do
|
|
274
346
|
'firstname' => 'fn',
|
275
347
|
'lastname' => 'ln',
|
276
348
|
'sid' => '',
|
277
|
-
'completed' => '
|
278
|
-
'awarded' => '',
|
349
|
+
'completed' => '2',
|
350
|
+
'awarded' => '1',
|
279
351
|
'awardeddate' => '2000-01-02',
|
280
352
|
'patrolid' => 4,
|
281
353
|
'a_1' => 'd',
|
@@ -286,11 +358,14 @@ describe "Badge" do
|
|
286
358
|
|
287
359
|
it "Core badge" do
|
288
360
|
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?termid=2&type=core§ion=beavers&c=badge§ionid=1", :body => @data)
|
289
|
-
datas = Osm::CoreBadge.
|
361
|
+
datas = Osm::CoreBadge.new(:osm_key => 'badge').get_data_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), 2)
|
290
362
|
datas.size.should == 1
|
291
363
|
data = datas[0]
|
292
364
|
data.member_id.should == 3
|
293
|
-
data.
|
365
|
+
data.first_name.should == 'fn'
|
366
|
+
data.last_name.should == 'ln'
|
367
|
+
data.completed.should == 2
|
368
|
+
data.awarded.should == 1
|
294
369
|
data.awarded_date.should == Date.new(2000, 1, 2)
|
295
370
|
data.requirements.should == {'a_1' => 'd'}
|
296
371
|
data.section_id.should == 1
|
@@ -299,11 +374,14 @@ describe "Badge" do
|
|
299
374
|
|
300
375
|
it "Challenge badge" do
|
301
376
|
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?termid=2&type=challenge§ion=beavers&c=badge§ionid=1", :body => @data)
|
302
|
-
datas = Osm::ChallengeBadge.
|
377
|
+
datas = Osm::ChallengeBadge.new(:osm_key => 'badge').get_data_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), 2)
|
303
378
|
datas.size.should == 1
|
304
379
|
data = datas[0]
|
305
380
|
data.member_id.should == 3
|
306
|
-
data.
|
381
|
+
data.first_name.should == 'fn'
|
382
|
+
data.last_name.should == 'ln'
|
383
|
+
data.completed.should == 2
|
384
|
+
data.awarded.should == 1
|
307
385
|
data.awarded_date.should == Date.new(2000, 1, 2)
|
308
386
|
data.requirements.should == {'a_1' => 'd'}
|
309
387
|
data.section_id.should == 1
|
@@ -312,11 +390,14 @@ describe "Badge" do
|
|
312
390
|
|
313
391
|
it "Staged badge" do
|
314
392
|
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?termid=2&type=staged§ion=beavers&c=badge§ionid=1", :body => @data)
|
315
|
-
datas = Osm::StagedBadge.
|
393
|
+
datas = Osm::StagedBadge.new(:osm_key => 'badge').get_data_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), 2)
|
316
394
|
datas.size.should == 1
|
317
395
|
data = datas[0]
|
318
396
|
data.member_id.should == 3
|
319
|
-
data.
|
397
|
+
data.first_name.should == 'fn'
|
398
|
+
data.last_name.should == 'ln'
|
399
|
+
data.completed.should == 2
|
400
|
+
data.awarded.should == 1
|
320
401
|
data.awarded_date.should == Date.new(2000, 1, 2)
|
321
402
|
data.requirements.should == {'a_1' => 'd'}
|
322
403
|
data.section_id.should == 1
|
@@ -325,11 +406,14 @@ describe "Badge" do
|
|
325
406
|
|
326
407
|
it "Activity badge" do
|
327
408
|
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?termid=2&type=activity§ion=beavers&c=badge§ionid=1", :body => @data)
|
328
|
-
datas = Osm::ActivityBadge.
|
409
|
+
datas = Osm::ActivityBadge.new(:osm_key => 'badge').get_data_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), 2)
|
329
410
|
datas.size.should == 1
|
330
411
|
data = datas[0]
|
331
412
|
data.member_id.should == 3
|
332
|
-
data.
|
413
|
+
data.first_name.should == 'fn'
|
414
|
+
data.last_name.should == 'ln'
|
415
|
+
data.completed.should == 2
|
416
|
+
data.awarded.should == 1
|
333
417
|
data.awarded_date.should == Date.new(2000, 1, 2)
|
334
418
|
data.requirements.should == {'a_1' => 'd'}
|
335
419
|
data.section_id.should == 1
|
@@ -341,7 +425,7 @@ describe "Badge" do
|
|
341
425
|
describe "Update badge data for a section/member" do
|
342
426
|
|
343
427
|
before :each do
|
344
|
-
@
|
428
|
+
@update_post_data = {
|
345
429
|
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
346
430
|
'token' => @CONFIGURATION[:api][:osm][:token],
|
347
431
|
'userid' => 'user_id',
|
@@ -353,13 +437,29 @@ describe "Badge" do
|
|
353
437
|
'chal' => 'badge',
|
354
438
|
'sectionid' => 2,
|
355
439
|
}
|
440
|
+
@update_body_data = {'sid' => '1', 'a' => '2', 'b' => '2'}
|
356
441
|
|
357
|
-
@
|
442
|
+
@awarded_post_data = {
|
443
|
+
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
444
|
+
'token' => @CONFIGURATION[:api][:osm][:token],
|
445
|
+
'userid' => 'user_id',
|
446
|
+
'secret' => 'secret',
|
447
|
+
'dateAwarded' => '2000-01-02',
|
448
|
+
'sectionid' => 2,
|
449
|
+
'section' => :beavers,
|
450
|
+
'chal' => 'badge',
|
451
|
+
'stagedLevel' => 1,
|
452
|
+
'due' => :awarded,
|
453
|
+
}
|
454
|
+
@awarded_body_data = [{'sid'=>'1', 'awarded'=>'1', 'awardeddate'=>'2000-01-02'}]
|
455
|
+
@awarded_url = "https://www.onlinescoutmanager.co.uk/challenges.php?action=award"
|
358
456
|
end
|
359
457
|
|
360
458
|
it "Core badge" do
|
361
459
|
data = Osm::Badge::Data.new(
|
362
460
|
:member_id => 1,
|
461
|
+
:first_name => 'fn',
|
462
|
+
:last_name => 'ln',
|
363
463
|
:section_id => 2,
|
364
464
|
:requirements => {'a' => '1', 'b' => '2'},
|
365
465
|
:badge => Osm::CoreBadge.new(
|
@@ -368,20 +468,25 @@ describe "Badge" do
|
|
368
468
|
Osm::Badge::Requirement.new(:field => 'a', :editable => true),
|
369
469
|
Osm::Badge::Requirement.new(:field => 'b', :editable => true),
|
370
470
|
]),
|
371
|
-
:completed =>
|
471
|
+
:completed => 0,
|
372
472
|
)
|
373
473
|
|
374
|
-
|
375
|
-
HTTParty.should_receive(:post).with(
|
474
|
+
update_url = "https://www.onlinescoutmanager.co.uk/challenges.php?type=core§ion=beavers"
|
475
|
+
HTTParty.should_receive(:post).with(update_url, {:body => @update_post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>@update_body_data.to_json}) }
|
476
|
+
HTTParty.should_receive(:post).with(@awarded_url, {:body => @awarded_post_data.merge({'type' => :core})}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>@awarded_body_data.to_json}) }
|
376
477
|
Osm::Section.stub(:get) { Osm::Section.new(:id => 2, :type => :beavers) }
|
377
478
|
|
378
479
|
data.requirements['a'] = '2'
|
480
|
+
data.awarded = 1
|
481
|
+
data.awarded_date = Date.new(2000, 1, 2)
|
379
482
|
data.update(@api).should be_true
|
380
483
|
end
|
381
484
|
|
382
485
|
it "Challenge badge" do
|
383
486
|
data = Osm::Badge::Data.new(
|
384
487
|
:member_id => 1,
|
488
|
+
:first_name => 'fn',
|
489
|
+
:last_name => 'ln',
|
385
490
|
:section_id => 2,
|
386
491
|
:requirements => {'a' => '1', 'b' => '2'},
|
387
492
|
:badge => Osm::ChallengeBadge.new(
|
@@ -390,20 +495,25 @@ describe "Badge" do
|
|
390
495
|
Osm::Badge::Requirement.new(:field => 'a', :editable => true),
|
391
496
|
Osm::Badge::Requirement.new(:field => 'b', :editable => true),
|
392
497
|
]),
|
393
|
-
:completed =>
|
498
|
+
:completed => 0,
|
394
499
|
)
|
395
500
|
|
396
|
-
|
397
|
-
HTTParty.should_receive(:post).with(
|
501
|
+
update_url = "https://www.onlinescoutmanager.co.uk/challenges.php?type=challenge§ion=beavers"
|
502
|
+
HTTParty.should_receive(:post).with(update_url, {:body => @update_post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>@update_body_data.to_json}) }
|
503
|
+
HTTParty.should_receive(:post).with(@awarded_url, {:body => @awarded_post_data.merge({'type' => :challenge})}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>@awarded_body_data.to_json}) }
|
398
504
|
Osm::Section.stub(:get) { Osm::Section.new(:id => 2, :type => :beavers) }
|
399
505
|
|
400
506
|
data.requirements['a'] = '2'
|
507
|
+
data.awarded = 1
|
508
|
+
data.awarded_date = Date.new(2000, 1, 2)
|
401
509
|
data.update(@api).should be_true
|
402
510
|
end
|
403
511
|
|
404
512
|
it "Staged badge" do
|
405
513
|
data = Osm::Badge::Data.new(
|
406
514
|
:member_id => 1,
|
515
|
+
:first_name => 'fn',
|
516
|
+
:last_name => 'ln',
|
407
517
|
:section_id => 2,
|
408
518
|
:requirements => {'a' => '1', 'b' => '2'},
|
409
519
|
:badge => Osm::StagedBadge.new(
|
@@ -412,20 +522,25 @@ describe "Badge" do
|
|
412
522
|
Osm::Badge::Requirement.new(:field => 'a', :editable => true),
|
413
523
|
Osm::Badge::Requirement.new(:field => 'b', :editable => true),
|
414
524
|
]),
|
415
|
-
:completed =>
|
525
|
+
:completed => 0,
|
416
526
|
)
|
417
527
|
|
418
|
-
|
419
|
-
HTTParty.should_receive(:post).with(
|
528
|
+
update_url = "https://www.onlinescoutmanager.co.uk/challenges.php?type=staged§ion=beavers"
|
529
|
+
HTTParty.should_receive(:post).with(update_url, {:body => @update_post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>@update_body_data.to_json}) }
|
530
|
+
HTTParty.should_receive(:post).with(@awarded_url, {:body => @awarded_post_data.merge({'type' => :staged})}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>@awarded_body_data.to_json}) }
|
420
531
|
Osm::Section.stub(:get) { Osm::Section.new(:id => 2, :type => :beavers) }
|
421
532
|
|
422
533
|
data.requirements['a'] = '2'
|
534
|
+
data.awarded = 1
|
535
|
+
data.awarded_date = Date.new(2000, 1, 2)
|
423
536
|
data.update(@api).should be_true
|
424
537
|
end
|
425
538
|
|
426
539
|
it "Activity badge" do
|
427
540
|
data = Osm::Badge::Data.new(
|
428
541
|
:member_id => 1,
|
542
|
+
:first_name => 'fn',
|
543
|
+
:last_name => 'ln',
|
429
544
|
:section_id => 2,
|
430
545
|
:requirements => {'a' => '1', 'b' => '2'},
|
431
546
|
:badge => Osm::ActivityBadge.new(
|
@@ -434,19 +549,171 @@ describe "Badge" do
|
|
434
549
|
Osm::Badge::Requirement.new(:field => 'a', :editable => true),
|
435
550
|
Osm::Badge::Requirement.new(:field => 'b', :editable => true),
|
436
551
|
]),
|
437
|
-
:completed =>
|
552
|
+
:completed => 0,
|
438
553
|
)
|
439
554
|
|
440
|
-
|
441
|
-
HTTParty.should_receive(:post).with(
|
555
|
+
update_url = "https://www.onlinescoutmanager.co.uk/challenges.php?type=activity§ion=beavers"
|
556
|
+
HTTParty.should_receive(:post).with(update_url, {:body => @update_post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>@update_body_data.to_json}) }
|
557
|
+
HTTParty.should_receive(:post).with(@awarded_url, {:body => @awarded_post_data.merge({'type' => :activity})}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>@awarded_body_data.to_json}) }
|
442
558
|
Osm::Section.stub(:get) { Osm::Section.new(:id => 2, :type => :beavers) }
|
443
559
|
|
444
560
|
data.requirements['a'] = '2'
|
561
|
+
data.awarded = 1
|
562
|
+
data.awarded_date = Date.new(2000, 1, 2)
|
445
563
|
data.update(@api).should be_true
|
446
564
|
end
|
447
565
|
|
448
566
|
end
|
449
567
|
|
568
|
+
|
569
|
+
describe "Mark badge awarded" do
|
570
|
+
|
571
|
+
before :each do
|
572
|
+
@awarded_post_data = {
|
573
|
+
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
574
|
+
'token' => @CONFIGURATION[:api][:osm][:token],
|
575
|
+
'userid' => 'user_id',
|
576
|
+
'secret' => 'secret',
|
577
|
+
'dateAwarded' => '2000-01-02',
|
578
|
+
'sectionid' => 2,
|
579
|
+
'section' => :beavers,
|
580
|
+
'chal' => 'badge',
|
581
|
+
'stagedLevel' => 1,
|
582
|
+
'due' => :awarded,
|
583
|
+
}
|
584
|
+
@awarded_body_data = [{'sid'=>'1', 'awarded'=>'1', 'awardeddate'=>'2000-01-02'}]
|
585
|
+
@awarded_url = "https://www.onlinescoutmanager.co.uk/challenges.php?action=award"
|
586
|
+
end
|
587
|
+
|
588
|
+
it "Core badge" do
|
589
|
+
data = Osm::Badge::Data.new(
|
590
|
+
:member_id => 1,
|
591
|
+
:section_id => 2,
|
592
|
+
:badge => Osm::CoreBadge.new(
|
593
|
+
:osm_key => 'badge',
|
594
|
+
)
|
595
|
+
)
|
596
|
+
|
597
|
+
HTTParty.should_receive(:post).with(@awarded_url, {:body => @awarded_post_data.merge({'type' => :core})}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>@awarded_body_data.to_json}) }
|
598
|
+
Osm::Section.stub(:get) { Osm::Section.new(:id => 2, :type => :beavers) }
|
599
|
+
|
600
|
+
data.mark_awarded(@api, Date.new(2000, 1, 2), 1).should be_true
|
601
|
+
end
|
602
|
+
|
603
|
+
it "Challenge badge" do
|
604
|
+
data = Osm::Badge::Data.new(
|
605
|
+
:member_id => 1,
|
606
|
+
:section_id => 2,
|
607
|
+
:badge => Osm::ChallengeBadge.new(
|
608
|
+
:osm_key => 'badge',
|
609
|
+
)
|
610
|
+
)
|
611
|
+
|
612
|
+
HTTParty.should_receive(:post).with(@awarded_url, {:body => @awarded_post_data.merge({'type' => :challenge})}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>@awarded_body_data.to_json}) }
|
613
|
+
Osm::Section.stub(:get) { Osm::Section.new(:id => 2, :type => :beavers) }
|
614
|
+
|
615
|
+
data.mark_awarded(@api, Date.new(2000, 1, 2), 1).should be_true
|
616
|
+
end
|
617
|
+
|
618
|
+
it "Staged badge" do
|
619
|
+
data = Osm::Badge::Data.new(
|
620
|
+
:member_id => 1,
|
621
|
+
:section_id => 2,
|
622
|
+
:badge => Osm::StagedBadge.new(
|
623
|
+
:osm_key => 'badge',
|
624
|
+
)
|
625
|
+
)
|
626
|
+
|
627
|
+
@awarded_body_data[0].merge!({'awarded' => '4'})
|
628
|
+
HTTParty.should_receive(:post).with(@awarded_url, {:body => @awarded_post_data.merge({'type' => :staged, 'stagedLevel' => 4})}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>@awarded_body_data.to_json}) }
|
629
|
+
Osm::Section.stub(:get) { Osm::Section.new(:id => 2, :type => :beavers) }
|
630
|
+
|
631
|
+
data.mark_awarded(@api, Date.new(2000, 1, 2), 4).should be_true
|
632
|
+
end
|
633
|
+
|
634
|
+
it "Activity badge" do
|
635
|
+
data = Osm::Badge::Data.new(
|
636
|
+
:member_id => 1,
|
637
|
+
:section_id => 2,
|
638
|
+
:badge => Osm::ActivityBadge.new(
|
639
|
+
:osm_key => 'badge',
|
640
|
+
)
|
641
|
+
)
|
642
|
+
|
643
|
+
HTTParty.should_receive(:post).with(@awarded_url, {:body => @awarded_post_data.merge({'type' => :activity})}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>@awarded_body_data.to_json}) }
|
644
|
+
Osm::Section.stub(:get) { Osm::Section.new(:id => 2, :type => :beavers) }
|
645
|
+
|
646
|
+
data.mark_awarded(@api, Date.new(2000, 1, 2), 1).should be_true
|
647
|
+
end
|
648
|
+
|
649
|
+
end
|
650
|
+
|
651
|
+
|
652
|
+
describe "Get summary data for a section" do
|
653
|
+
|
654
|
+
before :each do
|
655
|
+
@data = {
|
656
|
+
'items' => [
|
657
|
+
{
|
658
|
+
'firstname' => 'First',
|
659
|
+
'lastname' => 'Last',
|
660
|
+
'badge_none' => '',
|
661
|
+
'badge_earnt' => '2000-01-02',
|
662
|
+
}
|
663
|
+
]
|
664
|
+
}
|
665
|
+
@data = @data.to_json
|
666
|
+
end
|
667
|
+
|
668
|
+
it "Core badge" do
|
669
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=summary§ion=beavers§ionid=1&termid=2&type=core", :body => @data)
|
670
|
+
summary = Osm::CoreBadge.get_summary_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), 2)
|
671
|
+
summary.size.should == 1
|
672
|
+
summary[0].should == {
|
673
|
+
:first_name => 'First',
|
674
|
+
:last_name => 'Last',
|
675
|
+
'badge_none' => '',
|
676
|
+
'badge_earnt' => '2000-01-02',
|
677
|
+
}
|
678
|
+
end
|
679
|
+
|
680
|
+
it "Challenge badge" do
|
681
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=summary§ion=beavers§ionid=1&termid=2&type=challenge", :body => @data)
|
682
|
+
summary = Osm::ChallengeBadge.get_summary_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), 2)
|
683
|
+
summary.size.should == 1
|
684
|
+
summary[0].should == {
|
685
|
+
:first_name => 'First',
|
686
|
+
:last_name => 'Last',
|
687
|
+
'badge_none' => '',
|
688
|
+
'badge_earnt' => '2000-01-02',
|
689
|
+
}
|
690
|
+
end
|
691
|
+
|
692
|
+
it "Staged badge" do
|
693
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=summary§ion=beavers§ionid=1&termid=2&type=staged", :body => @data)
|
694
|
+
summary = Osm::StagedBadge.get_summary_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), 2)
|
695
|
+
summary.size.should == 1
|
696
|
+
summary[0].should == {
|
697
|
+
:first_name => 'First',
|
698
|
+
:last_name => 'Last',
|
699
|
+
'badge_none' => '',
|
700
|
+
'badge_earnt' => '2000-01-02',
|
701
|
+
}
|
702
|
+
end
|
703
|
+
|
704
|
+
it "Activity badge" do
|
705
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=summary§ion=beavers§ionid=1&termid=2&type=activity", :body => @data)
|
706
|
+
summary = Osm::ActivityBadge.get_summary_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), 2)
|
707
|
+
summary.size.should == 1
|
708
|
+
summary[0].should == {
|
709
|
+
:first_name => 'First',
|
710
|
+
:last_name => 'Last',
|
711
|
+
'badge_none' => '',
|
712
|
+
'badge_earnt' => '2000-01-02',
|
713
|
+
}
|
714
|
+
end
|
715
|
+
end
|
716
|
+
|
450
717
|
end
|
451
718
|
|
452
719
|
end
|
data/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: osm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|