osm 0.1.11 → 0.1.12

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/lib/osm/grouping.rb CHANGED
@@ -9,7 +9,7 @@ module Osm
9
9
  # @!attribute [rw] name
10
10
  # @return [String] the name of the grouping
11
11
  # @!attribute [rw] active
12
- # @return [Boolean] wether the grouping is active
12
+ # @return [Boolean] whether the grouping is active
13
13
  # @!attribute [rw] points
14
14
  # @return [Fixnum] the points awarded to the grouping
15
15
 
data/lib/osm/member.rb CHANGED
@@ -73,7 +73,7 @@ module Osm
73
73
  # @!attribute [rw] grouping_id
74
74
  # @return [Fixnum] the grouping within the section that the member belongs to
75
75
  # @!attribute [rw] grouping_leader
76
- # @return [Fixnum] wether the member is the grouping leader (0=no, 1=seconder/APL, 2=sixer/PL)
76
+ # @return [Fixnum] whether the member is the grouping leader (0=no, 1=seconder/APL, 2=sixer/PL)
77
77
  # @!attribute [rw] joined
78
78
  # @return [Date] when the member joined the section
79
79
  # @!attribute [rw] age
@@ -127,12 +127,12 @@ module Osm
127
127
  :custom1, :custom2, :custom3, :custom4, :custom5, :custom6, :custom7, :custom8, :custom9,
128
128
  :grouping_id, :grouping_leader, :joined, :age, :joined_years
129
129
 
130
- validates_numericality_of :id, :only_integer=>true, :greater_than=>0
130
+ validates_numericality_of :id, :only_integer=>true, :greater_than=>0, :unless => Proc.new { |r| r.id.nil? }
131
131
  validates_numericality_of :section_id, :only_integer=>true, :greater_than=>0
132
132
  validates_numericality_of :grouping_id, :only_integer=>true, :greater_than_or_equal_to=>-2
133
133
  validates_numericality_of :grouping_leader, :only_integer=>true, :greater_than_or_equal_to=>0, :less_than_or_equal_to=>2
134
- validates_numericality_of :joined_years, :only_integer=>true, :greater_than_or_equal_to=>-1
135
- validates_numericality_of :joining_in_years, :only_integer=>true, :greater_than_or_equal_to=>0
134
+ validates_numericality_of :joined_years, :only_integer=>true, :greater_than_or_equal_to=>-1, :allow_nil=>true
135
+ validates_numericality_of :joining_in_years, :only_integer=>true, :greater_than_or_equal_to=>0, :allow_nil=>true
136
136
  validates_presence_of :first_name
137
137
  validates_presence_of :last_name
138
138
  validates_presence_of :date_of_birth
@@ -199,7 +199,7 @@ module Osm
199
199
  :grouping_id => Osm::to_i_or_nil(item['patrolid']),
200
200
  :grouping_leader => Osm::to_i_or_nil(item['patrolleader']),
201
201
  :joined => Osm::parse_date(item['joined']),
202
- :age => item['age'],
202
+ :age => item['age'].gsub(' ', ''),
203
203
  :joined_years => item['yrs'].to_i,
204
204
  )
205
205
  end
@@ -210,10 +210,122 @@ module Osm
210
210
 
211
211
 
212
212
  # @!method initialize
213
- # Initialize a new Term
213
+ # Initialize a new Member
214
214
  # @param [Hash] attributes the hash of attributes (see attributes for descriptions, use Symbol of attribute name as the key)
215
215
 
216
216
 
