osm 0.1.17 → 0.2.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 +45 -0
- data/Guardfile +9 -0
- data/README.md +15 -13
- data/lib/osm.rb +14 -0
- data/lib/osm/activity.rb +44 -13
- data/lib/osm/api.rb +48 -12
- data/lib/osm/api_access.rb +9 -6
- data/lib/osm/due_badges.rb +5 -4
- data/lib/osm/event.rb +87 -107
- data/lib/osm/flexi_record.rb +159 -118
- data/lib/osm/grouping.rb +41 -2
- data/lib/osm/{evening.rb → meeting.rb} +71 -64
- data/lib/osm/member.rb +88 -68
- data/lib/osm/model.rb +120 -30
- data/lib/osm/register.rb +23 -14
- data/lib/osm/section.rb +40 -100
- data/lib/osm/term.rb +35 -24
- data/osm.gemspec +2 -0
- data/spec/osm/activity_spec.rb +190 -173
- data/spec/osm/api_access_spec.rb +15 -7
- data/spec/osm/api_spec.rb +54 -27
- data/spec/osm/event_spec.rb +95 -84
- data/spec/osm/flexi_record_spec.rb +138 -35
- data/spec/osm/grouping_spec.rb +59 -1
- data/spec/osm/{evening_spec.rb → meeting_spec.rb} +53 -53
- data/spec/osm/member_spec.rb +151 -45
- data/spec/osm/model_spec.rb +28 -34
- data/spec/osm/register_spec.rb +1 -1
- data/spec/osm/section_spec.rb +49 -82
- data/spec/osm/term_spec.rb +23 -15
- data/spec/spec_helper.rb +25 -0
- data/version.rb +1 -1
- metadata +41 -18
data/spec/osm/api_access_spec.rb
CHANGED
@@ -38,14 +38,22 @@ describe "API Access" do
|
|
38
38
|
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/users.php?action=getAPIAccess§ionid=1", :body => body.to_json)
|
39
39
|
end
|
40
40
|
|
41
|
-
|
42
|
-
|
41
|
+
describe "Get All" do
|
42
|
+
it "From OSM" do
|
43
|
+
api_accesses = Osm::ApiAccess.get_all(@api, 1)
|
44
|
+
|
45
|
+
api_accesses.size.should == 2
|
46
|
+
api_access = api_accesses[0]
|
47
|
+
api_access.id.should == 1
|
48
|
+
api_access.name.should == 'API Name'
|
49
|
+
api_access.permissions.should == {:read => [:read], :readwrite => [:read, :write]}
|
50
|
+
end
|
43
51
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
52
|
+
it "From cache" do
|
53
|
+
api_accesses = Osm::ApiAccess.get_all(@api, 1)
|
54
|
+
HTTParty.should_not_receive(:post)
|
55
|
+
Osm::ApiAccess.get_all(@api, 1).should == api_accesses
|
56
|
+
end
|
49
57
|
end
|
50
58
|
|
51
59
|
it "Get One" do
|
data/spec/osm/api_spec.rb
CHANGED
@@ -2,30 +2,8 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
|
5
|
-
class DummyHttpResult
|
6
|
-
def initialize(options={})
|
7
|
-
@response = DummyHttpResponse.new(options[:response])
|
8
|
-
end
|
9
|
-
def response
|
10
|
-
@response
|
11
|
-
end
|
12
|
-
end
|
13
|
-
class DummyHttpResponse
|
14
|
-
def initialize(options={})
|
15
|
-
@options = options
|
16
|
-
end
|
17
|
-
def code
|
18
|
-
@options[:code]
|
19
|
-
end
|
20
|
-
def body
|
21
|
-
@options[:body]
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
|
26
5
|
describe "API" do
|
27
6
|
|
28
|
-
|
29
7
|
it "Create" do
|
30
8
|
@api.should_not be_nil
|
31
9
|
@api.api_id.should == @CONFIGURATION[:api][:osm][:id]
|
@@ -68,7 +46,7 @@ describe "API" do
|
|
68
46
|
'email' => user_email,
|
69
47
|
'password' => user_password,
|
70
48
|
}
|
71
|
-
HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"userid":"id","secret":"secret"}'}) }
|
49
|
+
HTTParty.should_receive(:post).with(url, {:body => post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"userid":"id","secret":"secret"}'}) }
|
72
50
|
|
73
51
|
Osm::Api.authorize(user_email, user_password).should == {:user_id => 'id', :secret => 'secret'}
|
74
52
|
end
|
@@ -81,15 +59,64 @@ describe "API" do
|
|
81
59
|
'token' => @CONFIGURATION[:api][:osm][:token],
|
82
60
|
'userid' => '1',
|
83
61
|
'secret' => '2',
|
84
|
-
}}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'[]'}) }
|
62
|
+
}}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'[]'}) }
|
85
63
|
@api.perform_query('test')
|
86
64
|
end
|
87
65
|
|
88
66
|
|
67
|
+
describe "User Permissions" do
|
68
|
+
|
69
|
+
it "Get from API" do
|
70
|
+
body = [
|
71
|
+
{"sectionid"=>"1", "permissions"=>{"a"=>20}},
|
72
|
+
{"sectionid"=>"2", "permissions"=>{"a"=>10}}
|
73
|
+
]
|
74
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/api.php?action=getUserRoles", :body => body.to_json)
|
75
|
+
|
76
|
+
permissions = {1 => {:a => [:read, :write]}, 2 => {:a => [:read]}}
|
77
|
+
OsmTest::Cache.should_not_receive('read')
|
78
|
+
@api.get_user_permissions.should == permissions
|
79
|
+
end
|
80
|
+
|
81
|
+
it "Get from cache" do
|
82
|
+
permissions = {1 => {:a => [:read, :write]}, 2 => {:a => [:read]}}
|
83
|
+
OsmTest::Cache.should_receive('exist?').with('OSMAPI-osm-permissions-user_id') { true }
|
84
|
+
OsmTest::Cache.should_receive('read').with('OSMAPI-osm-permissions-user_id') { permissions }
|
85
|
+
@api.get_user_permissions.should == permissions
|
86
|
+
end
|
87
|
+
|
88
|
+
it "Get ignoring cache" do
|
89
|
+
data = [
|
90
|
+
{"sectionid"=>"1", "permissions"=>{"a"=>10}},
|
91
|
+
]
|
92
|
+
body = {
|
93
|
+
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
94
|
+
'token' => @CONFIGURATION[:api][:osm][:token],
|
95
|
+
'userid' => 'user_id',
|
96
|
+
'secret' => 'secret',
|
97
|
+
}
|
98
|
+
url = 'https://www.onlinescoutmanager.co.uk/api.php?action=getUserRoles'
|
99
|
+
|
100
|
+
OsmTest::Cache.should_not_receive('exist?').with('OSMAPI-osm-permissions-user_id')
|
101
|
+
OsmTest::Cache.should_not_receive('read').with('OSMAPI-osm-permissions-user_id')
|
102
|
+
HTTParty.should_receive(:post).with(url, {:body=>body}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
103
|
+
@api.get_user_permissions(:no_cache => true).should == {1 => {:a => [:read]}}
|
104
|
+
end
|
105
|
+
|
106
|
+
it "Set" do
|
107
|
+
permissions = {1 => {:a => [:read, :write]}, 2 => {:a => [:read]}}
|
108
|
+
OsmTest::Cache.should_receive('exist?').with('OSMAPI-osm-permissions-user_id') { true }
|
109
|
+
OsmTest::Cache.should_receive('read').with('OSMAPI-osm-permissions-user_id') { permissions }
|
110
|
+
OsmTest::Cache.should_receive('write').with('OSMAPI-osm-permissions-user_id', permissions.merge(3 => {:a => [:read]}), {:expires_in=>600}) { true }
|
111
|
+
@api.set_user_permissions(3, {:a => [:read]})
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
|
89
116
|
|
90
117
|
describe "OSM and Internet error conditions:" do
|
91
118
|
it "Raises a connection error if the HTTP status code was not 'OK'" do
|
92
|
-
HTTParty.stub(:post) { DummyHttpResult.new(:response=>{:code=>'500'}) }
|
119
|
+
HTTParty.stub(:post) { OsmTest::DummyHttpResult.new(:response=>{:code=>'500'}) }
|
93
120
|
expect{ Osm::Api.authorize('email@example.com', 'password') }.to raise_error(Osm::ConnectionError, 'HTTP Status code was 500')
|
94
121
|
end
|
95
122
|
|
@@ -101,12 +128,12 @@ describe "API" do
|
|
101
128
|
|
102
129
|
|
103
130
|
it "Raises an error if OSM returns an error (as a hash)" do
|
104
|
-
HTTParty.stub(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"error":"Error message"}'}) }
|
131
|
+
HTTParty.stub(:post) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"error":"Error message"}'}) }
|
105
132
|
expect{ Osm::Api.authorize('email@example.com', 'password') }.to raise_error(Osm::Error, 'Error message')
|
106
133
|
end
|
107
134
|
|
108
135
|
it "Raises an error if OSM returns an error (as a plain string)" do
|
109
|
-
HTTParty.stub(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'Error message'}) }
|
136
|
+
HTTParty.stub(:post) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'Error message'}) }
|
110
137
|
expect{ Osm::Api.authorize('email@example.com', 'password') }.to raise_error(Osm::Error, 'Error message')
|
111
138
|
end
|
112
139
|
end
|
data/spec/osm/event_spec.rb
CHANGED
@@ -128,75 +128,84 @@ describe "Event" do
|
|
128
128
|
Osm::Model.stub(:get_user_permissions) { {:events => [:read, :write]} }
|
129
129
|
end
|
130
130
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
it "Fetch events for a section honoring archived option" do
|
158
|
-
body = {
|
159
|
-
'identifier' => 'eventid',
|
160
|
-
'label' => 'name',
|
161
|
-
'items' => [{
|
162
|
-
'eventid' => '1',
|
163
|
-
'name' => 'An Event',
|
164
|
-
'startdate' => '2001-02-03',
|
165
|
-
'enddate' => nil,
|
166
|
-
'starttime' => '00:00:00',
|
167
|
-
'endtime' => '00:00:00',
|
168
|
-
'cost' => '0.00',
|
169
|
-
'location' => '',
|
170
|
-
'notes' => '',
|
171
|
-
'sectionid' => 1,
|
172
|
-
'googlecalendar' => nil,
|
173
|
-
'archived' => '0'
|
174
|
-
},{
|
175
|
-
'eventid' => '2',
|
176
|
-
'name' => 'An Archived Event',
|
177
|
-
'startdate' => '2001-02-03',
|
178
|
-
'enddate' => nil,
|
179
|
-
'starttime' => '00:00:00',
|
180
|
-
'endtime' => '00:00:00',
|
181
|
-
'cost' => '0.00',
|
182
|
-
'location' => '',
|
183
|
-
'notes' => '',
|
184
|
-
'sectionid' => 1,
|
185
|
-
'googlecalendar' => nil,
|
186
|
-
'archived' => '1'
|
187
|
-
}]
|
188
|
-
}
|
189
|
-
|
190
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvents§ionid=1&showArchived=true", :body => body.to_json)
|
191
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvent§ionid=1&eventid=1", :body => {'config' => '[]', 'archived' => '0', 'eventid' => '1'}.to_json)
|
192
|
-
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvent§ionid=1&eventid=2", :body => {'config' => '[]', 'archived' => '1', 'eventid' => '2'}.to_json)
|
131
|
+
describe "Get events for section" do
|
132
|
+
it "From OSM" do
|
133
|
+
events = Osm::Event.get_for_section(@api, 1)
|
134
|
+
events.size.should == 1
|
135
|
+
event = events[0]
|
136
|
+
event.id.should == 2
|
137
|
+
event.section_id.should == 1
|
138
|
+
event.name.should == 'An Event'
|
139
|
+
event.start.should == Date.new(2001, 1, 2)
|
140
|
+
event.finish.should == DateTime.new(2001, 2, 5, 12, 0, 0)
|
141
|
+
event.cost.should == '0.00'
|
142
|
+
event.location.should == 'Somewhere'
|
143
|
+
event.notes.should == 'Notes'
|
144
|
+
event.archived.should be_false
|
145
|
+
event.notepad.should == 'notepad'
|
146
|
+
event.public_notepad.should == 'public notepad'
|
147
|
+
event.confirm_by_date.should == Date.new(2002, 1, 2)
|
148
|
+
event.allow_changes.should == true
|
149
|
+
event.reminders.should == false
|
150
|
+
event.attendance_limit.should == 3
|
151
|
+
event.attendance_limit_includes_leaders.should == true
|
152
|
+
event.columns[0].id.should == 'f_1'
|
153
|
+
event.columns[0].name.should == 'Name'
|
154
|
+
event.columns[0].label.should == 'Label'
|
155
|
+
event.valid?.should be_true
|
156
|
+
end
|
193
157
|
|
194
|
-
|
195
|
-
|
158
|
+
it "From cache" do
|
159
|
+
events = Osm::Event.get_for_section(@api, 1)
|
160
|
+
HTTParty.should_not_receive(:post)
|
161
|
+
Osm::Event.get_for_section(@api, 1).should == events
|
162
|
+
end
|
196
163
|
|
197
|
-
|
198
|
-
|
199
|
-
|
164
|
+
it "Honours archived option" do
|
165
|
+
body = {
|
166
|
+
'identifier' => 'eventid',
|
167
|
+
'label' => 'name',
|
168
|
+
'items' => [{
|
169
|
+
'eventid' => '1',
|
170
|
+
'name' => 'An Event',
|
171
|
+
'startdate' => '2001-02-03',
|
172
|
+
'enddate' => nil,
|
173
|
+
'starttime' => '00:00:00',
|
174
|
+
'endtime' => '00:00:00',
|
175
|
+
'cost' => '0.00',
|
176
|
+
'location' => '',
|
177
|
+
'notes' => '',
|
178
|
+
'sectionid' => 1,
|
179
|
+
'googlecalendar' => nil,
|
180
|
+
'archived' => '0'
|
181
|
+
},{
|
182
|
+
'eventid' => '2',
|
183
|
+
'name' => 'An Archived Event',
|
184
|
+
'startdate' => '2001-02-03',
|
185
|
+
'enddate' => nil,
|
186
|
+
'starttime' => '00:00:00',
|
187
|
+
'endtime' => '00:00:00',
|
188
|
+
'cost' => '0.00',
|
189
|
+
'location' => '',
|
190
|
+
'notes' => '',
|
191
|
+
'sectionid' => 1,
|
192
|
+
'googlecalendar' => nil,
|
193
|
+
'archived' => '1'
|
194
|
+
}]
|
195
|
+
}
|
196
|
+
|
197
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvents§ionid=1&showArchived=true", :body => body.to_json)
|
198
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvent§ionid=1&eventid=1", :body => {'config' => '[]', 'archived' => '0', 'eventid' => '1'}.to_json)
|
199
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/events.php?action=getEvent§ionid=1&eventid=2", :body => {'config' => '[]', 'archived' => '1', 'eventid' => '2'}.to_json)
|
200
|
+
|
201
|
+
events = Osm::Event.get_for_section(@api, 1)
|
202
|
+
OsmTest::Cache.clear
|
203
|
+
all_events = Osm::Event.get_for_section(@api, 1, {:include_archived => true})
|
204
|
+
|
205
|
+
events.size.should == 1
|
206
|
+
events[0].id == 1
|
207
|
+
all_events.size.should == 2
|
208
|
+
end
|
200
209
|
end
|
201
210
|
|
202
211
|
it "Get event" do
|
@@ -331,7 +340,7 @@ describe "Event" do
|
|
331
340
|
}
|
332
341
|
|
333
342
|
Osm::Event.stub(:get_for_section) { [] }
|
334
|
-
HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"id":2}'}) }
|
343
|
+
HTTParty.should_receive(:post).with(url, {:body => post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"id":2}'}) }
|
335
344
|
|
336
345
|
event = Osm::Event.create(@api, {
|
337
346
|
:section_id => 1,
|
@@ -356,7 +365,7 @@ describe "Event" do
|
|
356
365
|
|
357
366
|
it "Create (failed)" do
|
358
367
|
Osm::Event.stub(:get_for_section) { [] }
|
359
|
-
HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
|
368
|
+
HTTParty.should_receive(:post) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
|
360
369
|
|
361
370
|
event = Osm::Event.create(@api, {
|
362
371
|
:section_id => 1,
|
@@ -400,9 +409,9 @@ describe "Event" do
|
|
400
409
|
'limitincludesleaders' => true,
|
401
410
|
}
|
402
411
|
|
403
|
-
HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"id":2}'}) }
|
404
|
-
HTTParty.should_receive(:post).with('https://www.onlinescoutmanager.co.uk/events.php?action=saveNotepad§ionid=1', {:body=>{"eventid"=>2, "notepad"=>"notepad", "userid"=>"user_id", "secret"=>"secret", "apiid"=>"1", "token"=>"API TOKEN"}}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
|
405
|
-
HTTParty.should_receive(:post).with('https://www.onlinescoutmanager.co.uk/events.php?action=saveNotepad§ionid=1', {:body=>{"eventid"=>2, "pnnotepad"=>"public notepad", "userid"=>"user_id", "secret"=>"secret", "apiid"=>"1", "token"=>"API TOKEN"}}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
|
412
|
+
HTTParty.should_receive(:post).with(url, {:body => post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"id":2}'}) }
|
413
|
+
HTTParty.should_receive(:post).with('https://www.onlinescoutmanager.co.uk/events.php?action=saveNotepad§ionid=1', {:body=>{"eventid"=>2, "notepad"=>"notepad", "userid"=>"user_id", "secret"=>"secret", "apiid"=>"1", "token"=>"API TOKEN"}}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
|
414
|
+
HTTParty.should_receive(:post).with('https://www.onlinescoutmanager.co.uk/events.php?action=saveNotepad§ionid=1', {:body=>{"eventid"=>2, "pnnotepad"=>"public notepad", "userid"=>"user_id", "secret"=>"secret", "apiid"=>"1", "token"=>"API TOKEN"}}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
|
406
415
|
|
407
416
|
event = Osm::Event.new(
|
408
417
|
:section_id => 1,
|
@@ -416,16 +425,18 @@ describe "Event" do
|
|
416
425
|
:confirm_by_date => nil,
|
417
426
|
:allow_changes => true,
|
418
427
|
:reminders => true,
|
419
|
-
:notepad => '
|
420
|
-
:public_notepad => '
|
428
|
+
:notepad => '',
|
429
|
+
:public_notepad => '',
|
421
430
|
:attendance_limit => 3,
|
422
431
|
:attendance_limit_includes_leaders => true,
|
423
432
|
)
|
433
|
+
event.notepad = 'notepad'
|
434
|
+
event.public_notepad = 'public notepad'
|
424
435
|
event.update(@api).should be_true
|
425
436
|
end
|
426
437
|
|
427
438
|
it "Update (failed)" do
|
428
|
-
HTTParty.should_receive(:post).exactly(
|
439
|
+
HTTParty.should_receive(:post).exactly(1).times { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
|
429
440
|
|
430
441
|
event = Osm::Event.new(
|
431
442
|
:section_id => 1,
|
@@ -450,7 +461,7 @@ describe "Event" do
|
|
450
461
|
'secret' => 'secret',
|
451
462
|
}
|
452
463
|
|
453
|
-
HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"ok":true}'}) }
|
464
|
+
HTTParty.should_receive(:post).with(url, {:body => post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"ok":true}'}) }
|
454
465
|
|
455
466
|
event = Osm::Event.new(
|
456
467
|
:section_id => 1,
|
@@ -466,7 +477,7 @@ describe "Event" do
|
|
466
477
|
end
|
467
478
|
|
468
479
|
it "Delete (failed)" do
|
469
|
-
HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"ok":false}'}) }
|
480
|
+
HTTParty.should_receive(:post) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"ok":false}'}) }
|
470
481
|
|
471
482
|
event = Osm::Event.new(
|
472
483
|
:section_id => 1,
|
@@ -535,7 +546,7 @@ describe "Event" do
|
|
535
546
|
'userid' => 'user_id',
|
536
547
|
'secret' => 'secret',
|
537
548
|
}}
|
538
|
-
) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
|
549
|
+
) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{}'}) }
|
539
550
|
|
540
551
|
ea.update(@api, 'f_1').should be_true
|
541
552
|
end
|
@@ -555,7 +566,7 @@ describe "Event" do
|
|
555
566
|
'eventid' => '2',
|
556
567
|
'config' => '[{"id":"f_1","name":"Test name","pL":"Test label"}]'
|
557
568
|
}
|
558
|
-
HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>body.to_json}) }
|
569
|
+
HTTParty.should_receive(:post).with(url, {:body => post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>body.to_json}) }
|
559
570
|
|
560
571
|
event = Osm::Event.new(:id => 2, :section_id => 1)
|
561
572
|
event.should_not be_nil
|
@@ -567,7 +578,7 @@ describe "Event" do
|
|
567
578
|
end
|
568
579
|
|
569
580
|
it "Add column (failed)" do
|
570
|
-
HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"config":"[]"}'}) }
|
581
|
+
HTTParty.should_receive(:post) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"config":"[]"}'}) }
|
571
582
|
|
572
583
|
event = Osm::Event.new(:id => 2, :section_id => 1)
|
573
584
|
event.should_not be_nil
|
@@ -590,7 +601,7 @@ describe "Event" do
|
|
590
601
|
'eventid' => '2',
|
591
602
|
'config' => '[{"id":"f_1","name":"New name","pL":"New label"}]'
|
592
603
|
}
|
593
|
-
HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>body.to_json}) }
|
604
|
+
HTTParty.should_receive(:post).with(url, {:body => post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>body.to_json}) }
|
594
605
|
|
595
606
|
event = Osm::Event.new(:id => 2, :section_id => 1)
|
596
607
|
event.columns = [Osm::Event::Column.new(:id => 'f_1', :event => event)]
|
@@ -607,7 +618,7 @@ describe "Event" do
|
|
607
618
|
end
|
608
619
|
|
609
620
|
it "Update column (failed)" do
|
610
|
-
HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"config":"[]"}'}) }
|
621
|
+
HTTParty.should_receive(:post) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"config":"[]"}'}) }
|
611
622
|
|
612
623
|
event = Osm::Event.new(:id => 2, :section_id => 1)
|
613
624
|
column = Osm::Event::Column.new(:id => 'f_1', :event => event)
|
@@ -626,7 +637,7 @@ describe "Event" do
|
|
626
637
|
'columnId' => 'f_1'
|
627
638
|
}
|
628
639
|
|
629
|
-
HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"eventid":"2","config":"[]"}'}) }
|
640
|
+
HTTParty.should_receive(:post).with(url, {:body => post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"eventid":"2","config":"[]"}'}) }
|
630
641
|
|
631
642
|
event = Osm::Event.new(:id => 2, :section_id => 1)
|
632
643
|
column = Osm::Event::Column.new(:id => 'f_1', :event => event)
|
@@ -637,7 +648,7 @@ describe "Event" do
|
|
637
648
|
end
|
638
649
|
|
639
650
|
it "Delete column (failed)" do
|
640
|
-
HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"config":"[{\"id\":\"f_1\"}]"}'}) }
|
651
|
+
HTTParty.should_receive(:post) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"config":"[{\"id\":\"f_1\"}]"}'}) }
|
641
652
|
|
642
653
|
event = Osm::Event.new(:id => 2, :section_id => 1)
|
643
654
|
column = Osm::Event::Column.new(:id => 'f_1', :event => event)
|
@@ -5,11 +5,24 @@ require 'date'
|
|
5
5
|
|
6
6
|
describe "Flexi Record" do
|
7
7
|
|
8
|
-
it "Create
|
9
|
-
|
8
|
+
it "Create" do
|
9
|
+
fr = Osm::FlexiRecord.new(
|
10
|
+
:id => 1,
|
11
|
+
:section_id => 2,
|
12
|
+
:name => 'name'
|
13
|
+
)
|
14
|
+
fr.id.should == 1
|
15
|
+
fr.section_id.should == 2
|
16
|
+
fr.name.should == 'name'
|
17
|
+
fr.valid?.should be_true
|
18
|
+
end
|
19
|
+
|
20
|
+
it "Create FlexiRecord::Column" do
|
21
|
+
field = Osm::FlexiRecord::Column.new(
|
10
22
|
:id => "f_1",
|
11
23
|
:name => "Field Name",
|
12
|
-
:editable => true
|
24
|
+
:editable => true,
|
25
|
+
:flexi_record => Osm::FlexiRecord.new(),
|
13
26
|
)
|
14
27
|
|
15
28
|
field.id.should == 'f_1'
|
@@ -31,7 +44,8 @@ describe "Flexi Record" do
|
|
31
44
|
'age' => nil,
|
32
45
|
'f_1' => 'a',
|
33
46
|
'f_2' => 'b',
|
34
|
-
}
|
47
|
+
},
|
48
|
+
:flexi_record => Osm::FlexiRecord.new()
|
35
49
|
)
|
36
50
|
|
37
51
|
rd.member_id.should == 1
|
@@ -49,9 +63,22 @@ describe "Flexi Record" do
|
|
49
63
|
rd.valid?.should be_true
|
50
64
|
end
|
51
65
|
|
66
|
+
it "Sorts by name" do
|
67
|
+
fr1 = Osm::FlexiRecord.new(:id => 3, :name => 'A')
|
68
|
+
fr2 = Osm::FlexiRecord.new(:id => 2, :name => 'B')
|
69
|
+
fr3 = Osm::FlexiRecord.new(:id => 1, :name => 'C')
|
70
|
+
records = [fr2, fr1, fr3]
|
71
|
+
|
72
|
+
records.sort.should == [fr1, fr2, fr3]
|
73
|
+
end
|
74
|
+
|
52
75
|
|
53
76
|
describe "Using the API" do
|
54
77
|
|
78
|
+
before :each do
|
79
|
+
@flexi_record = Osm::FlexiRecord.new(:section_id => 1, :id => 2, :name => 'A Flexi Record')
|
80
|
+
end
|
81
|
+
|
55
82
|
it "Fetch Fields" do
|
56
83
|
data = {
|
57
84
|
"extraid" => "2",
|
@@ -76,7 +103,7 @@ describe "Flexi Record" do
|
|
76
103
|
}
|
77
104
|
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/extras.php?action=getExtra§ionid=1&extraid=2", :body => data.to_json)
|
78
105
|
|
79
|
-
fields =
|
106
|
+
fields = @flexi_record.get_columns(@api)
|
80
107
|
fields.is_a?(Array).should be_true
|
81
108
|
fields[0].valid?.should be_true
|
82
109
|
fields[0].id.should == 'firstname'
|
@@ -116,9 +143,9 @@ describe "Flexi Record" do
|
|
116
143
|
]}
|
117
144
|
]
|
118
145
|
}
|
119
|
-
HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
146
|
+
HTTParty.should_receive(:post).with(url, {:body => post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
120
147
|
|
121
|
-
|
148
|
+
@flexi_record.add_column(@api, 'name').should be_true
|
122
149
|
end
|
123
150
|
|
124
151
|
it "Add field (failure)" do
|
@@ -141,9 +168,9 @@ describe "Flexi Record" do
|
|
141
168
|
]}
|
142
169
|
]
|
143
170
|
}
|
144
|
-
HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
171
|
+
HTTParty.should_receive(:post) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
145
172
|
|
146
|
-
|
173
|
+
@flexi_record.add_column(@api, 'name').should be_false
|
147
174
|
end
|
148
175
|
|
149
176
|
it "Update field (success)" do
|
@@ -178,9 +205,15 @@ describe "Flexi Record" do
|
|
178
205
|
]}
|
179
206
|
]
|
180
207
|
}
|
181
|
-
HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
182
|
-
|
183
|
-
Osm::FlexiRecord.
|
208
|
+
HTTParty.should_receive(:post).with(url, {:body => post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
209
|
+
|
210
|
+
col = Osm::FlexiRecord::Column.new(
|
211
|
+
:flexi_record => @flexi_record,
|
212
|
+
:id => 'f_1',
|
213
|
+
:name => 'name',
|
214
|
+
:editable => true
|
215
|
+
)
|
216
|
+
col.update(@api).should be_true
|
184
217
|
end
|
185
218
|
|
186
219
|
it "Update field (failure)" do
|
@@ -203,11 +236,26 @@ describe "Flexi Record" do
|
|
203
236
|
]}
|
204
237
|
]
|
205
238
|
}
|
206
|
-
HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
207
|
-
|
208
|
-
Osm::FlexiRecord.
|
239
|
+
HTTParty.should_receive(:post) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
240
|
+
|
241
|
+
col = Osm::FlexiRecord::Column.new(
|
242
|
+
:flexi_record => @flexi_record,
|
243
|
+
:id => 'f_1',
|
244
|
+
:name => 'name',
|
245
|
+
:editable => true
|
246
|
+
)
|
247
|
+
col.update(@api).should be_false
|
209
248
|
end
|
210
249
|
|
250
|
+
it "Update field (uneditable)" do
|
251
|
+
col = Osm::FlexiRecord::Column.new(
|
252
|
+
:flexi_record => @flexi_record,
|
253
|
+
:id => 'f_1',
|
254
|
+
:name => 'name',
|
255
|
+
:editable => false
|
256
|
+
)
|
257
|
+
expect{ col.update(@api) }.to raise_error(Osm::Forbidden)
|
258
|
+
end
|
211
259
|
|
212
260
|
it "Delete field (success)" do
|
213
261
|
url = "https://www.onlinescoutmanager.co.uk/extras.php?action=deleteColumn§ionid=1&extraid=2"
|
@@ -238,9 +286,16 @@ describe "Flexi Record" do
|
|
238
286
|
{"rows" => []}
|
239
287
|
]
|
240
288
|
}
|
241
|
-
HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
242
289
|
|
243
|
-
|
290
|
+
HTTParty.should_receive(:post).with(url, {:body => post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
291
|
+
|
292
|
+
col = Osm::FlexiRecord::Column.new(
|
293
|
+
:flexi_record => @flexi_record,
|
294
|
+
:id => 'f_1',
|
295
|
+
:name => 'name',
|
296
|
+
:editable => true
|
297
|
+
)
|
298
|
+
col.delete(@api).should be_true
|
244
299
|
end
|
245
300
|
|
246
301
|
it "Delete field (failure)" do
|
@@ -263,11 +318,26 @@ describe "Flexi Record" do
|
|
263
318
|
]}
|
264
319
|
]
|
265
320
|
}
|
266
|
-
HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
267
|
-
|
268
|
-
Osm::FlexiRecord.
|
321
|
+
HTTParty.should_receive(:post) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
322
|
+
|
323
|
+
col = Osm::FlexiRecord::Column.new(
|
324
|
+
:flexi_record => @flexi_record,
|
325
|
+
:id => 'f_1',
|
326
|
+
:name => 'name',
|
327
|
+
:editable => true
|
328
|
+
)
|
329
|
+
col.delete(@api).should be_false
|
269
330
|
end
|
270
331
|
|
332
|
+
it "Delete field (uneditable)" do
|
333
|
+
col = Osm::FlexiRecord::Column.new(
|
334
|
+
:flexi_record => @flexi_record,
|
335
|
+
:id => 'f_1',
|
336
|
+
:name => 'name',
|
337
|
+
:editable => false
|
338
|
+
)
|
339
|
+
expect{ col.delete(@api) }.to raise_error(Osm::Forbidden)
|
340
|
+
end
|
271
341
|
|
272
342
|
it "Fetch Data" do
|
273
343
|
data = {
|
@@ -288,8 +358,9 @@ describe "Flexi Record" do
|
|
288
358
|
}]
|
289
359
|
}
|
290
360
|
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/extras.php?action=getExtraRecords§ionid=1&extraid=2&termid=3§ion=cubs", :body => data.to_json)
|
361
|
+
Osm::Section.stub(:get) { Osm::Section.new(:id => 1, :type => :cubs) }
|
291
362
|
|
292
|
-
records =
|
363
|
+
records = @flexi_record.get_data(@api, 3)
|
293
364
|
records.is_a?(Array).should be_true
|
294
365
|
records.size.should == 1
|
295
366
|
record = records[0]
|
@@ -317,36 +388,68 @@ describe "Flexi Record" do
|
|
317
388
|
'token' => @CONFIGURATION[:api][:osm][:token],
|
318
389
|
'userid' => 'user_id',
|
319
390
|
'secret' => 'secret',
|
320
|
-
'termid' =>
|
321
|
-
'scoutid' =>
|
391
|
+
'termid' => 3,
|
392
|
+
'scoutid' => 4,
|
322
393
|
'column' => 'f_1',
|
323
394
|
'value' => 'value',
|
324
|
-
'sectionid' =>
|
325
|
-
'extraid' =>
|
395
|
+
'sectionid' => 1,
|
396
|
+
'extraid' => 2,
|
326
397
|
}
|
327
398
|
|
328
399
|
data = {
|
329
400
|
'items' => [
|
330
|
-
{'f_1' => 'value', 'scoutid' => '
|
401
|
+
{'f_1' => 'value', 'scoutid' => '4'},
|
331
402
|
]
|
332
403
|
}
|
333
|
-
HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
334
|
-
Osm::Term.stub(:get_current_term_for_section) { Osm::Term.new(:id =>
|
335
|
-
|
336
|
-
Osm::FlexiRecord.
|
404
|
+
HTTParty.should_receive(:post).with(url, {:body => post_data}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
405
|
+
Osm::Term.stub(:get_current_term_for_section) { Osm::Term.new(:id => 3) }
|
406
|
+
|
407
|
+
fr = Osm::FlexiRecord.new(:section_id => 1, :id => 2)
|
408
|
+
fr.stub(:get_columns) { [Osm::FlexiRecord::Column.new(:id => 'f_1', :editable => true)] }
|
409
|
+
fr_data = Osm::FlexiRecord::Data.new(
|
410
|
+
:flexi_record => fr,
|
411
|
+
:member_id => 4,
|
412
|
+
:grouping_id => 5,
|
413
|
+
:fields => {'f_1' => 'value'}
|
414
|
+
)
|
415
|
+
fr_data.update(@api).should be_true
|
337
416
|
end
|
338
417
|
|
339
418
|
it "Update data (failed)" do
|
340
419
|
data = {
|
341
420
|
'items' => [
|
342
|
-
{'f_1' => 'old value', 'scoutid' => '
|
421
|
+
{'f_1' => 'old value', 'scoutid' => '4'},
|
343
422
|
]
|
344
423
|
}
|
345
424
|
|
346
|
-
HTTParty.stub(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
425
|
+
HTTParty.stub(:post) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
|
426
|
+
Osm::Term.stub(:get_current_term_for_section) { Osm::Term.new(:id => 1) }
|
427
|
+
|
428
|
+
fr = Osm::FlexiRecord.new(:section_id => 1, :id => 2)
|
429
|
+
fr.stub(:get_columns) { [Osm::FlexiRecord::Column.new(:id => 'f_1', :editable => true)] }
|
430
|
+
|
431
|
+
fr_data = Osm::FlexiRecord::Data.new(
|
432
|
+
:flexi_record => fr,
|
433
|
+
:member_id => 4,
|
434
|
+
:grouping_id => 5,
|
435
|
+
:fields => {'f_1' => 'value'}
|
436
|
+
)
|
437
|
+
fr_data.update(@api).should be_false
|
438
|
+
end
|
439
|
+
|
440
|
+
it "Update data (uneditable field)" do
|
347
441
|
Osm::Term.stub(:get_current_term_for_section) { Osm::Term.new(:id => 1) }
|
348
442
|
|
349
|
-
Osm::FlexiRecord.
|
443
|
+
fr = Osm::FlexiRecord.new(:section_id => 1, :id => 2)
|
444
|
+
fr.stub(:get_columns) { [Osm::FlexiRecord::Column.new(:id => 'f_1', :editable => false)] }
|
445
|
+
|
446
|
+
fr_data = Osm::FlexiRecord::Data.new(
|
447
|
+
:flexi_record => fr,
|
448
|
+
:member_id => 4,
|
449
|
+
:grouping_id => 5,
|
450
|
+
:fields => {'f_1' => 'value'}
|
451
|
+
)
|
452
|
+
fr_data.update(@api).should be_true
|
350
453
|
end
|
351
454
|
|
352
455
|
|
@@ -381,8 +484,9 @@ describe "Flexi Record" do
|
|
381
484
|
}]
|
382
485
|
}
|
383
486
|
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/extras.php?action=getExtraRecords§ionid=1&extraid=2&termid=3§ion=cubs", :body => data.to_json)
|
487
|
+
Osm::Section.stub(:get) { Osm::Section.new(:id => 1, :type => :cubs) }
|
384
488
|
|
385
|
-
records =
|
489
|
+
records = @flexi_record.get_data(@api, 3)
|
386
490
|
records.is_a?(Array).should be_true
|
387
491
|
records.size.should == 1
|
388
492
|
record = records[0]
|
@@ -392,7 +496,6 @@ describe "Flexi Record" do
|
|
392
496
|
record.fields['lastname'].should == 'Last'
|
393
497
|
end
|
394
498
|
|
395
|
-
|
396
499
|
end
|
397
500
|
|
398
501
|
end
|