osm 1.0.6 → 1.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 +30 -0
- data/README.md +17 -4
- data/lib/osm.rb +4 -1
- data/lib/osm/budget.rb +136 -0
- data/lib/osm/event.rb +12 -5
- data/lib/osm/giftaid.rb +292 -0
- data/lib/osm/invoice.rb +425 -0
- data/lib/osm/member.rb +24 -8
- data/lib/osm/model.rb +4 -2
- data/lib/osm/register.rb +9 -11
- data/lib/osm/section.rb +36 -19
- data/lib/osm/sms.rb +6 -5
- data/lib/osm/term.rb +2 -2
- data/spec/osm/budget_spec.rb +205 -0
- data/spec/osm/event_spec.rb +12 -0
- data/spec/osm/giftaid_spec.rb +224 -0
- data/spec/osm/invoice_spec.rb +699 -0
- data/spec/osm/member_spec.rb +21 -1
- data/spec/osm/section_spec.rb +16 -1
- data/spec/osm/sms_spec.rb +90 -3
- data/spec/osm/term_spec.rb +1 -1
- data/version.rb +1 -1
- metadata +8 -2
data/lib/osm/model.rb
CHANGED
@@ -159,7 +159,7 @@ module Osm
|
|
159
159
|
|
160
160
|
# Raise an exception if the user does not have the relevant permission
|
161
161
|
# @param [Osm::Api] api The api to use to make the request
|
162
|
-
# @param [Symbol] level The OSM subscription level required (
|
162
|
+
# @param [Symbol] level The OSM subscription level required (:bronze, :silver, :gold, :gold_plus)
|
163
163
|
# @param [Osm::Section, Fixnum, #to_i] section The Section (or its ID) the subscription is required on
|
164
164
|
# @!macro options_get
|
165
165
|
# @raise [Osm::Forbidden] If the Section does not have the required OSM Subscription (or higher)
|
@@ -173,12 +173,14 @@ module Osm
|
|
173
173
|
level = 2
|
174
174
|
when :gold
|
175
175
|
level = 3
|
176
|
+
when :gold_plus
|
177
|
+
level = 4
|
176
178
|
else
|
177
179
|
level = 0
|
178
180
|
end
|
179
181
|
end
|
180
182
|
if section.nil? || section.subscription_level < level
|
181
|
-
level_name = [
|
183
|
+
level_name = Osm::SUBSCRIPTION_LEVEL_NAMES[level] || level
|
182
184
|
raise Osm::Forbidden, "Insufficent OSM subscription level (#{level_name} required for #{section.name})"
|
183
185
|
end
|
184
186
|
end
|
data/lib/osm/register.rb
CHANGED
@@ -22,15 +22,14 @@ module Osm
|
|
22
22
|
|
23
23
|
structure = []
|
24
24
|
if data.is_a?(Array)
|
25
|
-
data.
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
25
|
+
data = (data.size == 2) ? data[1] : []
|
26
|
+
if data.is_a?(Hash) && data['rows'].is_a?(Array)
|
27
|
+
data['rows'].each do |row|
|
28
|
+
structure.push Field.new(
|
29
|
+
:id => row['field'],
|
30
|
+
:name => row['name'],
|
31
|
+
:tooltip => row['tooltip'],
|
32
|
+
)
|
34
33
|
end
|
35
34
|
end
|
36
35
|
end
|
@@ -57,7 +56,7 @@ module Osm
|
|
57
56
|
|
58
57
|
data = api.perform_query("users.php?action=register§ionid=#{section_id}&termid=#{term_id}")
|
59
58
|
dates_s = get_structure(api, section, term, options)
|
60
|
-
dates_s = dates_s.map{ |f| f.id }
|
59
|
+
dates_s = dates_s.map{ |f| f.id }
|
61
60
|
dates_d = dates_s.map{ |d| Osm::parse_date(d) }
|
62
61
|
|
63
62
|
to_return = []
|
@@ -73,7 +72,6 @@ module Osm
|
|
73
72
|
attendance[date] = :yes if item_attendance.eql?('Yes')
|
74
73
|
attendance[date] = :advised_absent if item_attendance.eql?('No')
|
75
74
|
end
|
76
|
-
item.select{}
|
77
75
|
to_return.push Osm::Register::Attendance.new(
|
78
76
|
:member_id => Osm::to_i_or_nil(item['scoutid']),
|
79
77
|
:grouping_id => Osm::to_i_or_nil(item ['patrolid']),
|
data/lib/osm/section.rb
CHANGED
@@ -10,7 +10,7 @@ module Osm
|
|
10
10
|
# @!attribute [rw] group_name
|
11
11
|
# @return [String] the group name
|
12
12
|
# @!attribute [rw] subscription_level
|
13
|
-
# @return [Fixnum] what subscription the section has to OSM (1-bronze, 2-silver, 3-gold)
|
13
|
+
# @return [Fixnum] what subscription the section has to OSM (1-bronze, 2-silver, 3-gold, 4-gold+)
|
14
14
|
# @!attribute [rw] subscription_expires
|
15
15
|
# @return [Date] when the section's subscription to OSM expires
|
16
16
|
# @!attribute [rw] type
|
@@ -33,14 +33,18 @@ module Osm
|
|
33
33
|
# @return [Date] when the subscription to Badges in My.SCOUT expires
|
34
34
|
# @!attribute [rw] myscout_programme_expires
|
35
35
|
# @return [Date] when the subscription to Badges in My.SCOUT expires
|
36
|
-
# @!attribute [rw]
|
37
|
-
# @return [
|
36
|
+
# @!attribute [rw] myscout_events_expires
|
37
|
+
# @return [Date] when the subscription to Events in My.SCOUT expires
|
38
|
+
# @!attribute [rw] myscout_details_expires
|
39
|
+
# @return [Boolean] whether the section uses the Personal Details part of My.SCOUT
|
38
40
|
# @!attribute [rw] myscout_badges
|
39
41
|
# @return [Boolean] whether the section uses the Badges part of My.SCOUT
|
40
42
|
# @!attribute [rw] myscout_programme
|
41
43
|
# @return [Boolean] whether the section uses the Programme part of My.SCOUT
|
42
44
|
# @!attribute [rw] myscout_payments
|
43
45
|
# @return [Boolean] whether the section uses the Payments part of My.SCOUT
|
46
|
+
# @!attribute [rw] myscout_details
|
47
|
+
# @return [Boolean] whether the section uses the Personal Details part of My.SCOUT
|
44
48
|
# @!attribute [rw] myscout_emails
|
45
49
|
# @return [Hash of Symbol to Boolean] which email addresses are linked to MyScout for each Member
|
46
50
|
# @!attribute [rw] myscout_email_address_from
|
@@ -52,7 +56,9 @@ module Osm
|
|
52
56
|
# @!attribute [rw] myscout_programme_summary
|
53
57
|
# @return [Boolean] Wether parents can see summary of programme items
|
54
58
|
# @!attribute [rw] myscout_programme_times
|
55
|
-
# @return [Boolean]
|
59
|
+
# @return [Boolean] Whether parents can see times of programme items
|
60
|
+
# @!attribute [rw] myscout_programme_show
|
61
|
+
# @return [Fixnum] How many programme itemms parents can see (the next 5, 10, 15, 20 meetings, -1 (whole term), 0 (remaining this term) or -2 (all future))
|
56
62
|
# @!attribute [rw] myscout_event_reminder_count
|
57
63
|
# @return [Fixnum] How many event reminders to send to parents who haven't responded
|
58
64
|
# @!attribute [rw] myscout_event_reminder_frequency
|
@@ -61,6 +67,8 @@ module Osm
|
|
61
67
|
# @return [Fixnum] How many payment reminders to send to parents who haven't paid yet
|
62
68
|
# @!attribute [rw] myscout_payment_reminder_frequency
|
63
69
|
# @return [Fixnum] How many days to leave between payment reminder emails
|
70
|
+
# @!attribute [rw] myscout_details_email_changes_to
|
71
|
+
# @return [String] email address to send changes to personal details made through My.SCOUT to
|
64
72
|
# @!attribute [rw] sms_sent_test
|
65
73
|
# @return [Boolean] Whether the section has sent their test SMS message
|
66
74
|
# @!attribute [rw] sms_messages_sent
|
@@ -84,20 +92,24 @@ module Osm
|
|
84
92
|
attribute :myscout_events_expires, :type => Date
|
85
93
|
attribute :myscout_badges_expires, :type => Date
|
86
94
|
attribute :myscout_programme_expires, :type => Date
|
95
|
+
attribute :myscout_details_expires, :type => Date
|
87
96
|
attribute :myscout_events, :type => Boolean
|
88
97
|
attribute :myscout_badges, :type => Boolean
|
89
98
|
attribute :myscout_programme, :type => Boolean
|
90
99
|
attribute :myscout_payments, :type => Boolean
|
100
|
+
attribute :myscout_details, :type => Boolean
|
91
101
|
attribute :myscout_emails, :default => {}
|
92
102
|
attribute :myscout_email_address_from, :type => String, :default => ''
|
93
103
|
attribute :myscout_email_address_copy, :type => String, :default => ''
|
94
104
|
attribute :myscout_badges_partial, :type => Boolean
|
95
105
|
attribute :myscout_programme_summary, :type => Boolean
|
96
106
|
attribute :myscout_programme_times, :type => Boolean
|
107
|
+
attribute :myscout_programme_show, :type => Integer, :default => 0
|
97
108
|
attribute :myscout_event_reminder_count, :type => Integer
|
98
109
|
attribute :myscout_event_reminder_frequency, :type => Integer
|
99
110
|
attribute :myscout_payment_reminder_count, :type => Integer
|
100
111
|
attribute :myscout_payment_reminder_frequency, :type => Integer
|
112
|
+
attribute :myscout_details_email_changes_to, :type => String, :default => ''
|
101
113
|
attribute :sms_sent_test, :type => Boolean, :default => false
|
102
114
|
attribute :sms_messages_sent, :type => Integer, :default => 0
|
103
115
|
attribute :sms_messages_remaining, :type => Integer, :default => 0
|
@@ -105,12 +117,13 @@ module Osm
|
|
105
117
|
attr_accessible :id, :name, :group_id, :group_name, :subscription_level, :subscription_expires,
|
106
118
|
:type, :column_names, :fields, :intouch_fields, :mobile_fields, :flexi_records,
|
107
119
|
:gocardless, :myscout_events_expires, :myscout_badges_expires,
|
108
|
-
:myscout_programme_expires, :
|
109
|
-
:myscout_programme, :myscout_payments, :
|
110
|
-
:myscout_email_address_from, :myscout_email_address_copy,
|
120
|
+
:myscout_programme_expires, :myscout_details_expires, :myscout_events,
|
121
|
+
:myscout_badges, :myscout_programme, :myscout_payments, :myscout_details,
|
122
|
+
:myscout_emails, :myscout_email_address_from, :myscout_email_address_copy,
|
111
123
|
:myscout_badges_partial, :myscout_programme_summary, :myscout_programme_times,
|
112
|
-
:
|
113
|
-
:
|
124
|
+
:myscout_programme_show, :myscout_event_reminder_count,
|
125
|
+
:myscout_event_reminder_frequency, :myscout_payment_reminder_count,
|
126
|
+
:myscout_payment_reminder_frequency, :myscout_details_email_changes_to,
|
114
127
|
:sms_sent_test, :sms_messages_sent, :sms_messages_remaining
|
115
128
|
|
116
129
|
validates_numericality_of :id, :only_integer=>true, :greater_than=>0, :allow_nil => true
|
@@ -127,11 +140,11 @@ module Osm
|
|
127
140
|
validates_presence_of :subscription_level
|
128
141
|
validates_presence_of :subscription_expires
|
129
142
|
validates_presence_of :type
|
130
|
-
validates_presence_of :column_names, :unless => Proc.new { |a| a.column_names == {} }
|
131
|
-
validates_presence_of :fields, :unless => Proc.new { |a| a.fields == {} }
|
132
|
-
validates_presence_of :intouch_fields, :unless => Proc.new { |a| a.intouch_fields == {} }
|
133
|
-
validates_presence_of :mobile_fields, :unless => Proc.new { |a| a.mobile_fields == {} }
|
134
|
-
validates_presence_of :flexi_records, :unless => Proc.new { |a| a.flexi_records == [] }
|
143
|
+
# validates_presence_of :column_names, :unless => Proc.new { |a| a.column_names == {} }
|
144
|
+
# validates_presence_of :fields, :unless => Proc.new { |a| a.fields == {} }
|
145
|
+
# validates_presence_of :intouch_fields, :unless => Proc.new { |a| a.intouch_fields == {} }
|
146
|
+
# validates_presence_of :mobile_fields, :unless => Proc.new { |a| a.mobile_fields == {} }
|
147
|
+
# validates_presence_of :flexi_records, :unless => Proc.new { |a| a.flexi_records == [] }
|
135
148
|
|
136
149
|
validates_inclusion_of :subscription_level, :in => (1..3), :message => 'is not a valid subscription level'
|
137
150
|
validates_inclusion_of :gocardless, :in => [true, false]
|
@@ -139,9 +152,11 @@ module Osm
|
|
139
152
|
validates_inclusion_of :myscout_badges, :in => [true, false]
|
140
153
|
validates_inclusion_of :myscout_programme, :in => [true, false]
|
141
154
|
validates_inclusion_of :myscout_payments, :in => [true, false]
|
155
|
+
validates_inclusion_of :myscout_details, :in => [true, false]
|
142
156
|
validates_inclusion_of :myscout_badges_partial, :in => [true, false]
|
143
157
|
validates_inclusion_of :myscout_programme_summary, :in => [true, false]
|
144
158
|
validates_inclusion_of :myscout_programme_times, :in => [true, false]
|
159
|
+
validates_inclusion_of :myscout_programme_show, :in => [-2, -1, 0, 5, 10, 15, 20]
|
145
160
|
validates_inclusion_of :sms_sent_test, :in => [true, false]
|
146
161
|
|
147
162
|
validates :column_names, :hash => {:key_type => Symbol, :value_type => String}
|
@@ -215,20 +230,24 @@ module Osm
|
|
215
230
|
:myscout_events_expires => Osm::parse_date(section_data['portalExpires']['events']),
|
216
231
|
:myscout_badges_expires => Osm::parse_date(section_data['portalExpires']['badges']),
|
217
232
|
:myscout_programme_expires => Osm::parse_date(section_data['portalExpires']['programme']),
|
233
|
+
:myscout_details_expires => Osm::parse_date(section_data['portalExpires']['details']),
|
218
234
|
:myscout_events => myscout_data['events'] == 1,
|
219
235
|
:myscout_badges => myscout_data['badges'] == 1,
|
220
236
|
:myscout_programme => myscout_data['programme'] == 1,
|
221
237
|
:myscout_payments => myscout_data['payments'] == 1,
|
238
|
+
:myscout_details => myscout_data['details'] == 1,
|
222
239
|
:myscout_emails => (myscout_data['emails'] || {}).inject({}) { |n,(k,v)| n[k.to_sym] = v.eql?('true'); n},
|
223
240
|
:myscout_email_address_from => myscout_data['emailAddress'] ? myscout_data['emailAddress'] : '',
|
224
241
|
:myscout_email_address_copy => myscout_data['emailAddressCopy'] ? myscout_data['emailAddressCopy'] : '',
|
225
242
|
:myscout_badges_partial => myscout_data['badgesPartial'] == 1,
|
226
243
|
:myscout_programme_summary => myscout_data['programmeSummary'] == 1,
|
227
244
|
:myscout_programme_times => myscout_data['programmeTimes'] == 1,
|
245
|
+
:myscout_programme_show => myscout_data['programmeShow'].to_i,
|
228
246
|
:myscout_event_reminder_count => myscout_data['eventRemindCount'].to_i,
|
229
247
|
:myscout_event_reminder_frequency => myscout_data['eventRemindFrequency'].to_i,
|
230
248
|
:myscout_payment_reminder_count => myscout_data['paymentRemindCount'].to_i,
|
231
249
|
:myscout_payment_reminder_frequency => myscout_data['paymentRemindFrequency'].to_i,
|
250
|
+
:myscout_details_email_changes_to => myscout_data['contactNotificationEmail'],
|
232
251
|
:sms_sent_test => section_data['hasSentTestSMS'],
|
233
252
|
:sms_messages_sent => section_data['sms_sent'],
|
234
253
|
:sms_messages_remaining => section_data['sms_remaining'],
|
@@ -348,12 +367,10 @@ module Osm
|
|
348
367
|
|
349
368
|
# Get the name for the section's subscription level
|
350
369
|
# @return [String, nil] the name of the subscription level (nil if no name exists)
|
370
|
+
# @deprecated Please use Osm::SUBSCRIPTION_LEVEL_NAMES[section.subscription_level instead
|
351
371
|
def subscription_level_name
|
352
|
-
|
353
|
-
|
354
|
-
2 => 'Silver',
|
355
|
-
3 => 'Gold',
|
356
|
-
}[subscription_level]
|
372
|
+
warn "[DEPRECATION] `subscription_level_name` is deprecated. Please use `Osm::SUBSCRIPTION_LEVEL_NAMES[section.subscription_level` instead."
|
373
|
+
Osm::SUBSCRIPTION_LEVEL_NAMES[subscription_level]
|
357
374
|
end
|
358
375
|
|
359
376
|
# Compare Section based on group_name type (age order), then name
|
data/lib/osm/sms.rb
CHANGED
@@ -6,19 +6,20 @@ module Osm
|
|
6
6
|
# @param [Osm::Api] api The api to use to make the request
|
7
7
|
# @param [Osm::Section, Fixnum, #to_i] section The section (or its ID) to send the message to
|
8
8
|
# @param [Array<Osm::Member, Fixnum, #to_i>, Osm::Member, Fixnum, #to_i] members The members (or their IDs) to send the message to
|
9
|
-
# @param [Symbol]
|
9
|
+
# @param [Symbol, String] mobile_numbers Wheather to send the message to all numbers for a member (:all) or just the first mobile one (:first) or a selection (e.g. "12", "24" etc.)
|
10
10
|
# @param [String, #to_s] source_address The number to claim the message is from
|
11
11
|
# @param [String, #to_s] message The text of the message to send
|
12
12
|
# @return [Hash] with keys :sent (Fixnum), :result (Boolean) and :message (String)
|
13
|
-
def self.send_sms(api, section, members,
|
14
|
-
raise ArgumentError, '
|
15
|
-
Osm::Model.require_access_to_section(api, section)
|
13
|
+
def self.send_sms(api, section, members, mobile_numbers, source_address, message)
|
14
|
+
raise ArgumentError, 'mobile_numbers must be either :all, :first or a String containing numbers 1-4' unless ([:all, :first, :one].include?(mobile_numbers) || mobile_numbers.match(/[1234]{1,4}/))
|
15
|
+
Osm::Model.require_access_to_section(api, section)
|
16
|
+
mobile_numbers = :one if mobile_numbers.eql?(:first)
|
16
17
|
|
17
18
|
data = api.perform_query("sms.php?action=sendText§ionid=#{section.to_i}", {
|
18
19
|
'msg' => message,
|
19
20
|
'scouts' => [*members].join(','),
|
20
21
|
'source' => source_address,
|
21
|
-
'
|
22
|
+
'type' => mobile_numbers,
|
22
23
|
'scheduled' => 'now',
|
23
24
|
})
|
24
25
|
|
data/lib/osm/term.rb
CHANGED
@@ -104,7 +104,7 @@ module Osm
|
|
104
104
|
# @param [Osm::Section, Fixnum, #to_i] section The section (or its ID) to get terms for
|
105
105
|
# @!macro options_get
|
106
106
|
# @return [Osm::Term, nil] The current term or nil if the user can not access that section
|
107
|
-
# @raise [Osm::Error] If the
|
107
|
+
# @raise [Osm::Error::NoCurrentTerm] If the Section doesn't have a Term which is current
|
108
108
|
def self.get_current_term_for_section(api, section, options={})
|
109
109
|
section_id = section.to_i
|
110
110
|
terms = get_for_section(api, section_id, options)
|
@@ -114,7 +114,7 @@ module Osm
|
|
114
114
|
return term if term.current?
|
115
115
|
end
|
116
116
|
|
117
|
-
raise Osm::Error, 'There is no current term for the section.'
|
117
|
+
raise Osm::Error::NoCurrentTerm, 'There is no current term for the section.'
|
118
118
|
end
|
119
119
|
|
120
120
|
# Create a term in OSM
|
@@ -0,0 +1,205 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
|
5
|
+
describe "Budget" do
|
6
|
+
|
7
|
+
it "Create Budget" do
|
8
|
+
b = Osm::Budget.new(
|
9
|
+
:id => 1,
|
10
|
+
:section_id => 2,
|
11
|
+
:name => 'Name',
|
12
|
+
)
|
13
|
+
|
14
|
+
b.id.should == 1
|
15
|
+
b.section_id.should == 2
|
16
|
+
b.name.should == 'Name'
|
17
|
+
b.valid?.should be_true
|
18
|
+
end
|
19
|
+
|
20
|
+
it "Sorts Budget by section ID then name" do
|
21
|
+
b1 = Osm::Budget.new(:section_id => 1, :name => 'a')
|
22
|
+
b2 = Osm::Budget.new(:section_id => 2, :name => 'a')
|
23
|
+
b3 = Osm::Budget.new(:section_id => 2, :name => 'b')
|
24
|
+
|
25
|
+
data = [b2, b3, b1]
|
26
|
+
data.sort.should == [b1, b2, b3]
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
describe "Using the API" do
|
31
|
+
|
32
|
+
it "Get budgets for section" do
|
33
|
+
data = {
|
34
|
+
"identifier" => "categoryid",
|
35
|
+
"items" => [
|
36
|
+
{
|
37
|
+
"categoryid" => "2",
|
38
|
+
"sectionid" => "3",
|
39
|
+
"name" => "Name",
|
40
|
+
"archived" => "1"
|
41
|
+
}
|
42
|
+
]
|
43
|
+
}
|
44
|
+
FakeWeb.register_uri(:post, "https://www.onlinescoutmanager.co.uk/finances.php?action=getCategories§ionid=3", :body => data.to_json)
|
45
|
+
|
46
|
+
budgets = Osm::Budget.get_for_section(@api, 3)
|
47
|
+
budgets.should == [Osm::Budget.new(:id => 2, :section_id => 3, :name => 'Name')]
|
48
|
+
end
|
49
|
+
|
50
|
+
it "Create budget (success)" do
|
51
|
+
budget = Osm::Budget.new(
|
52
|
+
:section_id => 2,
|
53
|
+
:name => 'Budget Name',
|
54
|
+
)
|
55
|
+
|
56
|
+
url = "https://www.onlinescoutmanager.co.uk/finances.php?action=addCategory§ionid=2"
|
57
|
+
HTTParty.should_receive(:post).with(url, :body => {
|
58
|
+
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
59
|
+
'token' => @CONFIGURATION[:api][:osm][:token],
|
60
|
+
'userid' => 'user_id',
|
61
|
+
'secret' => 'secret',
|
62
|
+
}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body => '{"ok":true}'}) }
|
63
|
+
Osm::Budget.should_receive(:get_for_section).with(@api, 2, {:no_cache=>true}) { [Osm::Budget.new(:id => 3, :section_id => 2, :name => 'Existing budget'), Osm::Budget.new(:id => 4, :section_id => 2, :name => '** Unnamed **')] }
|
64
|
+
url = "https://www.onlinescoutmanager.co.uk/finances.php?action=updateCategory§ionid=2"
|
65
|
+
HTTParty.should_receive(:post).with(url, :body => {
|
66
|
+
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
67
|
+
'token' => @CONFIGURATION[:api][:osm][:token],
|
68
|
+
'userid' => 'user_id',
|
69
|
+
'secret' => 'secret',
|
70
|
+
'categoryid' => 4,
|
71
|
+
'column' => 'name',
|
72
|
+
'value' => 'Budget Name',
|
73
|
+
'section_id' => 2,
|
74
|
+
'row' => 0,
|
75
|
+
}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body => '{"ok":true}'}) }
|
76
|
+
|
77
|
+
budget.create(@api).should be_true
|
78
|
+
budget.id.should == 4
|
79
|
+
end
|
80
|
+
|
81
|
+
it "Create budget (failure (not created))" do
|
82
|
+
budget = Osm::Budget.new(
|
83
|
+
:section_id => 2,
|
84
|
+
:name => 'Budget Name',
|
85
|
+
)
|
86
|
+
|
87
|
+
url = "https://www.onlinescoutmanager.co.uk/finances.php?action=addCategory§ionid=2"
|
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
|
+
}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body => '{"ok":true}'}) }
|
94
|
+
Osm::Budget.should_receive(:get_for_section).with(@api, 2, {:no_cache=>true}) { [Osm::Budget.new(:id => 3, :section_id => 2, :name => 'Existing budget')] }
|
95
|
+
|
96
|
+
budget.create(@api).should be_false
|
97
|
+
end
|
98
|
+
|
99
|
+
it "Create budget (failure (not updated))" do
|
100
|
+
budget = Osm::Budget.new(
|
101
|
+
:section_id => 2,
|
102
|
+
:name => 'Budget Name',
|
103
|
+
)
|
104
|
+
|
105
|
+
url = "https://www.onlinescoutmanager.co.uk/finances.php?action=addCategory§ionid=2"
|
106
|
+
HTTParty.should_receive(:post).with(url, :body => {
|
107
|
+
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
108
|
+
'token' => @CONFIGURATION[:api][:osm][:token],
|
109
|
+
'userid' => 'user_id',
|
110
|
+
'secret' => 'secret',
|
111
|
+
}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body => '{"ok":true}'}) }
|
112
|
+
Osm::Budget.should_receive(:get_for_section).with(@api, 2, {:no_cache=>true}) { [Osm::Budget.new(:id => 3, :section_id => 2, :name => '** Unnamed **')] }
|
113
|
+
url = "https://www.onlinescoutmanager.co.uk/finances.php?action=updateCategory§ionid=2"
|
114
|
+
HTTParty.should_receive(:post).with(url, :body => {
|
115
|
+
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
116
|
+
'token' => @CONFIGURATION[:api][:osm][:token],
|
117
|
+
'userid' => 'user_id',
|
118
|
+
'secret' => 'secret',
|
119
|
+
'categoryid' => 3,
|
120
|
+
'column' => 'name',
|
121
|
+
'value' => 'Budget Name',
|
122
|
+
'section_id' => 2,
|
123
|
+
'row' => 0,
|
124
|
+
}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body => '{"ok":false}'}) }
|
125
|
+
|
126
|
+
budget.create(@api).should be_false
|
127
|
+
end
|
128
|
+
|
129
|
+
it "Update budget (success)" do
|
130
|
+
budget = Osm::Budget.new(
|
131
|
+
:id => 1,
|
132
|
+
:section_id => 2,
|
133
|
+
:name => 'Budget Name',
|
134
|
+
)
|
135
|
+
|
136
|
+
url = "https://www.onlinescoutmanager.co.uk/finances.php?action=updateCategory§ionid=2"
|
137
|
+
HTTParty.should_receive(:post).with(url, :body => {
|
138
|
+
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
139
|
+
'token' => @CONFIGURATION[:api][:osm][:token],
|
140
|
+
'userid' => 'user_id',
|
141
|
+
'secret' => 'secret',
|
142
|
+
'categoryid' => 1,
|
143
|
+
'column' => 'name',
|
144
|
+
'value' => 'Budget Name',
|
145
|
+
'section_id' => 2,
|
146
|
+
'row' => 0,
|
147
|
+
}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body => '{"ok":true}'}) }
|
148
|
+
|
149
|
+
budget.update(@api).should be_true
|
150
|
+
end
|
151
|
+
|
152
|
+
it "Update budget (failure)" do
|
153
|
+
budget = Osm::Budget.new(
|
154
|
+
:id => 1,
|
155
|
+
:section_id => 2,
|
156
|
+
:name => 'Budget Name',
|
157
|
+
)
|
158
|
+
|
159
|
+
HTTParty.should_receive(:post) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body => '{"ok":false}'}) }
|
160
|
+
|
161
|
+
budget.update(@api).should be_false
|
162
|
+
end
|
163
|
+
|
164
|
+
it "Delete budget (success)" do
|
165
|
+
budget = Osm::Budget.new(
|
166
|
+
:id => 1,
|
167
|
+
:section_id => 2,
|
168
|
+
:name => 'Budget Name',
|
169
|
+
)
|
170
|
+
|
171
|
+
url = "https://www.onlinescoutmanager.co.uk/finances.php?action=deleteCategory§ionid=2"
|
172
|
+
HTTParty.should_receive(:post).with(url, :body => {
|
173
|
+
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
174
|
+
'token' => @CONFIGURATION[:api][:osm][:token],
|
175
|
+
'userid' => 'user_id',
|
176
|
+
'secret' => 'secret',
|
177
|
+
'categoryid' => 1,
|
178
|
+
}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body => '{"ok":true}'}) }
|
179
|
+
|
180
|
+
budget.delete(@api).should be_true
|
181
|
+
end
|
182
|
+
|
183
|
+
it "Delete budget (failure)" do
|
184
|
+
budget = Osm::Budget.new(
|
185
|
+
:id => 1,
|
186
|
+
:section_id => 2,
|
187
|
+
:name => 'Budget Name',
|
188
|
+
)
|
189
|
+
|
190
|
+
url = "https://www.onlinescoutmanager.co.uk/finances.php?action=deleteCategory§ionid=2"
|
191
|
+
HTTParty.should_receive(:post).with(url, :body => {
|
192
|
+
'apiid' => @CONFIGURATION[:api][:osm][:id],
|
193
|
+
'token' => @CONFIGURATION[:api][:osm][:token],
|
194
|
+
'userid' => 'user_id',
|
195
|
+
'secret' => 'secret',
|
196
|
+
'categoryid' => 1,
|
197
|
+
}) { OsmTest::DummyHttpResult.new(:response=>{:code=>'200', :body => '{"ok":false}'}) }
|
198
|
+
|
199
|
+
budget.delete(@api).should be_false
|
200
|
+
end
|
201
|
+
|
202
|
+
end
|
203
|
+
|
204
|
+
|
205
|
+
end
|