osm 0.2.2 → 0.3.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 +25 -0
- data/README.md +11 -11
- data/lib/osm.rb +1 -0
- data/lib/osm/badge.rb +357 -0
- data/lib/osm/badges.rb +149 -0
- data/lib/osm/flexi_record.rb +17 -7
- data/lib/osm/section.rb +0 -23
- data/osm.gemspec +2 -1
- data/spec/osm/badge_spec.rb +452 -0
- data/spec/osm/badges_spec.rb +113 -0
- data/spec/osm/flexi_record_spec.rb +4 -2
- data/spec/osm/section_spec.rb +0 -16
- data/version.rb +1 -1
- metadata +36 -23
- data/lib/osm/due_badges.rb +0 -102
- data/spec/osm/due_badges_spec.rb +0 -65
@@ -0,0 +1,113 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe "Badges" do
|
5
|
+
|
6
|
+
|
7
|
+
describe "Using the OSM API" do
|
8
|
+
|
9
|
+
it "Get due badges" do
|
10
|
+
data = {
|
11
|
+
'pending' => {
|
12
|
+
'badge_name' => [
|
13
|
+
{
|
14
|
+
'scoutid' => '1',
|
15
|
+
'firstname' => 'John',
|
16
|
+
'lastname' => 'Doe',
|
17
|
+
'level' => '',
|
18
|
+
'extra' => '',
|
19
|
+
}
|
20
|
+
],
|
21
|
+
'staged_staged_participation' => [{
|
22
|
+
'sid' => '2',
|
23
|
+
'firstname' => 'Jane',
|
24
|
+
'lastname' => 'Doe',
|
25
|
+
'level' => '2',
|
26
|
+
'extra' => 'Lvl 2'
|
27
|
+
}, {
|
28
|
+
'sid' => '1',
|
29
|
+
'firstname' => 'John',
|
30
|
+
'lastname' => 'Doe',
|
31
|
+
'level' => '2',
|
32
|
+
'extra' => 'Lvl 2'
|
33
|
+
}
|
34
|
+
]
|
35
|
+
},
|
36
|
+
|
37
|
+
'description' => {
|
38
|
+
'badge_name' => {
|
39
|
+
'name' => 'Badge Name',
|
40
|
+
'section' => 'cubs',
|
41
|
+
'type' => 'activity',
|
42
|
+
'badge' => 'badge_name'
|
43
|
+
},
|
44
|
+
'staged_staged_participation' => {
|
45
|
+
'name' => 'Participation',
|
46
|
+
'section' => 'staged',
|
47
|
+
'type' => 'staged',
|
48
|
+
'badge' => 'participation'
|
49
|
+
}
|
50
|
+
}
|
51
|
+
}
|
52
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=outstandingBadges§ion=cubs§ionid=1&termid=2", :body => data.to_json)
|
53
|
+
|
54
|
+
db = Osm::Badges.get_due_badges(@api, Osm::Section.new(:id => 1, :type => :cubs), 2)
|
55
|
+
db.empty?.should == false
|
56
|
+
db.descriptions.should == {'badge_name_1'=>'Badge Name', 'staged_staged_participation_2'=>'Participation (Level 2)'}
|
57
|
+
db.by_member.should == {'John Doe'=>['badge_name_1', 'staged_staged_participation_2'], 'Jane Doe'=>['staged_staged_participation_2']}
|
58
|
+
db.totals.should == {'staged_staged_participation_2'=>2, 'badge_name_1'=>1}
|
59
|
+
db.valid?.should be_true
|
60
|
+
end
|
61
|
+
|
62
|
+
it "handles an empty array representing no due badges" do
|
63
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=outstandingBadges§ion=cubs§ionid=1&termid=2", :body => '[]')
|
64
|
+
db = Osm::Badges.get_due_badges(@api, Osm::Section.new(:id => 1, :type => :cubs), 2)
|
65
|
+
db.should_not == nil
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
it "Fetch badge stock levels" do
|
70
|
+
badges_body = {
|
71
|
+
'stock' => {
|
72
|
+
'sectionid' => '1',
|
73
|
+
'badge_1' => '1',
|
74
|
+
'badge_2' => '2'
|
75
|
+
}
|
76
|
+
}
|
77
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=getInitialBadges&type=core§ionid=1§ion=beavers&termid=2", :body => badges_body.to_json)
|
78
|
+
Osm::Term.stub(:get_current_term_for_section) { Osm::Term.new(:id => 2) }
|
79
|
+
|
80
|
+
section = Osm::Section.new(:id => 1, :type => :beavers)
|
81
|
+
Osm::Badges.get_stock(@api, section).should == {'badge_1' => 1, 'badge_2' => 2}
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "Update badge stock levels" do
|
85
|
+
|
86
|
+
it "Succeds" do
|
87
|
+
url = "https://www.onlinescoutmanager.co.uk/challenges.php?action=updateStock"
|
88
|
+
HTTParty.should_receive(:post).with(url, {:body => {
|
89
|
+
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
90
|
+
'token' => @CONFIGURATION[:api][:osm][:token],
|
91
|
+
'userid' => 'user_id',
|
92
|
+
'secret' => 'secret',
|
93
|
+
'stock' => 10,
|
94
|
+
'table' => 'badge',
|
95
|
+
'sectionid' => 1,
|
96
|
+
'section' => :beavers,
|
97
|
+
}}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"sectionid":"1","badge":"10"}'}) }
|
98
|
+
|
99
|
+
section = Osm::Section.new(:id => 1, :type => :beavers)
|
100
|
+
Osm::Badges.update_stock(@api, section, 'badge', 10).should be_true
|
101
|
+
end
|
102
|
+
|
103
|
+
it "Fails" do
|
104
|
+
HTTParty.stub(:post) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"sectionid":"1","badge":"1"}'}) }
|
105
|
+
section = Osm::Section.new(:id => 1, :type => :beavers)
|
106
|
+
Osm::Badges.update_stock(@api, section, 'badge', 10).should be_false
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
@@ -441,8 +441,9 @@ describe "Flexi Record" do
|
|
441
441
|
:flexi_record => fr,
|
442
442
|
:member_id => 4,
|
443
443
|
:grouping_id => 5,
|
444
|
-
:fields => {'f_1' => 'value'}
|
444
|
+
:fields => {'f_1' => '', 'f_2' => 'value'}
|
445
445
|
)
|
446
|
+
fr_data.fields['f_1'] = 'value'
|
446
447
|
fr_data.update(@api).should be_true
|
447
448
|
end
|
448
449
|
|
@@ -463,8 +464,9 @@ describe "Flexi Record" do
|
|
463
464
|
:flexi_record => fr,
|
464
465
|
:member_id => 4,
|
465
466
|
:grouping_id => 5,
|
466
|
-
:fields => {'f_1' => 'value'}
|
467
|
+
:fields => {'f_1' => 'old value'}
|
467
468
|
)
|
469
|
+
fr_data.fields['f_1'] = 'new value'
|
468
470
|
fr_data.update(@api).should be_false
|
469
471
|
end
|
470
472
|
|
data/spec/osm/section_spec.rb
CHANGED
@@ -190,22 +190,6 @@ describe "Section" do
|
|
190
190
|
section.set_notepad(@api, 'content').should be_false
|
191
191
|
end
|
192
192
|
|
193
|
-
|
194
|
-
it "Fetch badge stock levels" do
|
195
|
-
badges_body = {
|
196
|
-
'stock' => {
|
197
|
-
'sectionid' => '1',
|
198
|
-
'badge_1' => '1',
|
199
|
-
'badge_2' => '2'
|
200
|
-
}
|
201
|
-
}
|
202
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=getInitialBadges&type=core§ionid=1§ion=beavers&termid=2", :body => badges_body.to_json)
|
203
|
-
|
204
|
-
section = Osm::Section.get(@api, 1)
|
205
|
-
section.should_not be_nil
|
206
|
-
section.get_badge_stock(@api, 2).should == {'badge_1' => 1, 'badge_2' => 2}
|
207
|
-
end
|
208
|
-
|
209
193
|
end
|
210
194
|
|
211
195
|
|
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.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-02-
|
12
|
+
date: 2013-02-26 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &86835090 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.2'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *86835090
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: httparty
|
27
|
-
requirement: &
|
27
|
+
requirement: &86833800 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0.9'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *86833800
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: active_attr
|
38
|
-
requirement: &
|
38
|
+
requirement: &86832220 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0.6'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *86832220
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: activemodel
|
49
|
-
requirement: &
|
49
|
+
requirement: &86819190 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,21 @@ dependencies:
|
|
54
54
|
version: '3.2'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *86819190
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: dirty_hashy
|
60
|
+
requirement: &86818730 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ~>
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 0.2.1
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *86818730
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: rake
|
60
|
-
requirement: &
|
71
|
+
requirement: &86818240 !ruby/object:Gem::Requirement
|
61
72
|
none: false
|
62
73
|
requirements:
|
63
74
|
- - ~>
|
@@ -65,10 +76,10 @@ dependencies:
|
|
65
76
|
version: '10.0'
|
66
77
|
type: :development
|
67
78
|
prerelease: false
|
68
|
-
version_requirements: *
|
79
|
+
version_requirements: *86818240
|
69
80
|
- !ruby/object:Gem::Dependency
|
70
81
|
name: rspec
|
71
|
-
requirement: &
|
82
|
+
requirement: &86817390 !ruby/object:Gem::Requirement
|
72
83
|
none: false
|
73
84
|
requirements:
|
74
85
|
- - ~>
|
@@ -76,10 +87,10 @@ dependencies:
|
|
76
87
|
version: '2.11'
|
77
88
|
type: :development
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: *
|
90
|
+
version_requirements: *86817390
|
80
91
|
- !ruby/object:Gem::Dependency
|
81
92
|
name: fakeweb
|
82
|
-
requirement: &
|
93
|
+
requirement: &86816770 !ruby/object:Gem::Requirement
|
83
94
|
none: false
|
84
95
|
requirements:
|
85
96
|
- - ~>
|
@@ -87,10 +98,10 @@ dependencies:
|
|
87
98
|
version: '1.3'
|
88
99
|
type: :development
|
89
100
|
prerelease: false
|
90
|
-
version_requirements: *
|
101
|
+
version_requirements: *86816770
|
91
102
|
- !ruby/object:Gem::Dependency
|
92
103
|
name: guard-rspec
|
93
|
-
requirement: &
|
104
|
+
requirement: &86816110 !ruby/object:Gem::Requirement
|
94
105
|
none: false
|
95
106
|
requirements:
|
96
107
|
- - ~>
|
@@ -98,18 +109,18 @@ dependencies:
|
|
98
109
|
version: '2.4'
|
99
110
|
type: :development
|
100
111
|
prerelease: false
|
101
|
-
version_requirements: *
|
112
|
+
version_requirements: *86816110
|
102
113
|
- !ruby/object:Gem::Dependency
|
103
114
|
name: rb-inotify
|
104
|
-
requirement: &
|
115
|
+
requirement: &86815330 !ruby/object:Gem::Requirement
|
105
116
|
none: false
|
106
117
|
requirements:
|
107
118
|
- - ~>
|
108
119
|
- !ruby/object:Gem::Version
|
109
|
-
version: 0.
|
120
|
+
version: '0.9'
|
110
121
|
type: :development
|
111
122
|
prerelease: false
|
112
|
-
version_requirements: *
|
123
|
+
version_requirements: *86815330
|
113
124
|
description: Use the Online Scout Manager API (https://www.onlinescoutmanager.co.uk)
|
114
125
|
to retrieve and save data.
|
115
126
|
email:
|
@@ -133,7 +144,8 @@ files:
|
|
133
144
|
- lib/osm/activity.rb
|
134
145
|
- lib/osm/api.rb
|
135
146
|
- lib/osm/api_access.rb
|
136
|
-
- lib/osm/
|
147
|
+
- lib/osm/badge.rb
|
148
|
+
- lib/osm/badges.rb
|
137
149
|
- lib/osm/event.rb
|
138
150
|
- lib/osm/flexi_record.rb
|
139
151
|
- lib/osm/grouping.rb
|
@@ -147,7 +159,8 @@ files:
|
|
147
159
|
- spec/osm/activity_spec.rb
|
148
160
|
- spec/osm/api_access_spec.rb
|
149
161
|
- spec/osm/api_spec.rb
|
150
|
-
- spec/osm/
|
162
|
+
- spec/osm/badge_spec.rb
|
163
|
+
- spec/osm/badges_spec.rb
|
151
164
|
- spec/osm/event_spec.rb
|
152
165
|
- spec/osm/flexi_record_spec.rb
|
153
166
|
- spec/osm/grouping_spec.rb
|
data/lib/osm/due_badges.rb
DELETED
@@ -1,102 +0,0 @@
|
|
1
|
-
module Osm
|
2
|
-
|
3
|
-
class DueBadges < Osm::Model
|
4
|
-
|
5
|
-
# @!attribute [rw] descriptions
|
6
|
-
# @return [Hash] descriptions for each of the badges
|
7
|
-
# @!attribute [rw] by_member
|
8
|
-
# @return [Hash] the due badges grouped by member
|
9
|
-
|
10
|
-
attribute :descriptions, :default => {}
|
11
|
-
attribute :by_member, :default => {}
|
12
|
-
|
13
|
-
attr_accessible :descriptions, :by_member
|
14
|
-
|
15
|
-
validates :descriptions, :hash => {:key_type => String, :value_type => String}
|
16
|
-
|
17
|
-
validates_each :by_member do |record, attr, value|
|
18
|
-
desc_keys = record.descriptions.keys
|
19
|
-
record.errors.add(attr, 'must be a Hash') unless value.is_a?(Hash)
|
20
|
-
value.each do |k, v|
|
21
|
-
record.errors.add(attr, 'keys must be String') unless k.is_a?(String)
|
22
|
-
record.errors.add(attr, 'values must be Arrays') unless v.is_a?(Array)
|
23
|
-
v.each do |vv|
|
24
|
-
record.errors.add(attr, 'internal values must be Strings') unless vv.is_a?(String)
|
25
|
-
record.errors.add(attr, 'internal values must exist as a key in :descriptions') unless desc_keys.include?(vv)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
# Get due badges
|
32
|
-
# @param [Osm::Api] api The api to use to make the request
|
33
|
-
# @param [Osm::Section, Fixnum, #to_i] section The section (or its ID) to get the due badges for
|
34
|
-
# @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
|
35
|
-
# @!macro options_get
|
36
|
-
# @return [Osm::DueBadges]
|
37
|
-
def self.get(api, section, term=nil, options={})
|
38
|
-
require_ability_to(api, :read, :badge, section, options)
|
39
|
-
section = Osm::Section.get(api, section, options) if section.is_a?(Fixnum)
|
40
|
-
term_id = (term.nil? ? Osm::Term.get_current_term_for_section(api, section, options) : term).to_i
|
41
|
-
cache_key = ['due_badges', section.id, term_id]
|
42
|
-
|
43
|
-
if !options[:no_cache] && cache_exist?(api, cache_key)
|
44
|
-
return cache_read(api, cache_key)
|
45
|
-
end
|
46
|
-
|
47
|
-
data = api.perform_query("challenges.php?action=outstandingBadges§ion=#{section.type}§ionid=#{section.id}&termid=#{term_id}")
|
48
|
-
|
49
|
-
|
50
|
-
data = {} unless data.is_a?(Hash) # OSM/OGM returns an empty array to represent no badges
|
51
|
-
pending_raw = data['pending'] || {}
|
52
|
-
descriptions_raw = data['description'] || {}
|
53
|
-
|
54
|
-
attributes = {
|
55
|
-
:by_member => {},
|
56
|
-
:descriptions => {}
|
57
|
-
}
|
58
|
-
|
59
|
-
pending_raw.each do |key, members|
|
60
|
-
members.each do |member|
|
61
|
-
name = "#{member['firstname']} #{member['lastname']}"
|
62
|
-
description = descriptions_raw[key]['name'] + (descriptions_raw[key]['section'].eql?('staged') ? " (Level #{member['level']})" : '')
|
63
|
-
description_key = key + (descriptions_raw[key]['section'].eql?('staged') ? "_#{member['level']}" : '_1')
|
64
|
-
attributes[:descriptions][description_key] = description
|
65
|
-
attributes[:by_member][name] ||= []
|
66
|
-
attributes[:by_member][name].push(description_key)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
due_badges = Osm::DueBadges.new(attributes)
|
71
|
-
cache_write(api, cache_key, due_badges)
|
72
|
-
return due_badges
|
73
|
-
end
|
74
|
-
|
75
|
-
|
76
|
-
# @!method initialize
|
77
|
-
# Initialize a new Term
|
78
|
-
# @param [Hash] attributes The hash of attributes (see attributes for descriptions, use Symbol of attribute name as the key)
|
79
|
-
|
80
|
-
|
81
|
-
# Check if there are no badges due
|
82
|
-
# @return [Boolean]
|
83
|
-
def empty?
|
84
|
-
return by_member.empty?
|
85
|
-
end
|
86
|
-
|
87
|
-
# Calculate the total number of badges needed
|
88
|
-
# @return [Hash] the total number of each badge which is due
|
89
|
-
def totals()
|
90
|
-
totals = {}
|
91
|
-
by_member.keys.each do |member_name|
|
92
|
-
by_member[member_name].each do |badge|
|
93
|
-
totals[badge] ||= 0
|
94
|
-
totals[badge] += 1
|
95
|
-
end
|
96
|
-
end
|
97
|
-
return totals
|
98
|
-
end
|
99
|
-
|
100
|
-
end # Class DueBadges
|
101
|
-
|
102
|
-
end # Module
|
data/spec/osm/due_badges_spec.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe "DueBadge" do
|
5
|
-
|
6
|
-
it "Create from API data" do
|
7
|
-
data = {
|
8
|
-
'pending' => {
|
9
|
-
'badge_name' => [
|
10
|
-
{
|
11
|
-
'scoutid' => '1',
|
12
|
-
'firstname' => 'John',
|
13
|
-
'lastname' => 'Doe',
|
14
|
-
'level' => '',
|
15
|
-
'extra' => '',
|
16
|
-
}
|
17
|
-
],
|
18
|
-
'staged_staged_participation' => [{
|
19
|
-
'sid' => '2',
|
20
|
-
'firstname' => 'Jane',
|
21
|
-
'lastname' => 'Doe',
|
22
|
-
'level' => '2',
|
23
|
-
'extra' => 'Lvl 2'
|
24
|
-
}, {
|
25
|
-
'sid' => '1',
|
26
|
-
'firstname' => 'John',
|
27
|
-
'lastname' => 'Doe',
|
28
|
-
'level' => '2',
|
29
|
-
'extra' => 'Lvl 2'
|
30
|
-
}
|
31
|
-
]
|
32
|
-
},
|
33
|
-
|
34
|
-
'description' => {
|
35
|
-
'badge_name' => {
|
36
|
-
'name' => 'Badge Name',
|
37
|
-
'section' => 'cubs',
|
38
|
-
'type' => 'activity',
|
39
|
-
'badge' => 'badge_name'
|
40
|
-
},
|
41
|
-
'staged_staged_participation' => {
|
42
|
-
'name' => 'Participation',
|
43
|
-
'section' => 'staged',
|
44
|
-
'type' => 'staged',
|
45
|
-
'badge' => 'participation'
|
46
|
-
}
|
47
|
-
}
|
48
|
-
}
|
49
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=outstandingBadges§ion=cubs§ionid=1&termid=2", :body => data.to_json)
|
50
|
-
|
51
|
-
db = Osm::DueBadges.get(@api, Osm::Section.new(:id => 1, :type => :cubs), 2)
|
52
|
-
db.empty?.should == false
|
53
|
-
db.descriptions.should == {'badge_name_1'=>'Badge Name', 'staged_staged_participation_2'=>'Participation (Level 2)'}
|
54
|
-
db.by_member.should == {'John Doe'=>['badge_name_1', 'staged_staged_participation_2'], 'Jane Doe'=>['staged_staged_participation_2']}
|
55
|
-
db.totals.should == {'staged_staged_participation_2'=>2, 'badge_name_1'=>1}
|
56
|
-
db.valid?.should be_true
|
57
|
-
end
|
58
|
-
|
59
|
-
it "handles an empty array representing no due badges" do
|
60
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/challenges.php?action=outstandingBadges§ion=cubs§ionid=1&termid=2", :body => '[]')
|
61
|
-
db = Osm::DueBadges.get(@api, Osm::Section.new(:id => 1, :type => :cubs), 2)
|
62
|
-
db.should_not == nil
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|