osm 0.1.11 → 0.1.12

Sign up to get free protection for your applications and to get access to all the features.
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',