217
+ # Create the user in OSM
218
+ # @param [Osm::Api] api The api to use to make the request
219
+ # @return [Boolan] whether the member was successfully added or not
220
+ def create(api)
221
+ raise ObjectIsInvalid, 'member is invalid' unless valid?
222
+ raise Error, 'the member already exists in OSM' unless id.nil?
223
+
224
+ data = api.perform_query("users.php?action=newMember", {
225
+ 'firstname' => first_name,
226
+ 'lastname' => last_name,
227
+ 'dob' => date_of_birth.strftime(Osm::OSM_DATE_FORMAT),
228
+ 'started' => started.strftime(Osm::OSM_DATE_FORMAT),
229
+ 'startedsection' => joined.strftime(Osm::OSM_DATE_FORMAT),
230
+ 'patrolid' => grouping_id,
231
+ 'patrolleader' => grouping_leader,
232
+ 'sectionid' => section_id,
233
+ 'email1' => email1,
234
+ 'email2' => email2,
235
+ 'email3' => email3,
236
+ 'email4' => email4,
237
+ 'phone1' => phone1,
238
+ 'phone2' => phone2,
239
+ 'phone3' => phone3,
240
+ 'phone4' => phone4,
241
+ 'address' => address,
242
+ 'address2' => address2,
243
+ 'parents' => parents,
244
+ 'notes' => notes,
245
+ 'medical' => medical,
246
+ 'religion' => religion,
247
+ 'school' => school,
248
+ 'ethnicity' => ethnicity,
249
+ 'subs' => subs,
250
+ 'custom1' => custom1,
251
+ 'custom2' => custom2,
252
+ 'custom3' => custom3,
253
+ 'custom4' => custom4,
254
+ 'custom5' => custom5,
255
+ 'custom6' => custom6,
256
+ 'custom7' => custom7,
257
+ 'custom8' => custom8,
258
+ 'custom9' => custom9,
259
+ })
260
+
261
+ if (data.is_a?(Hash) && (data['result'] == 'ok') && (data['scoutid'].to_i > 0))
262
+ self.id = data['scoutid'].to_i
263
+ # The cached members for the section will be out of date - remove them
264
+ Osm::Term.get_for_section(api, section_id).each do |term|
265
+ cache_delete(api, ['members', section_id, term.id])
266
+ end
267
+ return true
268
+ else
269
+ return false
270
+ end
271
+ end
272
+
273
+ # Update the user in OSM
274
+ # @param [Osm::Api] api The api to use to make the request
275
+ # @return [Boolan] whether the member was successfully updated or not
276
+ def update(api)
277
+ raise ObjectIsInvalid, 'member is invalid' unless valid?
278
+
279
+ values = {
280
+ 'firstname' => first_name,
281
+ 'lastname' => last_name,
282
+ 'dob' => date_of_birth.strftime(Osm::OSM_DATE_FORMAT),
283
+ 'started' => started.strftime(Osm::OSM_DATE_FORMAT),
284
+ 'startedsection' => joined.strftime(Osm::OSM_DATE_FORMAT),
285
+ 'patrolid' => grouping_id,
286
+ 'patrolleader' => grouping_leader,
287
+ 'email1' => email1,
288
+ 'email2' => email2,
289
+ 'email3' => email3,
290
+ 'email4' => email4,
291
+ 'phone1' => phone1,
292
+ 'phone2' => phone2,
293
+ 'phone3' => phone3,
294
+ 'phone4' => phone4,
295
+ 'address' => address,
296
+ 'address2' => address2,
297
+ 'parents' => parents,
298
+ 'notes' => notes,
299
+ 'medical' => medical,
300
+ 'religion' => religion,
301
+ 'school' => school,
302
+ 'ethnicity' => ethnicity,
303
+ 'subs' => subs,
304
+ 'custom1' => custom1,
305
+ 'custom2' => custom2,
306
+ 'custom3' => custom3,
307
+ 'custom4' => custom4,
308
+ 'custom5' => custom5,
309
+ 'custom6' => custom6,
310
+ 'custom7' => custom7,
311
+ 'custom8' => custom8,
312
+ 'custom9' => custom9,
313
+ }
314
+
315
+ result = true
316
+ values.each do |column, value|
317
+ data = api.perform_query("users.php?action=updateMember&dateFormat=generic", {
318
+ 'scoutid' => self.id,
319
+ 'column' => column,
320
+ 'value' => value,
321
+ 'sectionid' => section_id,
322
+ })
323
+ result &= (data[column] == value.to_s)
324
+ end
325
+
326
+ return result
327
+ end
328
+
217
329
  # Get the years element of this scout's age
