osm 1.2.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +6 -0
- data/lib/osm/api.rb +28 -5
- data/lib/osm/badge.rb +56 -9
- data/lib/osm/member.rb +40 -4
- data/spec/osm/activity_spec.rb +1 -1
- data/spec/osm/api_access_spec.rb +1 -1
- data/spec/osm/api_spec.rb +16 -2
- data/spec/osm/badge_spec.rb +138 -25
- data/spec/osm/badges_spec.rb +3 -3
- data/spec/osm/budget_spec.rb +1 -1
- data/spec/osm/event_spec.rb +14 -14
- data/spec/osm/flexi_record_spec.rb +3 -3
- data/spec/osm/giftaid_spec.rb +2 -2
- data/spec/osm/grouping_spec.rb +2 -2
- data/spec/osm/invoice_spec.rb +1 -1
- data/spec/osm/meeting_spec.rb +3 -3
- data/spec/osm/member_spec.rb +45 -4
- data/spec/osm/register_spec.rb +5 -5
- data/spec/osm/section_spec.rb +9 -9
- data/spec/osm/sms_spec.rb +1 -1
- data/spec/osm/term_spec.rb +4 -4
- data/spec/spec_helper.rb +3 -0
- data/version.rb +1 -1
- metadata +2 -2
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## Version 1.2.2
|
2
|
+
|
3
|
+
* Add base\_url method to Api class and instances
|
4
|
+
* Add get_photo method to member
|
5
|
+
* Add earnt and earnt? methods to Osm::Badge::Data to get the stage which has been earnt (based on the requirements hash)
|
6
|
+
|
1
7
|
## Version 1.2.1
|
2
8
|
|
3
9
|
* Add section\_id read-only attribute to Osm::Error::NoCurrentTerm
|
data/lib/osm/api.rb
CHANGED
@@ -139,6 +139,21 @@ module Osm
|
|
139
139
|
return self
|
140
140
|
end
|
141
141
|
|
142
|
+
# Get the base URL for requests to OSM/OGM
|
143
|
+
# @param [Symbol] site For OSM or OGM (:osm or :ogm)
|
144
|
+
# @return [String] The base URL for requests
|
145
|
+
def self.base_url(site=@@site)
|
146
|
+
raise ArgumentError, "Invalid site" unless [:osm, :ogm].include?(site)
|
147
|
+
BASE_URLS[site]
|
148
|
+
end
|
149
|
+
|
150
|
+
# Get the base URL for requests to OSM.OGM
|
151
|
+
# @param site For OSM or OGM (:osm or :ogm), defaults to the default for this api object
|
152
|
+
# @return [String] The base URL for requests
|
153
|
+
def base_url(site=@site)
|
154
|
+
raise ArgumentError, "Invalid site" unless [:osm, :ogm].include?(site)
|
155
|
+
self.class.base_url(site)
|
156
|
+
end
|
142
157
|
|
143
158
|
# Make a query to the OSM/OGM API
|
144
159
|
# @param [String] url The script on the remote server to invoke
|
@@ -217,15 +232,23 @@ module Osm
|
|
217
232
|
|
218
233
|
if @@debug
|
219
234
|
puts "Result from :#{site} request to #{url}"
|
235
|
+
puts "#{result.response.content_type}"
|
220
236
|
puts result.response.body
|
221
237
|
end
|
222
238
|
|
223
239
|
return nil if result.response.body.empty?
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
240
|
+
case result.response.content_type
|
241
|
+
when 'application/json', 'text/html'
|
242
|
+
raise Osm::Error, result.response.body unless looks_like_json?(result.response.body)
|
243
|
+
decoded = ActiveSupport::JSON.decode(result.response.body)
|
244
|
+
osm_error = get_osm_error(decoded)
|
245
|
+
raise Osm::Error, osm_error if osm_error
|
246
|
+
return decoded
|
247
|
+
when 'image/jpeg'
|
248
|
+
return result.response.body
|
249
|
+
else
|
250
|
+
raise Osm::Error, "Unhandled content-type: #{result.response.content_type}"
|
251
|
+
end
|
229
252
|
end
|
230
253
|
|
231
254
|
# Check if text looks like it's JSON
|
data/lib/osm/badge.rb
CHANGED
@@ -282,6 +282,10 @@ module Osm
|
|
282
282
|
validates_numericality_of :section_id, :only_integer=>true, :greater_than=>0
|
283
283
|
validates :requirements, :hash => {:key_type => String, :value_type => String}
|
284
284
|
|
285
|
+
STAGES_NIGHTSAWAY = [1, 5, 10, 20, 35, 50, 75, 100, 125, 150, 175, 200]
|
286
|
+
STAGES_HIKESAWAY = [1, 5, 10, 20, 35, 50]
|
287
|
+
|
288
|
+
|
285
289
|
# @!method initialize
|
286
290
|
# Initialize a new Badge
|
287
291
|
# @param [Hash] attributes The hash of attributes (see attributes for descriptions, use Symbol of attribute name as the key)
|
@@ -300,7 +304,7 @@ module Osm
|
|
300
304
|
def total_gained
|
301
305
|
count = 0
|
302
306
|
requirements.each do |field, data|
|
303
|
-
next
|
307
|
+
next unless reguiremet_met?(data)
|
304
308
|
count += 1
|
305
309
|
end
|
306
310
|
return count
|
@@ -314,7 +318,7 @@ module Osm
|
|
314
318
|
count = 0
|
315
319
|
|
316
320
|
required.each do |section, needed|
|
317
|
-
next if gained[section]
|
321
|
+
next if gained[section] < needed
|
318
322
|
count += 1
|
319
323
|
end
|
320
324
|
return count
|
@@ -328,22 +332,59 @@ module Osm
|
|
328
332
|
field = field.split('_')[0]
|
329
333
|
unless field.eql?('y')
|
330
334
|
count[field] ||= 0
|
331
|
-
next
|
335
|
+
next unless reguiremet_met?(data)
|
332
336
|
count[field] += 1
|
333
337
|
else
|
334
338
|
# A total 'section'
|
335
|
-
count['
|
339
|
+
count['y'] = data.to_i
|
336
340
|
end
|
337
341
|
end
|
338
342
|
return count
|
339
343
|
end
|
340
344
|
|
341
|
-
# Check if this badge is due
|
345
|
+
# Check if this badge is due (according data retrieved from OSM)
|
342
346
|
# @return [Boolean] whether the badge is due to the member
|
343
347
|
def due?
|
344
348
|
completed > awarded
|
345
349
|
end
|
346
350
|
|
351
|
+
|
352
|
+
# Check if this badge has been earnt
|
353
|
+
# @return [Boolean] whether the badge is due to the member
|
354
|
+
def earnt?
|
355
|
+
if badge.type == :staged
|
356
|
+
return (earnt > awarded)
|
357
|
+
end
|
358
|
+
return false if (completed.eql?(1) && awarded.eql?(1))
|
359
|
+
return true if (completed.eql?(1) && awarded.eql?(0))
|
360
|
+
return (total_gained >= badge.total_needed) && (sections_gained >= badge.sections_needed)
|
361
|
+
end
|
362
|
+
|
363
|
+
# Get what stage which has most recently been earnt
|
364
|
+
# (using #earnt? will tell you if it's still due (not yet awarded))
|
365
|
+
# @return [Fixnum] the stage which has most recently been due
|
366
|
+
def earnt
|
367
|
+
unless badge.type == :staged
|
368
|
+
return earnt? ? 1 : 0
|
369
|
+
end
|
370
|
+
if ['nightsaway', 'hikes'].include?(badge.osm_key)
|
371
|
+
total_done = requirements['y_01']
|
372
|
+
stages = STAGES_NIGHTSAWAY if badge.osm_key.eql?('nightsaway')
|
373
|
+
stages = STAGES_HIKESAWAY if badge.osm_key.eql?('hikes')
|
374
|
+
stages.reverse_each do |stage|
|
375
|
+
return stage if total_done >= stage
|
376
|
+
end
|
377
|
+
else
|
378
|
+
(awarded..5).reverse_each do |stage|
|
379
|
+
group = 'abcde'[stage - 1]
|
380
|
+
if gained_in_sections[group] >= badge.needed_from_section[group]
|
381
|
+
return stage
|
382
|
+
end
|
383
|
+
end
|
384
|
+
end
|
385
|
+
return 0
|
386
|
+
end
|
387
|
+
|
347
388
|
# Check if this badge has been started
|
348
389
|
# @return [Boolean] whether the badge has been started by the member (always false if the badge has been completed)
|
349
390
|
def started?
|
@@ -352,9 +393,9 @@ module Osm
|
|
352
393
|
requirements.each do |key, value|
|
353
394
|
case key.split('_')[0]
|
354
395
|
when 'a'
|
355
|
-
return true
|
396
|
+
return true if reguiremet_met?(value)
|
356
397
|
when 'y'
|
357
|
-
return true if (
|
398
|
+
return true if (value.to_i > 0)
|
358
399
|
end
|
359
400
|
end
|
360
401
|
return false
|
@@ -368,8 +409,8 @@ module Osm
|
|
368
409
|
else
|
369
410
|
# Staged badge
|
370
411
|
if ['nightsaway', 'hikes'].include?(badge.osm_key) # Special staged badges
|
371
|
-
stages =
|
372
|
-
stages =
|
412
|
+
stages = STAGES_NIGHTSAWAY if badge.osm_key.eql?('nightsaway')
|
413
|
+
stages = STAGES_HIKESAWAY if badge.osm_key.eql?('hikes')
|
373
414
|
done = requirements['y_01'].to_i
|
374
415
|
return 0 if done < stages[0] # Not started the first stage
|
375
416
|
return 0 if done >= stages[stages.size - 1] # No more stages can be started
|
@@ -493,6 +534,12 @@ module Osm
|
|
493
534
|
Osm.inspect_instance(self, options={:replace_with => {'badge' => :osm_key}})
|
494
535
|
end
|
495
536
|
|
537
|
+
private
|
538
|
+
def reguiremet_met?(data)
|
539
|
+
return false if data == 0
|
540
|
+
!(data.blank? || data.to_s[0].downcase.eql?('x'))
|
541
|
+
end
|
542
|
+
|
496
543
|
end # Class Data
|
497
544
|
|
498
545
|
end # Class Badge
|
data/lib/osm/member.rb
CHANGED
@@ -80,6 +80,8 @@ module Osm
|
|
80
80
|
# @return [String] the member's current age (yy/mm)
|
81
81
|
# @!attribute [rw] joined_years
|
82
82
|
# @return [Fixnum] how many years the member has been in Scouting
|
83
|
+
# @!attribute [rw] has_photo
|
84
|
+
# @return [Boolean] whether the scout has a photo in OSM
|
83
85
|
|
84
86
|
attribute :id, :type => Integer
|
85
87
|
attribute :section_id, :type => Integer
|
@@ -120,12 +122,14 @@ module Osm
|
|
120
122
|
attribute :joined, :type => Date
|
121
123
|
attribute :age, :type => String
|
122
124
|
attribute :joined_years, :type => Integer
|
125
|
+
attribute :has_photo, :type => Boolean, :default => false
|
123
126
|
|
124
127
|
attr_accessible :id, :section_id, :type, :first_name, :last_name, :email1, :email2, :email3, :email4,
|
125
128
|
:phone1, :phone2, :phone3, :phone4, :address, :address2, :date_of_birth, :started,
|
126
129
|
:joining_in_years, :parents, :notes, :medical, :religion, :school, :ethnicity, :subs,
|
127
130
|
:custom1, :custom2, :custom3, :custom4, :custom5, :custom6, :custom7, :custom8, :custom9,
|
128
|
-
:grouping_id, :grouping_leader, :joined, :age, :joined_years
|
131
|
+
:grouping_id, :grouping_leader, :joined, :age, :joined_years,
|
132
|
+
:has_photo
|
129
133
|
|
130
134
|
validates_numericality_of :id, :only_integer=>true, :greater_than=>0, :unless => Proc.new { |r| r.id.nil? }
|
131
135
|
validates_numericality_of :section_id, :only_integer=>true, :greater_than=>0
|
@@ -139,6 +143,7 @@ module Osm
|
|
139
143
|
validates_presence_of :started
|
140
144
|
validates_presence_of :joined
|
141
145
|
validates_format_of :age, :with => /\A[0-9]{2}\/(0[0-9]|1[012])\Z/, :message => 'age is not in the correct format (yy/mm)', :allow_blank => true
|
146
|
+
validates_inclusion_of :has_photo, :in => [true, false]
|
142
147
|
|
143
148
|
|
144
149
|
# Get members for a section
|
@@ -159,12 +164,17 @@ module Osm
|
|
159
164
|
end
|
160
165
|
|
161
166
|
data = api.perform_query("users.php?action=getUserDetails§ionid=#{section.id}&termid=#{term_id}")
|
167
|
+
summary_data = api.perform_query("ext/members/contact/?action=getListOfMembers&sort=patrolid§ionid=#{section.id}&termid=#{term_id}§ion=#{section.type}") || {}
|
168
|
+
|
169
|
+
summary_data = summary_data['items'] || []
|
170
|
+
summary_data = Hash[summary_data.map { |i| [i['scoutid'].to_i, i] }]
|
162
171
|
|
163
172
|
result = Array.new
|
164
173
|
data['items'].each do |item|
|
174
|
+
id = Osm::to_i_or_nil(item['scoutid'])
|
165
175
|
result.push Osm::Member.new(
|
166
176
|
:section_id => section.id,
|
167
|
-
:id =>
|
177
|
+
:id => id,
|
168
178
|
:type => item['type'],
|
169
179
|
:first_name => item['firstname'],
|
170
180
|
:last_name => item['lastname'],
|
@@ -202,6 +212,7 @@ module Osm
|
|
202
212
|
:joined => Osm::parse_date(item['joined']),
|
203
213
|
:age => item['age'].gsub(' ', ''),
|
204
214
|
:joined_years => item['yrs'].to_i,
|
215
|
+
:has_photo => summary_data[id]['pic']
|
205
216
|
)
|
206
217
|
end
|
207
218
|
|
@@ -386,11 +397,36 @@ module Osm
|
|
386
397
|
return @myscout_link_key
|
387
398
|
end
|
388
399
|
|
400
|
+
# Get the member's photo
|
401
|
+
# @param [Osm::Api] api The api to use to make the request
|
402
|
+
# @param [Boolean] black_and_white Whether you want the photo in blank and white
|
403
|
+
# @!macro options_get
|
404
|
+
# @raise [Osm:Error] if the member has no photo or doesn't exist in OSM
|
405
|
+
# @return the photo of the member
|
406
|
+
def get_photo(api, black_and_white=false, options={})
|
407
|
+
raise Osm::ObjectIsInvalid, 'member is invalid' unless valid?
|
408
|
+
require_ability_to(api, :read, :member, section_id)
|
409
|
+
raise Osm::Error, 'the member does not already exist in OSM' if id.nil?
|
410
|
+
raise Osm::Error, "the member doesn't have a photo in OSM" unless has_photo
|
411
|
+
|
412
|
+
cache_key = ['member_photo', self.id, black_and_white]
|
413
|
+
|
414
|
+
if !options[:no_cache] && cache_exist?(api, cache_key)
|
415
|
+
return cache_read(api, cache_key)
|
416
|
+
end
|
417
|
+
|
418
|
+
url = "ext/members/contact/images/member.php?sectionid=#{section_id}&scoutid=#{self.id}&bw=#{black_and_white}"
|
419
|
+
image = api.perform_query(url)
|
420
|
+
|
421
|
+
cache_write(api, cache_key, image) unless image.nil?
|
422
|
+
return image
|
423
|
+
end
|
424
|
+
|
389
425
|
# Get the My.SCOUT link for this member
|
390
426
|
# @param [Osm::Api] api The api to use to make the request
|
391
427
|
# @param [Symbol] link_to The page in My.SCOUT to link to (:payments, :events, :programme, :badges, :notice or :details)
|
392
428
|
# @param [#to_i] item_id Allows you to link to a specfic item (only for :events)
|
393
|
-
# @return [String] the
|
429
|
+
# @return [String] the URL for this member's My.SCOUT
|
394
430
|
# @raise [Osm::ObjectIsInvalid] If the Member is invalid
|
395
431
|
# @raise [Osm::ArgumentIsInvalid] If link_to is not an allowed Symbol
|
396
432
|
# @raise [Osm::Error] if the member does not already exist in OSM or the member's My.SCOUT key could not be retrieved from OSM
|
@@ -400,7 +436,7 @@ module Osm
|
|
400
436
|
raise Osm::Error, 'the member does not already exist in OSM' if id.nil?
|
401
437
|
raise Osm::ArgumentIsInvalid, 'link_to is invalid' unless [:payments, :events, :programme, :badges, :notice, :details].include?(link_to)
|
402
438
|
|
403
|
-
link = "
|
439
|
+
link = "#{api.base_url}/parents/#{link_to}.php?sc=#{self.id}&se=#{section_id}&c=#{myscout_link_key(api)}"
|
404
440
|
link += "&e=#{item_id.to_i}" if item_id && link_to.eql?(:events)
|
405
441
|
return link
|
406
442
|
end
|
data/spec/osm/activity_spec.rb
CHANGED
@@ -102,7 +102,7 @@ describe "Activity" do
|
|
102
102
|
}
|
103
103
|
]
|
104
104
|
}
|
105
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/programme.php?action=getActivity&id=1", :body => body.to_json)
|
105
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/programme.php?action=getActivity&id=1", :body => body.to_json, :content_type => 'application/json')
|
106
106
|
|
107
107
|
|
108
108
|
activity = Osm::Activity.get(@api, 1)
|
data/spec/osm/api_access_spec.rb
CHANGED
@@ -43,7 +43,7 @@ describe "API Access" do
|
|
43
43
|
}
|
44
44
|
]
|
45
45
|
}
|
46
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/users.php?action=getAPIAccess§ionid=1", :body => body.to_json)
|
46
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/users.php?action=getAPIAccess§ionid=1", :body => body.to_json, :content_type => 'application/json')
|
47
47
|
end
|
48
48
|
|
49
49
|
describe "Get All" do
|
data/spec/osm/api_spec.rb
CHANGED
@@ -79,7 +79,7 @@ describe "API" do
|
|
79
79
|
{"sectionid"=>"1", "permissions"=>{"badge"=>20}},
|
80
80
|
{"sectionid"=>"2", "permissions"=>{"badge"=>10}}
|
81
81
|
]
|
82
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/api.php?action=getUserRoles", :body => body.to_json)
|
82
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/api.php?action=getUserRoles", :body => body.to_json, :content_type => 'application/json')
|
83
83
|
|
84
84
|
permissions = {1 => {:badge => [:read, :write]}, 2 => {:badge => [:read]}}
|
85
85
|
OsmTest::Cache.should_not_receive('read')
|
@@ -122,6 +122,20 @@ describe "API" do
|
|
122
122
|
end
|
123
123
|
|
124
124
|
|
125
|
+
describe "Get base URL" do
|
126
|
+
it "For the class" do
|
127
|
+
Osm::Api.base_url(:osm).should == 'https://www.onlinescoutmanager.co.uk'
|
128
|
+
Osm::Api.base_url(:ogm).should == 'http://www.onlineguidemanager.co.uk'
|
129
|
+
end
|
130
|
+
|
131
|
+
it "For an instance" do
|
132
|
+
@api.base_url.should == 'https://www.onlinescoutmanager.co.uk'
|
133
|
+
@api.base_url(:osm).should == 'https://www.onlinescoutmanager.co.uk'
|
134
|
+
@api.base_url(:ogm).should == 'http://www.onlineguidemanager.co.uk'
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
|
125
139
|
describe "OSM and Internet error conditions:" do
|
126
140
|
it "Raises a connection error if the HTTP status code was not 'OK'" do
|
127
141
|
HTTParty.stub(:post) { OsmTest::DummyHttpResult.new(:response=>{:code=>'500'}) }
|
@@ -146,4 +160,4 @@ describe "API" do
|
|
146
160
|
end
|
147
161
|
end
|
148
162
|
|
149
|
-
end
|
163
|
+
end
|
data/spec/osm/badge_spec.rb
CHANGED
@@ -95,9 +95,19 @@ describe "Badge" do
|
|
95
95
|
|
96
96
|
it "Get total requirements gained for a member" do
|
97
97
|
data = Osm::Badge::Data.new(
|
98
|
-
:requirements => {
|
98
|
+
:requirements => {
|
99
|
+
'a_1' => 'a',
|
100
|
+
'a_2' => 'yes',
|
101
|
+
'a_3' => '2000-01-02',
|
102
|
+
'a_4' => 1,
|
103
|
+
'b_1' => 'x',
|
104
|
+
'b_2' => 'xYES',
|
105
|
+
'b_3' => '',
|
106
|
+
'b_4' => nil,
|
107
|
+
'b_5' => 0,
|
108
|
+
}
|
99
109
|
)
|
100
|
-
data.total_gained.should ==
|
110
|
+
data.total_gained.should == 4
|
101
111
|
end
|
102
112
|
|
103
113
|
it "Get total requirements met in each section for a member" do
|
@@ -108,37 +118,140 @@ describe "Badge" do
|
|
108
118
|
Osm::Badge::Requirement.new(:field => 'a_2'),
|
109
119
|
Osm::Badge::Requirement.new(:field => 'b_1'),
|
110
120
|
Osm::Badge::Requirement.new(:field => 'b_2'),
|
121
|
+
Osm::Badge::Requirement.new(:field => 'y_1'),
|
122
|
+
Osm::Badge::Requirement.new(:field => 'y_2'),
|
111
123
|
]
|
112
124
|
)
|
113
125
|
data = Osm::Badge::Data.new(
|
114
126
|
:badge => badge,
|
115
|
-
:requirements => {
|
127
|
+
:requirements => {
|
128
|
+
'a_1' => 'x',
|
129
|
+
'a_2' => '',
|
130
|
+
'b_1' => 'yes',
|
131
|
+
'b_2' => '2000-01-02',
|
132
|
+
'y_1' => 1,
|
133
|
+
}
|
116
134
|
)
|
117
|
-
data.gained_in_sections.should == {'a' => 0, 'b' => 2}
|
135
|
+
data.gained_in_sections.should == {'a' => 0, 'b' => 2, 'y' => 1}
|
118
136
|
end
|
119
137
|
|
120
138
|
it "Get number of sections met for a member" do
|
121
139
|
badge = Osm::Badge.new(
|
122
|
-
:needed_from_section => {'a' => 1, 'b' => 2},
|
140
|
+
:needed_from_section => {'a' => 1, 'b' => 2, 'c' => 1},
|
123
141
|
:requirements => [
|
124
142
|
Osm::Badge::Requirement.new(:field => 'a_1'),
|
125
143
|
Osm::Badge::Requirement.new(:field => 'a_2'),
|
126
144
|
Osm::Badge::Requirement.new(:field => 'b_1'),
|
127
145
|
Osm::Badge::Requirement.new(:field => 'b_2'),
|
146
|
+
Osm::Badge::Requirement.new(:field => 'c_1'),
|
128
147
|
]
|
129
148
|
)
|
130
149
|
data = Osm::Badge::Data.new(
|
131
150
|
:badge => badge,
|
132
|
-
:requirements => {'a_1' => 'x', 'a_2' => '', 'b_1' => 'yes', 'b_2' => '2000-01-02'}
|
151
|
+
:requirements => {'a_1' => 'x', 'a_2' => '', 'b_1' => 'yes', 'b_2' => '2000-01-02', 'c_1' => 'yes'}
|
133
152
|
)
|
134
|
-
data.sections_gained.should ==
|
153
|
+
data.sections_gained.should == 2
|
154
|
+
end
|
155
|
+
|
156
|
+
describe "Works out if the badge has been earnt" do
|
157
|
+
it "Staged" do
|
158
|
+
badge = Osm::StagedBadge.new(:osm_key => 'not_hikes_or_nights')
|
159
|
+
data = Osm::Badge::Data.new(:awarded => 2, :badge => badge)
|
160
|
+
|
161
|
+
data.stub(:earnt) { 1 }
|
162
|
+
data.earnt?.should be_false
|
163
|
+
|
164
|
+
data.stub(:earnt) { 2 }
|
165
|
+
data.earnt?.should be_false
|
166
|
+
|
167
|
+
data.stub(:earnt) { 3 }
|
168
|
+
data.earnt?.should be_true
|
169
|
+
end
|
170
|
+
|
171
|
+
it "Non staged" do
|
172
|
+
badge = Osm::ActivityBadge.new()
|
173
|
+
data = Osm::Badge::Data.new(:completed => 1, :awarded => 1, :badge => badge)
|
174
|
+
data.earnt?.should be_false
|
175
|
+
|
176
|
+
badge = Osm::ActivityBadge.new()
|
177
|
+
data = Osm::Badge::Data.new(:completed => 1, :awarded => 0, :badge => badge)
|
178
|
+
data.earnt?.should be_true
|
179
|
+
|
180
|
+
|
181
|
+
badge = Osm::ActivityBadge.new(:total_needed => 0, :sections_needed => 2, :needed_from_section => {'a' => 2, 'b' => 1})
|
182
|
+
data = Osm::Badge::Data.new(:requirements => {'a_01'=>'y', 'a_02'=>'y', 'b_01' => 'y'}, :completed => 0, :awarded => 0, :badge => badge)
|
183
|
+
data.earnt?.should be_true
|
184
|
+
|
185
|
+
badge = Osm::ActivityBadge.new(:total_needed => 0, :sections_needed => 2, :needed_from_section => {'a' => 2, 'b' => 1})
|
186
|
+
data = Osm::Badge::Data.new(:requirements => {'a_01'=>'y', 'a_02'=>'y', 'b_01' => 'x'}, :completed => 0, :awarded => 0, :badge => badge)
|
187
|
+
data.earnt?.should be_false
|
188
|
+
|
189
|
+
badge = Osm::ActivityBadge.new(:total_needed => 3, :sections_needed => 0, :needed_from_section => {'a' => 2, 'b' => 1})
|
190
|
+
data = Osm::Badge::Data.new(:requirements => {'a_01'=>'y', 'a_02'=>'y', 'b_01' => 'y'}, :completed => 0, :awarded => 0, :badge => badge)
|
191
|
+
data.earnt?.should be_true
|
192
|
+
|
193
|
+
badge = Osm::ActivityBadge.new(:total_needed => 3, :sections_needed => 0, :needed_from_section => {'a' => 2, 'b' => 1})
|
194
|
+
data = Osm::Badge::Data.new(:requirements => {'a_01'=>'y', 'a_02'=>'x', 'b_01' => 'y'}, :completed => 0, :awarded => 0, :badge => badge)
|
195
|
+
data.earnt?.should be_false
|
196
|
+
|
197
|
+
badge = Osm::ActivityBadge.new(:total_needed => 3, :sections_needed => 2, :needed_from_section => {'a' => 2, 'b' => 1})
|
198
|
+
data = Osm::Badge::Data.new(:requirements => {'a_01'=>'y', 'a_02'=>'y', 'b_01' => 'y'}, :completed => 0, :awarded => 0, :badge => badge)
|
199
|
+
data.earnt?.should be_true
|
200
|
+
|
201
|
+
badge = Osm::ActivityBadge.new(:total_needed => 1, :sections_needed => 1, :needed_from_section => {'a' => 2, 'b' => 1})
|
202
|
+
data = Osm::Badge::Data.new(:requirements => {'a_01'=>'y', 'a_02'=>'y', 'b_01' => 'y'}, :completed => 0, :awarded => 0, :badge => badge)
|
203
|
+
data.earnt?.should be_true
|
204
|
+
end
|
135
205
|
end
|
136
206
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
207
|
+
describe "Works out what level of a badge has been earnt" do
|
208
|
+
it "Staged" do
|
209
|
+
badge = Osm::StagedBadge.new(:osm_key => 'not_hikes_or_nights', :needed_from_section => {'a'=>1,'b'=>1,'c'=>1,'d'=>2,'e'=>2})
|
210
|
+
|
211
|
+
data = Osm::Badge::Data.new(:requirements=>{'a_01'=>'','b_01'=>'','c_01'=>'','d_01'=>'','d_02'=>'','e_01'=>'','e_02'=>''}, :badge=>badge)
|
212
|
+
data.earnt.should == 0
|
213
|
+
|
214
|
+
data = Osm::Badge::Data.new(:requirements=>{'a_01'=>'y','b_01'=>'','c_01'=>'','d_01'=>'','d_02'=>'','e_01'=>'','e_02'=>''}, :badge=>badge)
|
215
|
+
data.earnt.should == 1
|
216
|
+
|
217
|
+
data = Osm::Badge::Data.new(:requirements=>{'a_01'=>'y','b_01'=>'y','c_01'=>'','d_01'=>'y','d_02'=>'','e_01'=>'','e_02'=>''}, :badge=>badge)
|
218
|
+
data.earnt.should == 2
|
219
|
+
|
220
|
+
data = Osm::Badge::Data.new(:requirements=>{'a_01'=>'y','b_01'=>'y','c_01'=>'','d_01'=>'y','d_02'=>'y','e_01'=>'','e_02'=>''}, :badge=>badge)
|
221
|
+
data.earnt.should == 4
|
222
|
+
end
|
223
|
+
|
224
|
+
it "Nights away" do
|
225
|
+
badge = Osm::StagedBadge.new(:osm_key => 'nightsaway')
|
226
|
+
|
227
|
+
Osm::Badge::Data.new(:requirements => {'y_01'=>3}, :badge => badge).earnt.should == 1
|
228
|
+
Osm::Badge::Data.new(:requirements => {'y_01'=>5}, :badge => badge).earnt.should == 5
|
229
|
+
Osm::Badge::Data.new(:requirements => {'y_01'=>6}, :badge => badge).earnt.should == 5
|
230
|
+
Osm::Badge::Data.new(:requirements => {'y_01'=>199}, :badge => badge).earnt.should == 175
|
231
|
+
Osm::Badge::Data.new(:requirements => {'y_01'=>200}, :badge => badge).earnt.should == 200
|
232
|
+
Osm::Badge::Data.new(:requirements => {'y_01'=>999}, :badge => badge).earnt.should == 200
|
233
|
+
end
|
234
|
+
|
235
|
+
it "Hikes away" do
|
236
|
+
badge = Osm::StagedBadge.new(:osm_key => 'hikes')
|
237
|
+
|
238
|
+
Osm::Badge::Data.new(:requirements => {'y_01'=>3}, :badge => badge).earnt.should == 1
|
239
|
+
Osm::Badge::Data.new(:requirements => {'y_01'=>5}, :badge => badge).earnt.should == 5
|
240
|
+
Osm::Badge::Data.new(:requirements => {'y_01'=>6}, :badge => badge).earnt.should == 5
|
241
|
+
Osm::Badge::Data.new(:requirements => {'y_01'=>49}, :badge => badge).earnt.should == 35
|
242
|
+
Osm::Badge::Data.new(:requirements => {'y_01'=>50}, :badge => badge).earnt.should == 50
|
243
|
+
Osm::Badge::Data.new(:requirements => {'y_01'=>999}, :badge => badge).earnt.should == 50
|
244
|
+
end
|
245
|
+
|
246
|
+
it "Non staged" do
|
247
|
+
data = Osm::Badge::Data.new(:badge => Osm::ActivityBadge.new)
|
248
|
+
|
249
|
+
data.stub(:earnt?) { true }
|
250
|
+
data.earnt.should == 1
|
251
|
+
|
252
|
+
data.stub(:earnt?) { false }
|
253
|
+
data.earnt.should == 0
|
254
|
+
end
|
142
255
|
end
|
143
256
|
|
144
257
|
it "Works out if the badge has been started" do
|
@@ -285,7 +398,7 @@ describe "Badge" do
|
|
285
398
|
end
|
286
399
|
|
287
400
|
it "Core" do
|
288
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=getInitialBadges&type=core§ionid=1§ion=beavers&termid=2", :body => @data)
|
401
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=getInitialBadges&type=core§ionid=1§ion=beavers&termid=2", :body => @data, :content_type => 'application/json')
|
289
402
|
Osm::Term.stub(:get_current_term_for_section){ Osm::Term.new(:id => 2) }
|
290
403
|
|
291
404
|
badges = Osm::CoreBadge.get_badges_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers))
|
@@ -307,7 +420,7 @@ describe "Badge" do
|
|
307
420
|
end
|
308
421
|
|
309
422
|
it "Challenge" do
|
310
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=getInitialBadges&type=challenge§ionid=1§ion=beavers&termid=2", :body => @data)
|
423
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=getInitialBadges&type=challenge§ionid=1§ion=beavers&termid=2", :body => @data, :content_type => 'application/json')
|
311
424
|
Osm::Term.stub(:get_current_term_for_section){ Osm::Term.new(:id => 2) }
|
312
425
|
|
313
426
|
badges = Osm::ChallengeBadge.get_badges_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers))
|
@@ -329,7 +442,7 @@ describe "Badge" do
|
|
329
442
|
end
|
330
443
|
|
331
444
|
it "Staged" do
|
332
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=getInitialBadges&type=staged§ionid=1§ion=beavers&termid=2", :body => @data)
|
445
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=getInitialBadges&type=staged§ionid=1§ion=beavers&termid=2", :body => @data, :content_type => 'application/json')
|
333
446
|
Osm::Term.stub(:get_current_term_for_section){ Osm::Term.new(:id => 2) }
|
334
447
|
|
335
448
|
badges = Osm::StagedBadge.get_badges_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers))
|
@@ -351,7 +464,7 @@ describe "Badge" do
|
|
351
464
|
end
|
352
465
|
|
353
466
|
it "Activity" do
|
354
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=getInitialBadges&type=activity§ionid=1§ion=beavers&termid=2", :body => @data)
|
467
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=getInitialBadges&type=activity§ionid=1§ion=beavers&termid=2", :body => @data, :content_type => 'application/json')
|
355
468
|
Osm::Term.stub(:get_current_term_for_section){ Osm::Term.new(:id => 2) }
|
356
469
|
|
357
470
|
badges = Osm::ActivityBadge.get_badges_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers))
|
@@ -373,7 +486,7 @@ describe "Badge" do
|
|
373
486
|
end
|
374
487
|
|
375
488
|
it "For a different section type" do
|
376
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=getInitialBadges&type=activity§ionid=1§ion=cubs&termid=2", :body => @data)
|
489
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=getInitialBadges&type=activity§ionid=1§ion=cubs&termid=2", :body => @data, :content_type => 'application/json')
|
377
490
|
Osm::Term.stub(:get_current_term_for_section){ Osm::Term.new(:id => 2) }
|
378
491
|
|
379
492
|
badges = Osm::ActivityBadge.get_badges_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), :cubs)
|
@@ -404,7 +517,7 @@ describe "Badge" do
|
|
404
517
|
end
|
405
518
|
|
406
519
|
it "Core badge" do
|
407
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?termid=2&type=core§ion=beavers&c=badge§ionid=1", :body => @data)
|
520
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?termid=2&type=core§ion=beavers&c=badge§ionid=1", :body => @data, :content_type => 'application/json')
|
408
521
|
datas = Osm::CoreBadge.new(:osm_key => 'badge').get_data_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), 2)
|
409
522
|
datas.size.should == 1
|
410
523
|
data = datas[0]
|
@@ -420,7 +533,7 @@ describe "Badge" do
|
|
420
533
|
end
|
421
534
|
|
422
535
|
it "Challenge badge" do
|
423
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?termid=2&type=challenge§ion=beavers&c=badge§ionid=1", :body => @data)
|
536
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?termid=2&type=challenge§ion=beavers&c=badge§ionid=1", :body => @data, :content_type => 'application/json')
|
424
537
|
datas = Osm::ChallengeBadge.new(:osm_key => 'badge').get_data_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), 2)
|
425
538
|
datas.size.should == 1
|
426
539
|
data = datas[0]
|
@@ -436,7 +549,7 @@ describe "Badge" do
|
|
436
549
|
end
|
437
550
|
|
438
551
|
it "Staged badge" do
|
439
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?termid=2&type=staged§ion=beavers&c=badge§ionid=1", :body => @data)
|
552
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?termid=2&type=staged§ion=beavers&c=badge§ionid=1", :body => @data, :content_type => 'application/json')
|
440
553
|
datas = Osm::StagedBadge.new(:osm_key => 'badge').get_data_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), 2)
|
441
554
|
datas.size.should == 1
|
442
555
|
data = datas[0]
|
@@ -452,7 +565,7 @@ describe "Badge" do
|
|
452
565
|
end
|
453
566
|
|
454
567
|
it "Activity badge" do
|
455
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?termid=2&type=activity§ion=beavers&c=badge§ionid=1", :body => @data)
|
568
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?termid=2&type=activity§ion=beavers&c=badge§ionid=1", :body => @data, :content_type => 'application/json')
|
456
569
|
datas = Osm::ActivityBadge.new(:osm_key => 'badge').get_data_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), 2)
|
457
570
|
datas.size.should == 1
|
458
571
|
data = datas[0]
|
@@ -713,7 +826,7 @@ describe "Badge" do
|
|
713
826
|
end
|
714
827
|
|
715
828
|
it "Core badge" do
|
716
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=summary§ion=beavers§ionid=1&termid=2&type=core", :body => @data)
|
829
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=summary§ion=beavers§ionid=1&termid=2&type=core", :body => @data, :content_type => 'application/json')
|
717
830
|
summary = Osm::CoreBadge.get_summary_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), 2)
|
718
831
|
summary.size.should == 1
|
719
832
|
summary[0].should == {
|
@@ -725,7 +838,7 @@ describe "Badge" do
|
|
725
838
|
end
|
726
839
|
|
727
840
|
it "Challenge badge" do
|
728
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=summary§ion=beavers§ionid=1&termid=2&type=challenge", :body => @data)
|
841
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=summary§ion=beavers§ionid=1&termid=2&type=challenge", :body => @data, :content_type => 'application/json')
|
729
842
|
summary = Osm::ChallengeBadge.get_summary_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), 2)
|
730
843
|
summary.size.should == 1
|
731
844
|
summary[0].should == {
|
@@ -737,7 +850,7 @@ describe "Badge" do
|
|
737
850
|
end
|
738
851
|
|
739
852
|
it "Staged badge" do
|
740
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=summary§ion=beavers§ionid=1&termid=2&type=staged", :body => @data)
|
853
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=summary§ion=beavers§ionid=1&termid=2&type=staged", :body => @data, :content_type => 'application/json')
|
741
854
|
summary = Osm::StagedBadge.get_summary_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), 2)
|
742
855
|
summary.size.should == 1
|
743
856
|
summary[0].should == {
|
@@ -749,7 +862,7 @@ describe "Badge" do
|
|
749
862
|
end
|
750
863
|
|
751
864
|
it "Activity badge" do
|
752
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=summary§ion=beavers§ionid=1&termid=2&type=activity", :body => @data)
|
865
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=summary§ion=beavers§ionid=1&termid=2&type=activity", :body => @data, :content_type => 'application/json')
|
753
866
|
summary = Osm::ActivityBadge.get_summary_for_section(@api, Osm::Section.new(:id => 1, :type => :beavers), 2)
|
754
867
|
summary.size.should == 1
|
755
868
|
summary[0].should == {
|