218
330
  # @return [Fixnum] the number of years this scout has been alive
219
331
  def age_years
data/lib/osm/register.rb CHANGED
@@ -80,7 +80,7 @@ module Osm
80
80
  # @option data [String] :attendance what to mark the attendance as, one of "Yes", "No" or "Absent"
81
81
  # @option data [Fixnum, Array<Fixnum>, Osm::Member, Array<Osm::Member>] :members the members (or their ids) to update
82
82
  # @option data [Array<Hash>] :completed_badge_requirements (optional) the badge requirements to mark as completed, selected from the Hash returned by the get_badge_requirements_for_evening method
83
- # @return [Boolean] wether the update succedded
83
+ # @return [Boolean] whether the update succedded
84
84
  def self.update_attendance(data={})
85
85
  raise ArgumentIsInvalid, ':attendance is invalid' unless ['Yes', 'No', 'Absent'].include?(data[:attendance])
86
86
  raise ArgumentIsInvalid, ':section is missing' if data[:section].nil?
data/lib/osm/section.rb CHANGED
@@ -45,8 +45,8 @@ module Osm
45
45
  # @return [Boolean] whether the section uses the Payments part of My.SCOUT
46
46
  # @!attribute [rw] myscout_emails
47
47
  # @return [Hash of Symbol to Boolean] which email addresses are linked to MyScout for each Member
48
- # @!attribute [rw] myscout_email_address_send
49
- # @return [String] which email address to send My.SCOUT emails as
48
+ # @!attribute [rw] myscout_email_address_from
49
+ # @return [String] which email address to send My.SCOUT emails as coming from
50
50
  # @!attribute [rw] myscout_email_address_copy
51
51
  # @return [String] which email address to send copys of My.SCOUT emails to
52
52
  # @!attribute [rw] myscout_badges_partial
@@ -82,9 +82,9 @@ module Osm
82
82
  attribute :myscout_badges, :type => Boolean
83
83
  attribute :myscout_programme, :type => Boolean
84
84
  attribute :myscout_payments, :type => Boolean
85
- attribute :myscout_emails, :default => {}# (Hash of Symbol to Boolean)
86
- attribute :myscout_email_address_send, :type => String#, blank OK)
87
- attribute :myscout_email_address_copy, :type => String#, blank OK)
85
+ attribute :myscout_emails, :default => {}
86
+ attribute :myscout_email_address_from, :type => String, :default => ''
87
+ attribute :myscout_email_address_copy, :type => String, :default => ''
88
88
  attribute :myscout_badges_partial, :type => Boolean
89
89
  attribute :myscout_programme_summary, :type => Boolean
90
90
  attribute :myscout_event_reminder_count, :type => Integer
@@ -97,7 +97,7 @@ module Osm
97
97
  :gocardless, :myscout_events_expires, :myscout_badges_expires,
98
98
  :myscout_programme_expires, :myscout_events, :myscout_badges,
99
99
  :myscout_programme, :myscout_payments, :myscout_emails,
100
- :myscout_email_address_send, :myscout_email_address_copy,
100
+ :myscout_email_address_from, :myscout_email_address_copy,
101
101
  :myscout_badges_partial, :myscout_programme_summary,
102
102
  :myscout_event_reminder_count, :myscout_event_reminder_frequency,
103
103
  :myscout_payment_reminder_count, :myscout_payment_reminder_frequency
@@ -205,8 +205,8 @@ module Osm
205
205
  :myscout_programme => myscout_data['programme'] == 1,
206
206
  :myscout_payments => myscout_data['payments'] == 1,
207
207
  :myscout_emails => (myscout_data['emails'] || {}).inject({}) { |n,(k,v)| n[k.to_sym] = v.eql?('true'); n},
208
- :myscout_email_address_send => myscout_data['emailAddress'],
209
- :myscout_email_address_copy => myscout_data['emailAddressCopy'],
208
+ :myscout_email_address_from => myscout_data['emailAddress'] ? myscout_data['emailAddress'] : '',
209
+ :myscout_email_address_copy => myscout_data['emailAddressCopy'] ? myscout_data['emailAddressCopy'] : '',
210
210
  :myscout_badges_partial => myscout_data['badgesPartial'] == 1,
211
211
  :myscout_programme_summary => myscout_data['programmeSummary'] == 1,
212
212
  :myscout_event_reminder_count => myscout_data['eventRemindCount'].to_i,
data/osm.gemspec CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
7
7
  s.version = Osm::VERSION
8
8
  s.authors = ['Robert Gauld']
9
9
  s.email = ['robert@robertgauld.co.uk']
10
- s.homepage = ''
10
+ s.homepage = 'https://github.com/robertgauld/osm'
11
11
  s.summary = %q{Use the Online Scout Manager API}
12
12
  s.description = %q{Use the Online Scout Manager API (https://www.onlinescoutmanager.co.uk) to retrieve and save data.}
13
13
 
@@ -93,4 +93,29 @@ describe "Using The API" do
93
93
  activity.valid?.should be_true
94
94
  end
95
95
 
96
+
97
+ it "Add activity to programme (succeded)" do
98
+ url = 'https://www.onlinescoutmanager.co.uk/programme.php?action=addActivityToProgramme'
99
+ post_data = {
100
+ 'apiid' => @CONFIGURATION[:api][:osm][:id],
101
+ 'token' => @CONFIGURATION[:api][:osm][:token],
102
+ 'userid' => 'user_id',
103
+ 'secret' => 'secret',
104
+ 'meetingdate' => '2000-01-02',
105
+ 'sectionid' => 1,
106
+ 'activityid' => 2,
107
+ 'notes' => 'Notes',
108
+ }
109
+
110
+ HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"result":0}'}) }
111
+ activity = Osm::Activity.new(:id => 2)
112
+ activity.add_to_programme(@api, 1, Date.new(2000, 1, 2), 'Notes').should be_true
113
+ end
114
+
115
+ it "Add activity to programme (failed)" do
116
+ HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"result":1}'}) }
117
+ activity = Osm::Activity.new(:id => 2)
118
+ activity.add_to_programme(@api, 1, Date.new(2000, 1, 2), 'Notes').should be_false
119
+ end
120
+
96
121
  end
@@ -88,14 +88,37 @@ describe "Evening" do
88
88
  'meetingdate' => '2000-01-02',
89
89
  'sectionid' => 1,
90
90
  'activityid' => -1,
91
+ 'start' => '2000-01-02',
92
+ 'starttime' => '11:11',
93
+ 'endtime' => '22:22',
94
+ 'title' => 'Title',
91
95
  }
92
96
 
93
97
  Osm::Term.stub(:get_for_section) { [] }
94
98
  HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"result":0}'}) }
95
- Osm::Evening.create(@api, 1, Date.new(2000, 1, 2)).should be_true
99
+ Osm::Evening.create(@api, {
100
+ :section_id => 1,
101
+ :meeting_date => Date.new(2000, 1, 2),
102
+ :start_time => '11:11',
103
+ :finish_time => '22:22',
104
+ :title => 'Title',
105
+ }).should be_true
96
106
  end
97
107
 
98
108
  it "Create an evening (failed)" do
109
+ Osm::Term.stub(:get_for_section) { [] }
110
+ HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'[]'}) }
111
+ Osm::Evening.create(@api, {
112
+ :section_id => 1,
113
+ :meeting_date => Date.new(2000, 1, 2),
114
+ :start_time => '11:11',
115
+ :finish_time => '22:22',
116
+ :title => 'Title',
117
+ }).should be_false
118
+ end
119
+
120
+
121
+ it "Add activity to evening (succeded)" do
99
122
  url = 'https://www.onlinescoutmanager.co.uk/programme.php?action=addActivityToProgramme'
100
123
  post_data = {
101
124
  'apiid' => @CONFIGURATION[:api][:osm][:id],
@@ -104,12 +127,23 @@ describe "Evening" do
104
127
  'secret' => 'secret',
105
128
  'meetingdate' => '2000-01-02',
106
129
  'sectionid' => 1,
107
- 'activityid' => -1,
130
+ 'activityid' => 2,
131
+ 'notes' => 'Notes',
108
132
  }
109
133
 
110
134
  Osm::Term.stub(:get_for_section) { [] }
111
- HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"result":1}'}) }
112
- Osm::Evening.create(@api, 1, Date.new(2000, 1, 2)).should be_false
135
+ HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"result":0}'}) }
136
+ activity = Osm::Activity.new(:id => 2, :title => 'Title')
137
+ evening = Osm::Evening.new(:section_id => 1, :meeting_date => Date.new(2000, 1, 2))
138
+ evening.add_activity(@api, activity, 'Notes').should be_true
139
+ evening.activities[0].activity_id.should == 2
140
+ end
141
+
142
+ it "Add activity to evening (failed)" do
143
+ HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"result":1}'}) }
144
+ activity = Osm::Activity.new(:id => 2, :title => 'Title')
145
+ evening = Osm::Evening.new(:section_id => 1, :meeting_date => Date.new(2000, 1, 2))
146
+ evening.add_activity(@api, activity, 'Notes').should be_false
113
147
  end
114
148
 
115
149
 
@@ -154,5 +188,21 @@ describe "Evening" do
154
188
  expect{ evening.update(@api) }.to raise_error(Osm::ObjectIsInvalid)
155
189
  end
156
190
 
191
+
192
+ it "Delete an evening" do
193
+ url = 'https://www.onlinescoutmanager.co.uk/programme.php?action=deleteEvening&eveningid=1&sectionid=2'
194
+ post_data = {
195
+ 'apiid' => @CONFIGURATION[:api][:osm][:id],
196
+ 'token' => @CONFIGURATION[:api][:osm][:token],
197
+ 'userid' => 'user_id',
198
+ 'secret' => 'secret',
199
+ }
200
+ Osm::Term.stub(:get_for_section) { [] }
201
+ HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>''}) }
202
+
203
+ evening = Osm::Evening.new(:id=>1, :section_id=>2)
204
+ evening.delete(@api).should be_true
205
+ end
206
+
157
207
  end
158
208
  end
@@ -134,7 +134,7 @@ describe "Event" do
134
134
  event.reminders.should == false
135
135
  event.columns[0].id.should == 'f_1'
136
136
  event.columns[0].name.should == 'Name'
137
- event.columns[0].parent_label.should == 'Label'
137
+ event.columns[0].label.should == 'Label'
138
138
  event.valid?.should be_true
139
139
  end
140
140
 
@@ -434,7 +434,10 @@ describe "Event" do
434
434
  event = Osm::Event.new(:id => 2, :section_id => 1)
435
435
  event.should_not be_nil
436
436
  event.add_column(@api, 'Test name', 'Test label').should be_true
437
- event.columns.should == [Osm::Event::Column.new(:id=>'f_1', :name=>'Test name', :parent_label=>'Test label')]
437
+ column = event.columns[0]
438
+ column.id.should == 'f_1'
439
+ column.name.should == 'Test name'
440
+ column.label.should == 'Test label'
438
441
  end
439
442
 
440
443
  it "Add column (failed)" do
@@ -445,6 +448,77 @@ describe "Event" do
445
448
  event.add_column(@api, 'Test name', 'Test label').should be_false
446
449
  end
447
450
 
451
+
452
+ it "Update column (succeded)" do
453
+ url = 'https://www.onlinescoutmanager.co.uk/events.php?action=renameColumn&sectionid=1&eventid=2'
454
+ post_data = {
455
+ 'apiid' => @CONFIGURATION[:api][:osm][:id],
456
+ 'token' => @CONFIGURATION[:api][:osm][:token],
457
+ 'userid' => 'user_id',
458
+ 'secret' => 'secret',
459
+ 'columnId' => 'f_1',
460
+ 'columnName' => 'New name',
461
+ 'pL' => 'New label',
462
+ }
463
+ body = {
464
+ 'eventid' => '2',
465
+ 'config' => '[{"id":"f_1","name":"New name","pL":"New label"}]'
466
+ }
467
+ HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>body.to_json}) }
468
+
469
+ event = Osm::Event.new(:id => 2, :section_id => 1)
470
+ event.columns = [Osm::Event::Column.new(:id => 'f_1', :event => event)]
471
+ column = event.columns[0]
472
+ column.name = 'New name'
473
+ column.label = 'New label'
474
+
475
+ column.update(@api).should be_true
476
+
477
+ column.name.should == 'New name'
478
+ column.label.should == 'New label'
479
+ event.columns[0].name.should == 'New name'
480
+ event.columns[0].label.should == 'New label'
481
+ end
482
+
483
+ it "Update column (failed)" do
484
+ HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"config":"[]"}'}) }
485
+
486
+ event = Osm::Event.new(:id => 2, :section_id => 1)
487
+ column = Osm::Event::Column.new(:id => 'f_1', :event => event)
488
+ event.columns = [column]
489
+ column.update(@api).should be_false
490
+ end
491
+
492
+
493
+ it "Delete column (succeded)" do
494
+ url = 'https://www.onlinescoutmanager.co.uk/events.php?action=deleteColumn&sectionid=1&eventid=2'
495
+ post_data = {
496
+ 'apiid' => @CONFIGURATION[:api][:osm][:id],
497
+ 'token' => @CONFIGURATION[:api][:osm][:token],
498
+ 'userid' => 'user_id',
499
+ 'secret' => 'secret',
500
+ 'columnId' => 'f_1'
501
+ }
502
+
503
+ HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"eventid":"2","config":"[]"}'}) }
504
+
505
+ event = Osm::Event.new(:id => 2, :section_id => 1)
506
+ column = Osm::Event::Column.new(:id => 'f_1', :event => event)
507
+ event.columns = [column]
508
+
509
+ column.delete(@api).should be_true
510
+ event.columns.should == []
511
+ end
512
+
513
+ it "Delete column (failed)" do
514
+ HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>'{"config":"[{\"id\":\"f_1\"}]"}'}) }
515
+
516
+ event = Osm::Event.new(:id => 2, :section_id => 1)
517
+ column = Osm::Event::Column.new(:id => 'f_1', :event => event)
518
+ event.columns = [column]
519
+ column.delete(@api).should be_false
520
+ end
521
+
448
522
  end
449
523
 
450
524
 
@@ -85,6 +85,190 @@ describe "Flexi Record" do
85
85
  fields[3].id.should == 'f_2'
86
86
  end
87
87
 
88
+ it "Add field (success)" do
89
+ url = "https://www.onlinescoutmanager.co.uk/extras.php?action=addColumn&sectionid=1&extraid=2"
90
+
91
+ post_data = {
92
+ 'apiid' => @CONFIGURATION[:api][:osm][:id],
93
+ 'token' => @CONFIGURATION[:api][:osm][:token],
94
+ 'userid' => 'user_id',
95
+ 'secret' => 'secret',
96
+ 'columnName' => 'name',
97
+ }
98
+
99
+ data = {
100
+ "extraid" => "2",
101
+ "sectionid" => "1",
102
+ "name" => "A Flexi Record",
103
+ "config" => "[{\"id\":\"f_1\",\"name\":\"name\",\"width\":\"150\"}]",
104
+ "total" => "none",
105
+ "extrafields" => "[]",
106
+ "structure" => [
107
+ {
108
+ "rows" => [
109
+ {"name" => "First name","field" => "firstname","width" => "150px"},
110
+ {"name" => "Last name","field" => "lastname","width" => "150px"},
111
+ ],
112
+ "noscroll" => true
113
+ },
114
+ {"rows" => [
115
+ {"name" => "name","field" => "f_1","width" => "150px","editable" => true},
116
+ ]}
117
+ ]
118
+ }
119
+ HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
120
+
121
+ Osm::FlexiRecord.add_field(@api, 1, 2, 'name').should be_true
122
+ end
123
+
124
+ it "Add field (failure)" do
125
+ data = {
126
+ "extraid" => "2",
127
+ "sectionid" => "1",
128
+ "name" => "A Flexi Record",
129
+ "config" => "[]",
130
+ "total" => "none",
131
+ "extrafields" => "[]",
132
+ "structure" => [
133
+ {
134
+ "rows" => [
135
+ {"name" => "First name","field" => "firstname","width" => "150px"},
136
+ {"name" => "Last name","field" => "lastname","width" => "150px"},
137
+ ],
138
+ "noscroll" => true
139
+ },
140
+ {"rows" => [
141
+ ]}
142
+ ]
143
+ }
144
+ HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
145
+
146
+ Osm::FlexiRecord.add_field(@api, 1, 2, 'name').should be_false
147
+ end
148
+
149
+ it "Update field (success)" do
150
+ url = "https://www.onlinescoutmanager.co.uk/extras.php?action=renameColumn&sectionid=1&extraid=2"
151
+
152
+ post_data = {
153
+ 'apiid' => @CONFIGURATION[:api][:osm][:id],
154
+ 'token' => @CONFIGURATION[:api][:osm][:token],
155
+ 'userid' => 'user_id',
156
+ 'secret' => 'secret',
157
+ 'columnId' => 'f_1',
158
+ 'columnName' => 'name',
159
+ }
160
+
161
+ data = {
162
+ "extraid" => "2",
163
+ "sectionid" => "1",
164
+ "name" => "A Flexi Record",
165
+ "config" => "[{\"id\":\"f_1\",\"name\":\"name\",\"width\":\"150\"}]",
166
+ "total" => "none",
167
+ "extrafields" => "[]",
168
+ "structure" => [
169
+ {
170
+ "rows" => [
171
+ {"name" => "First name","field" => "firstname","width" => "150px"},
172
+ {"name" => "Last name","field" => "lastname","width" => "150px"},
173
+ ],
174
+ "noscroll" => true
175
+ },
176
+ {"rows" => [
177
+ {"name" => "name","field" => "f_1","width" => "150px","editable" => true},
178
+ ]}
179
+ ]
180
+ }
181
+ HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
182
+
183
+ Osm::FlexiRecord.update_field(@api, 1, 2, 'f_1', 'name').should be_true
184
+ end
185
+
186
+ it "Update field (failure)" do
187
+ data = {
188
+ "extraid" => "2",
189
+ "sectionid" => "1",
190
+ "name" => "A Flexi Record",
191
+ "config" => "[]",
192
+ "total" => "none",
193
+ "extrafields" => "[]",
194
+ "structure" => [
195
+ {
196
+ "rows" => [
197
+ {"name" => "First name","field" => "firstname","width" => "150px"},
198
+ {"name" => "Last name","field" => "lastname","width" => "150px"},
199
+ ],
200
+ "noscroll" => true
201
+ },
202
+ {"rows" => [
203
+ ]}
204
+ ]
205
+ }
206
+ HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
207
+
208
+ Osm::FlexiRecord.update_field(@api, 1, 2, 'f_1', 'name').should be_false
209
+ end
210
+
211
+
212
+ it "Delete field (success)" do
213
+ url = "https://www.onlinescoutmanager.co.uk/extras.php?action=deleteColumn&sectionid=1&extraid=2"
214
+
215
+ post_data = {
216
+ 'apiid' => @CONFIGURATION[:api][:osm][:id],
217
+ 'token' => @CONFIGURATION[:api][:osm][:token],
218
+ 'userid' => 'user_id',
219
+ 'secret' => 'secret',
220
+ 'columnId' => 'f_1',
221
+ }
222
+
223
+ data = {
224
+ "extraid" => "2",
225
+ "sectionid" => "1",
226
+ "name" => "A Flexi Record",
227
+ "config" => "[]",
228
+ "total" => "none",
229
+ "extrafields" => "[]",
230
+ "structure" => [
231
+ {
232
+ "rows" => [
233
+ {"name" => "First name","field" => "firstname","width" => "150px"},
234
+ {"name" => "Last name","field" => "lastname","width" => "150px"},
235
+ ],
236
+ "noscroll" => true
237
+ },
238
+ {"rows" => []}
239
+ ]
240
+ }
241
+ HTTParty.should_receive(:post).with(url, {:body => post_data}) { DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
242
+
243
+ Osm::FlexiRecord.delete_field(@api, 1, 2, 'f_1').should be_true
244
+ end
245
+
246
+ it "Delete field (failure)" do
247
+ data = {
248
+ "extraid" => "2",
249
+ "sectionid" => "1",
250
+ "name" => "A Flexi Record",
251
+ "config" => "[{\"id\":\"f_1\",\"name\":\"name\",\"width\":\"150\"}]",
252
+ "total" => "none",
253
+ "extrafields" => "[]",
254
+ "structure" => [
255
+ {
256
+ "rows" => [
257
+ {"name" => "First name","field" => "firstname","width" => "150px"},
258
+ {"name" => "Last name","field" => "lastname","width" => "150px"},
259
+ ],
260
+ "noscroll" => true
261
+ },
262
+ {"rows" => [
263
+ ]}
264
+ ]
265
+ }
266
+ HTTParty.should_receive(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
267
+
268
+ Osm::FlexiRecord.delete_field(@api, 1, 2, 'f_1').should be_false
269
+ end
270
+
271
+
88
272
  it "Fetch Data" do
89
273
  data = {
90
274
  'identifier' => 'scoutid',
@@ -125,6 +309,47 @@ describe "Flexi Record" do
125
309
  end
126
310
 
127
311
 
312
+ it "Update data (success)" do
313
+ url = "https://www.onlinescoutmanager.co.uk/extras.php?action=updateScout"
314
+
315
+ post_data = {
316
+ 'apiid' => @CONFIGURATION[:api][:osm][:id],
317
+ 'token' => @CONFIGURATION[:api][:osm][:token],
318
+ 'userid' => 'user_id',
319
+ 'secret' => 'secret',
320
+ 'termid' => 1,
321
+ 'scoutid' => 2,
322
+ 'column' => 'f_1',
323
+ 'value' => 'value',
324
+ 'sectionid' => 3,
325
+ 'extraid' => 4,
326
+ }
327
+
328
+ data = {
329
+ 'items' => [
330
+ {'f_1' => 'value', 'scoutid' => '2'},
331
+ ]
332
+ }
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 => 1) }
335
+
336
+ Osm::FlexiRecord.update_data(@api, 3, 4, 2, 'f_1', 'value').should be_true
337
+ end
338
+
339
+ it "Update data (failed)" do
340
+ data = {
341
+ 'items' => [
342
+ {'f_1' => 'old value', 'scoutid' => '2'},
343
+ ]
344
+ }
345
+
346
+ HTTParty.stub(:post) { DummyHttpResult.new(:response=>{:code=>'200', :body=>data.to_json}) }
347
+ Osm::Term.stub(:get_current_term_for_section) { Osm::Term.new(:id => 1) }
348
+
349
+ Osm::FlexiRecord.update_data(@api, 3, 4, 2, 'f_1', 'value').should be_false
350
+ end
351
+
352
+
128
353
  it "Handles the total row" do
129
354
  data = {
130
355
  'identifier' => 'scoutid',