nfg-client 1.0.0 → 1.0.1
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.
- checksums.yaml +8 -8
- data/LICENSE.md +1 -1
- data/README.md +10 -0
- data/Rakefile +6 -0
- data/lib/nfg-client/client.rb +18 -9
- data/lib/nfg-client/utils.rb +72 -19
- data/lib/nfg-client/version.rb +1 -1
- data/nfg-client.gemspec +1 -0
- data/spec/remote/nfg-client_remote_spec.rb +115 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/support/api_parameters.rb +134 -0
- data/spec/unit/create_cof_spec.rb +34 -0
- data/spec/unit/delete_donor_cof_spec.rb +32 -0
- data/spec/unit/get_donation_report_spec.rb +35 -0
- data/spec/unit/get_donor_cofs_spec.rb +36 -0
- data/spec/unit/get_donor_donation_history_spec.rb +35 -0
- data/spec/unit/get_fee_spec.rb +32 -0
- data/spec/unit/make_cof_donation_spec.rb +39 -0
- data/spec/unit/make_donation_add_cof_spec.rb +39 -0
- data/spec/unit/response_stubs/create_cof_stubs.rb +46 -0
- data/spec/unit/response_stubs/delete_donor_cof_stubs.rb +42 -0
- data/spec/unit/response_stubs/get_donation_report_stubs.rb +99 -0
- data/spec/unit/response_stubs/get_donor_cofs_stubs.rb +66 -0
- data/spec/unit/response_stubs/get_donor_donation_history_stubs.rb +62 -0
- data/spec/unit/response_stubs/get_fee_stubs.rb +49 -0
- data/spec/unit/response_stubs/make_cof_donation_stubs.rb +46 -0
- data/spec/unit/response_stubs/make_donation_add_cof_stubs.rb +47 -0
- data/spec/unit/response_stubs/spec_response_helpers.rb +16 -0
- metadata +54 -4
- data/spec/nfg_client_spec.rb +0 -0
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YzY4OGY4MGQ0ZTRhY2FkYzQ5NTU0MTdlODE3YWY1YjkwOWViM2JiNw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MWZkMzFiZTQ0N2E4ZGYxN2VhMjI0NmJjN2Y5MmY4M2NhODJmMGE4ZQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MTZhOGFkMTZlMjM0MThhY2EyNzgzMTMzZTQyYTgyYTU5YWJiNDg4Mzk1OWY0
|
10
|
+
N2MwYzhhZjBlNWQ0YjNlYTkxMzA5NGFjMmQ1N2FiZDJkZjNjZDg5MDYwMzE5
|
11
|
+
NjRlZDQwZjJjZmJhMTYxMGFlMTY5YzQ2MWVjZDU0YTc4MjJlNTk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NDBmOTJkMjA1OWE4NjU3NTVjZDdmNDNmYzQ2NWMyZGIyNGQ5NjBjNjYzZThi
|
14
|
+
Yjc5OGJhOWExM2YxNGE4YmFmNThhYzM5MmY4YjkyNDZlMzI4ZTI5MTljYjZi
|
15
|
+
YzEwZDhjNjAzMDZmZDVkNDhhMGM2NzBkNTFmYmM1MDQxNTZkNWM=
|
data/LICENSE.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (c) 2014 Antonio Ruano Cuesta
|
3
|
+
Copyright (c) 2014 by Antonio Ruano Cuesta
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
data/README.md
CHANGED
@@ -358,3 +358,13 @@ When a call fails (i.e. the "StatusCode" is different than "Success"), it's usua
|
|
358
358
|
"CallDuration" => "x.x",
|
359
359
|
...
|
360
360
|
}
|
361
|
+
|
362
|
+
# Contributors
|
363
|
+
|
364
|
+
Special thanks to:
|
365
|
+
|
366
|
+
- [Tom Hoen](https://github.com/hoenth), for the addition of the test suite and code refactoring.
|
367
|
+
|
368
|
+
# Copyright
|
369
|
+
|
370
|
+
Copyright (c) 2014 by [Antonio Ruano Cuesta](https://github.com/aruanoc). See [LICENSE](https://github.com/aruanoc/nfg-client/blob/master/LICENSE.md) for details.
|
data/Rakefile
CHANGED
data/lib/nfg-client/client.rb
CHANGED
@@ -20,8 +20,9 @@ module NFGClient
|
|
20
20
|
# Arguments:
|
21
21
|
# params: (Hash)
|
22
22
|
def create_cof(params)
|
23
|
+
requires!(params, :DonorToken, :DonorFirstName, :DonorLastName, :DonorEmail, :DonorAddress1, :DonorAddress2, :DonorCity, :DonorState, :DonorZip, :DonorCountry, :DonorPhone, :CardType, :NameOnCard, :CardNumber, :ExpMonth, :ExpYear, :CSC)
|
23
24
|
call_params = add_credentials_to_params(params)
|
24
|
-
response = nfg_soap_request('CreateCOF', call_params
|
25
|
+
response = nfg_soap_request('CreateCOF', call_params)
|
25
26
|
if response.is_a? REXML::Element
|
26
27
|
{
|
27
28
|
'StatusCode' => response.elements['StatusCode'].get_text.to_s,
|
@@ -41,8 +42,9 @@ module NFGClient
|
|
41
42
|
# Arguments:
|
42
43
|
# params: (Hash)
|
43
44
|
def delete_donor_cof(params)
|
45
|
+
requires!(params, :DonorToken, :COFId)
|
44
46
|
call_params = add_credentials_to_params(params)
|
45
|
-
response = nfg_soap_request('DeleteDonorCOF', call_params
|
47
|
+
response = nfg_soap_request('DeleteDonorCOF', call_params)
|
46
48
|
if response.is_a? REXML::Element
|
47
49
|
if response.elements['StatusCode'].get_text.to_s == 'Success'
|
48
50
|
{
|
@@ -74,8 +76,9 @@ module NFGClient
|
|
74
76
|
# Arguments:
|
75
77
|
# params: (Hash)
|
76
78
|
def get_donor_cofs(params)
|
79
|
+
requires!(params, :DonorToken)
|
77
80
|
call_params = add_credentials_to_params(params)
|
78
|
-
response = nfg_soap_request('GetDonorCOFs', call_params
|
81
|
+
response = nfg_soap_request('GetDonorCOFs', call_params)
|
79
82
|
if response.is_a? REXML::Element
|
80
83
|
response_hash = {
|
81
84
|
'StatusCode' => response.elements['StatusCode'].get_text.to_s,
|
@@ -107,11 +110,13 @@ module NFGClient
|
|
107
110
|
# Arguments:
|
108
111
|
# params: (Hash)
|
109
112
|
def get_fee(params)
|
113
|
+
requires!(params, :DonationLineItems, :TipAmount, :CardType)
|
110
114
|
call_params = add_credentials_to_params(params)
|
111
|
-
response = nfg_soap_request('GetFee', call_params
|
115
|
+
response = nfg_soap_request('GetFee', call_params)
|
112
116
|
if response.is_a? REXML::Element
|
113
117
|
if response.elements['ErrorDetails'].elements['ErrorInfo'].nil?
|
114
118
|
{
|
119
|
+
'StatusCode' => 'Success',
|
115
120
|
'Message' => response.elements['Message'].get_text.to_s,
|
116
121
|
'ErrorDetails' => response.elements['ErrorDetails'].get_text.to_s,
|
117
122
|
'CallDuration' => response.elements['CallDuration'].get_text.to_s,
|
@@ -122,6 +127,7 @@ module NFGClient
|
|
122
127
|
}
|
123
128
|
else
|
124
129
|
{
|
130
|
+
'StatusCode' => 'ValidationFailed',
|
125
131
|
'Message' => response.elements['Message'].get_text.to_s,
|
126
132
|
'ErrorDetails' => {
|
127
133
|
'ErrorInfo' => {
|
@@ -140,14 +146,14 @@ module NFGClient
|
|
140
146
|
response
|
141
147
|
end
|
142
148
|
end
|
143
|
-
|
144
149
|
# Makes a donation using the given COF
|
145
150
|
#
|
146
151
|
# Arguments:
|
147
152
|
# params: (Hash)
|
148
153
|
def make_cof_donation(params)
|
154
|
+
requires!(params, :DonationLineItems, :TotalAmount, :TipAmount, :DonorIpAddress, :DonorToken, :COFId)
|
149
155
|
call_params = add_credentials_to_params(params)
|
150
|
-
response = nfg_soap_request('MakeCOFDonation', call_params
|
156
|
+
response = nfg_soap_request('MakeCOFDonation', call_params)
|
151
157
|
if response.is_a? REXML::Element
|
152
158
|
if response.elements['StatusCode'].get_text.to_s == 'Success'
|
153
159
|
{
|
@@ -183,8 +189,9 @@ module NFGClient
|
|
183
189
|
# Arguments:
|
184
190
|
# params: (Hash)
|
185
191
|
def make_donation_add_cof(params)
|
192
|
+
requires!(params, :DonationLineItems, :TotalAmount, :TipAmount, :DonorIpAddress, :DonorToken, :DonorFirstName, :DonorLastName, :DonorEmail, :DonorAddress1, :DonorAddress2, :DonorCity, :DonorState, :DonorZip, :DonorCountry, :DonorPhone, :CardType, :NameOnCard, :CardNumber, :ExpMonth, :ExpYear, :CSC)
|
186
193
|
call_params = add_credentials_to_params(params)
|
187
|
-
response = nfg_soap_request('MakeDonationAddCOF', call_params
|
194
|
+
response = nfg_soap_request('MakeDonationAddCOF', call_params)
|
188
195
|
if response.is_a? REXML::Element
|
189
196
|
if (response.elements['StatusCode'].get_text.to_s == 'Success') || ((response.elements['StatusCode'].get_text.to_s != 'Success') && response.elements['ErrorDetails'].elements['ErrorInfo'].nil?)
|
190
197
|
{
|
@@ -220,8 +227,9 @@ module NFGClient
|
|
220
227
|
# Arguments:
|
221
228
|
# params: (Hash)
|
222
229
|
def get_donor_donation_history(params)
|
230
|
+
requires!(params, :DonorToken)
|
223
231
|
call_params = add_credentials_to_params(params)
|
224
|
-
response = nfg_soap_request('GetDonorDonationHistory', call_params
|
232
|
+
response = nfg_soap_request('GetDonorDonationHistory', call_params)
|
225
233
|
if response.is_a? REXML::Element
|
226
234
|
response_hash = {
|
227
235
|
'StatusCode' => response.elements['StatusCode'].get_text.to_s,
|
@@ -254,8 +262,9 @@ module NFGClient
|
|
254
262
|
# Arguments:
|
255
263
|
# params: (Hash)
|
256
264
|
def get_donation_report(params)
|
265
|
+
requires!(params, :StartDate, :EndDate, :DonationReportType)
|
257
266
|
call_params = add_credentials_to_params(params)
|
258
|
-
response = nfg_soap_request('GetDonationReport', call_params
|
267
|
+
response = nfg_soap_request('GetDonationReport', call_params)
|
259
268
|
if response.is_a? REXML::Element
|
260
269
|
response_hash = {
|
261
270
|
'StatusCode' => response.elements['StatusCode'].get_text.to_s,
|
data/lib/nfg-client/utils.rb
CHANGED
@@ -21,32 +21,21 @@ module NFGClient
|
|
21
21
|
# Arguments:
|
22
22
|
# nfg_method: (String)
|
23
23
|
# params: (Hash)
|
24
|
-
def nfg_soap_request(nfg_method, params
|
24
|
+
def nfg_soap_request(nfg_method, params)
|
25
25
|
if (nfg_method.is_a? String) && (params.is_a? Hash)
|
26
|
-
# Build SOAP 1.2 request
|
27
|
-
soap_request = build_nfg_soap_request(nfg_method,params)
|
28
26
|
|
29
|
-
# Build
|
30
|
-
|
31
|
-
|
32
|
-
headers =
|
33
|
-
'Host' => host,
|
34
|
-
'Content-Type' => 'application/soap+xml; charset=utf-8',
|
35
|
-
'Content-Length' => soap_request.length.to_s,
|
36
|
-
'SOAPAction' => "#{url}/#{nfg_method}".gsub('.asmx','')
|
37
|
-
}
|
27
|
+
# Build SOAP 1.2 request
|
28
|
+
soap_request = build_nfg_soap_request(nfg_method, params)
|
29
|
+
|
30
|
+
headers = format_headers(nfg_method, soap_request)
|
38
31
|
|
39
32
|
return_value = Hash.new
|
40
33
|
|
41
34
|
# Being HTTP Post
|
42
35
|
begin
|
43
|
-
|
44
|
-
https_conn = Net::HTTP.new(uri.host, uri.port)
|
45
|
-
https_conn.use_ssl = true
|
46
|
-
response = https_conn.post(uri.path, soap_request, headers)
|
36
|
+
response = ssl_post(soap_request, headers)
|
47
37
|
if response.code == '200'
|
48
38
|
parsed = REXML::Document.new(response.body)
|
49
|
-
#return response.body
|
50
39
|
# Build return hash parsing XML response
|
51
40
|
if parsed.root.nil?
|
52
41
|
return_value['StatusCode'] = 'MissingParameter'
|
@@ -61,6 +50,7 @@ module NFGClient
|
|
61
50
|
return_value['ErrorDetails'] = response.body
|
62
51
|
end
|
63
52
|
rescue StandardError => e
|
53
|
+
p e
|
64
54
|
return_value['StatusCode'] = 'UnexpectedError'
|
65
55
|
return_value['Message'] = e
|
66
56
|
return_value['ErrorDetails'] = e.backtrace.join(' ')
|
@@ -70,22 +60,85 @@ module NFGClient
|
|
70
60
|
else
|
71
61
|
raise ArgumentError.new('http_post requires a nfg_method and a hash of params')
|
72
62
|
end
|
73
|
-
end
|
63
|
+
end
|
74
64
|
|
65
|
+
# Returns a complete NFG SOAP request based on the provided target method and params
|
75
66
|
def build_nfg_soap_request(nfg_method, params)
|
76
67
|
get_nfg_soap_request_template.gsub('|body|',"<#{nfg_method} xmlns=\"http://api.networkforgood.org/partnerdonationservice\">#{hash_to_xml(params)}</#{nfg_method}>")
|
77
68
|
end
|
78
69
|
|
70
|
+
# Returns a SOAP template with no body
|
79
71
|
def get_nfg_soap_request_template
|
80
72
|
"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\"><soap12:Body>|body|</soap12:Body></soap12:Envelope>"
|
81
73
|
end
|
82
74
|
|
75
|
+
# Makes HTTPS post request with given body (soap_request) and headers
|
76
|
+
#
|
77
|
+
# Arguments:
|
78
|
+
# soap_request: (String)
|
79
|
+
# headers: (Hash)
|
80
|
+
def ssl_post(soap_request, headers)
|
81
|
+
uri = URI.parse(url)
|
82
|
+
https_conn = Net::HTTP.new(uri.host, uri.port)
|
83
|
+
https_conn.use_ssl = true
|
84
|
+
https_conn.post(uri.path, soap_request, headers)
|
85
|
+
end
|
86
|
+
|
87
|
+
# Returns NFG friendly headers hash for HTTPS post
|
88
|
+
#
|
89
|
+
# Arguments:
|
90
|
+
# nfg_method: (String)
|
91
|
+
# soap_request: (String)
|
92
|
+
def format_headers(nfg_method, soap_request)
|
93
|
+
{
|
94
|
+
'Host' => host,
|
95
|
+
'Content-Type' => 'application/soap+xml; charset=utf-8',
|
96
|
+
'Content-Length' => soap_request.length.to_s,
|
97
|
+
'SOAPAction' => "#{url}/#{nfg_method}".gsub('.asmx','')
|
98
|
+
}
|
99
|
+
end
|
100
|
+
|
101
|
+
# Returns NFG target host
|
102
|
+
def host
|
103
|
+
return @@nfg_urls['sandbox']['host'] if @use_sandbox
|
104
|
+
@@nfg_urls['production']['host']
|
105
|
+
end
|
106
|
+
|
107
|
+
# Returns NFG target URL
|
108
|
+
def url
|
109
|
+
return @@nfg_urls['sandbox']['url'] if @use_sandbox
|
110
|
+
@@nfg_urls['production']['url']
|
111
|
+
end
|
112
|
+
|
113
|
+
# Returns a string containing an XML representation of the given hash
|
114
|
+
#
|
115
|
+
# Arguments:
|
116
|
+
# hash: (Hash)
|
83
117
|
def hash_to_xml(hash)
|
84
118
|
hash.map do |k, v|
|
85
119
|
text = (v.is_a? Hash) ? hash_to_xml(v) : v
|
86
|
-
|
120
|
+
# It removes the digits at the end of each "DonationItem" hash key
|
121
|
+
xml_elem = (v.is_a? Hash) ? k.to_s.gsub(/(\d)/, "") : k
|
87
122
|
"<%s>%s</%s>" % [xml_elem, text, xml_elem]
|
88
123
|
end.join
|
89
124
|
end
|
125
|
+
|
126
|
+
# Raises an exception if the required params are not part of the given hash
|
127
|
+
#
|
128
|
+
# Arguments:
|
129
|
+
# hash: (Hash)
|
130
|
+
# *params: (Array or Symbol)
|
131
|
+
def requires!(hash, *params)
|
132
|
+
params.each do |param|
|
133
|
+
if param.is_a?(Array)
|
134
|
+
raise ArgumentError.new("Missing required parameter: #{param.first}") unless hash.has_key?(param.first) || hash.has_key?(param.first.to_s)
|
135
|
+
|
136
|
+
valid_options = param[1..-1]
|
137
|
+
raise ArgumentError.new("Parameter: #{param.first} must be one of #{valid_options.to_sentence(:words_connector => 'or')}") unless valid_options.include?(hash[param.first]) || valid_options.include?(hash[param.first.to_s])
|
138
|
+
else
|
139
|
+
raise ArgumentError.new("Missing required parameter: #{param}") unless hash.has_key?(param) || hash.has_key?(param.to_s)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
90
143
|
end
|
91
144
|
end
|
data/lib/nfg-client/version.rb
CHANGED
data/nfg-client.gemspec
CHANGED
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
# Your ip address must be whitelisted at NFG for these tests to work
|
4
|
+
|
5
|
+
|
6
|
+
describe NFGClient do
|
7
|
+
let(:nfg_client) { NFGClient.new(PartnerID, PartnerPW, PartnerSource, PartnerCampaign, true) }
|
8
|
+
describe "create_cof" do
|
9
|
+
context 'with valid information' do
|
10
|
+
it "should create a card on file" do
|
11
|
+
result = nfg_client.create_cof(create_cof_params)
|
12
|
+
expect(result["StatusCode"]).to eql('Success')
|
13
|
+
expect(result["DonorToken"]).to eql(create_cof_params[:DonorToken])
|
14
|
+
expect(result["COFId"]).to_not eq('0')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "with invalid information" do
|
19
|
+
it "should not create a card on file" do
|
20
|
+
result = nfg_client.create_cof(create_cof_params.merge({ ExpYear: '14' }))
|
21
|
+
expect(result["StatusCode"]).to eql('ValidationFailed')
|
22
|
+
expect(result["DonorToken"]).to eql(create_cof_params[:DonorToken])
|
23
|
+
expect(result["COFId"]).to eql('0')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "get_fee" do
|
29
|
+
context 'with valid information' do
|
30
|
+
it "should be successful" do
|
31
|
+
result = nfg_client.get_fee(get_fee_params)
|
32
|
+
expect(result["StatusCode"]).to eql('Success')
|
33
|
+
expect(result["TotalChargeAmount"]).to eql("100.0")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'with invalid information' do
|
38
|
+
it "should not be successful" do
|
39
|
+
result = nfg_client.get_fee(get_fee_params('12-1212121'))
|
40
|
+
expect(result["StatusCode"]).to eql('ValidationFailed')
|
41
|
+
expect(result["ErrorDetails"]["ErrorInfo"]["ErrCode"]).to eql('NpoNotFound')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe "delete_donor_cof" do
|
47
|
+
context "with valid information" do
|
48
|
+
it "should remove the cof" do
|
49
|
+
result = nfg_client.create_cof(create_cof_params)
|
50
|
+
result = nfg_client.delete_donor_cof( { DonorToken: result['DonorToken'], COFId: result['COFId']})
|
51
|
+
expect(result["StatusCode"]).to eql('Success')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "with invalid COFId" do
|
56
|
+
it "should return an error" do
|
57
|
+
result = nfg_client.delete_donor_cof( delete_donor_cof_params )
|
58
|
+
expect(result["StatusCode"]).to eql('OtherError')
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "make_cof_donation" do
|
64
|
+
context "with valid information" do
|
65
|
+
it "should make the donation" do
|
66
|
+
result = nfg_client.create_cof(create_cof_params)
|
67
|
+
result = nfg_client.make_cof_donation(make_cof_donation_params(result['COFId']))
|
68
|
+
expect(result["StatusCode"]).to eql('Success')
|
69
|
+
expect(result["ChargeId"]).to_not eq('0')
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context "with invalid information" do
|
74
|
+
it "should not make the donation" do
|
75
|
+
result = nfg_client.make_cof_donation(make_cof_donation_params)
|
76
|
+
expect(result["StatusCode"]).to eql('ValidationFailed')
|
77
|
+
expect(result["ChargeId"]).to eq('0')
|
78
|
+
expect(result["ErrorDetails"]["ErrorInfo"]["ErrCode"]).to eql('COFNotFound')
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe "make_donation_add_cof" do
|
84
|
+
context "with valid information" do
|
85
|
+
it "should make the donation" do
|
86
|
+
result = nfg_client.make_donation_add_cof(make_donation_add_cof_params)
|
87
|
+
expect(result["StatusCode"]).to eql('Success')
|
88
|
+
expect(result["ChargeId"]).to_not eq('0')
|
89
|
+
expect(result["COFId"]).to_not eq('0')
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context "with invalid information" do
|
94
|
+
it "should not make the donation" do
|
95
|
+
result = nfg_client.make_donation_add_cof(make_donation_add_cof_params('444'))
|
96
|
+
expect(result["StatusCode"]).to eql('ChargeFailed')
|
97
|
+
expect(result["ChargeId"]).to_not eq('0')
|
98
|
+
expect(result["COFId"]).to eq('0')
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "get_donor_donation_history" do
|
104
|
+
it "should return something" do
|
105
|
+
result = nfg_client.create_cof(create_cof_params)
|
106
|
+
params = make_donation_add_cof_params
|
107
|
+
result = nfg_client.make_donation_add_cof(params)
|
108
|
+
result = nfg_client.get_donor_donation_history(DonorToken: params[:DonorToken])
|
109
|
+
|
110
|
+
expect(result["StatusCode"]).to eql('Success')
|
111
|
+
expect(result["Donations"]).to eql('Success')
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
require 'simplecov'
|
2
|
+
require 'mocha/api'
|
3
|
+
require 'andand'
|
4
|
+
|
5
|
+
require 'nfg-client'
|
6
|
+
|
2
7
|
SimpleCov.start
|
3
8
|
|
9
|
+
# load all of the files in the support folder
|
10
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
11
|
+
|
4
12
|
# This file was generated by the `rspec --init` command. Conventionally, all
|
5
13
|
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
6
14
|
# Require this file using `require "spec_helper"` to ensure that it is only
|
@@ -0,0 +1,134 @@
|
|
1
|
+
def create_cof_params
|
2
|
+
{
|
3
|
+
DonorIpAddress: '198.168.200.200',
|
4
|
+
DonorToken: 'AIH3939',
|
5
|
+
DonorFirstName: 'John',
|
6
|
+
DonorLastName: 'Smith',
|
7
|
+
DonorEmail: 'john@smith.com',
|
8
|
+
DonorAddress1: '123 Address Way',
|
9
|
+
DonorAddress2: '',
|
10
|
+
DonorCity: 'Baltimore',
|
11
|
+
DonorState: 'MD',
|
12
|
+
DonorZip: '21210',
|
13
|
+
DonorCountry: 'US',
|
14
|
+
DonorPhone: '410-544-8778',
|
15
|
+
CardType: 'Visa',
|
16
|
+
NameOnCard: 'John Smith',
|
17
|
+
CardNumber: '4111111111111111',
|
18
|
+
ExpMonth: '12',
|
19
|
+
ExpYear: '2016',
|
20
|
+
CSC: '123'
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
def delete_donor_cof_params
|
25
|
+
{
|
26
|
+
DonorToken: 'AIH3939',
|
27
|
+
COFId: '1111111',
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_donation_report_params
|
32
|
+
{
|
33
|
+
StartDate: '2014-01-01 00:00:00',
|
34
|
+
EndDate: '2014-01-01 12:00:00',
|
35
|
+
DonationReportType: 'All'
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def get_donor_cofs_params
|
40
|
+
{
|
41
|
+
DonorToken: 'AIH3939',
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def get_donor_donation_history_params
|
46
|
+
{
|
47
|
+
DonorToken: 239949
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
# default is NFG EIN
|
52
|
+
def get_fee_params(npo_ein = '68-0480736')
|
53
|
+
{
|
54
|
+
DonationLineItems: {
|
55
|
+
DonationItem: {
|
56
|
+
NpoEin: npo_ein,
|
57
|
+
Designation: 'annual_fund',
|
58
|
+
Dedication: 'For my grandfather',
|
59
|
+
donorVis: 'ProvideAll',
|
60
|
+
ItemAmount: 100.00,
|
61
|
+
RecurType: 'NotRecurring',
|
62
|
+
AddOrDeduct: 'Add',
|
63
|
+
TransactionType: 'Donation'
|
64
|
+
}
|
65
|
+
},
|
66
|
+
TipAmount: 3.00,
|
67
|
+
CardType: 'Visa'
|
68
|
+
}
|
69
|
+
end
|
70
|
+
|
71
|
+
def make_cof_donation_params(cof_id = '11111111')
|
72
|
+
{
|
73
|
+
DonationLineItems: {
|
74
|
+
DonationItem: {
|
75
|
+
NpoEin: '68-0480736',
|
76
|
+
Designation: 'annual_fund',
|
77
|
+
Dedication: 'For my grandfather',
|
78
|
+
donorVis: 'ProvideAll',
|
79
|
+
ItemAmount: 100.00,
|
80
|
+
RecurType: 'NotRecurring',
|
81
|
+
AddOrDeduct: 'Add',
|
82
|
+
TransactionType: 'Donation'
|
83
|
+
}
|
84
|
+
},
|
85
|
+
TotalAmount: 100.00,
|
86
|
+
TipAmount: 3.00,
|
87
|
+
PartnerTransactionIdentifier: 'my_order_id',
|
88
|
+
DonorIpAddress: '198.168.200.200',
|
89
|
+
DonorToken: 'AIH3939',
|
90
|
+
COFId: cof_id
|
91
|
+
}
|
92
|
+
end
|
93
|
+
|
94
|
+
def make_donation_add_cof_params(csc = '123')
|
95
|
+
{
|
96
|
+
DonationLineItems: {
|
97
|
+
DonationItem: {
|
98
|
+
NpoEin: '68-0480736',
|
99
|
+
Designation: 'annual_fund',
|
100
|
+
Dedication: 'For my grandfather',
|
101
|
+
donorVis: 'ProvideAll',
|
102
|
+
ItemAmount: 100.00,
|
103
|
+
RecurType: 'NotRecurring',
|
104
|
+
AddOrDeduct: 'Add',
|
105
|
+
TransactionType: 'Donation'
|
106
|
+
}
|
107
|
+
},
|
108
|
+
TotalAmount: 100.00,
|
109
|
+
TipAmount: 3.00,
|
110
|
+
PartnerTransactionIdentifier: 'my_order_id',
|
111
|
+
DonorIpAddress: '198.168.200.200',
|
112
|
+
DonorToken: donor_token,
|
113
|
+
DonorFirstName: 'John',
|
114
|
+
DonorLastName: 'Smith',
|
115
|
+
DonorEmail: 'john@smith.com',
|
116
|
+
DonorAddress1: '100 Address Way',
|
117
|
+
DonorAddress2: '',
|
118
|
+
DonorCity: 'Baltimore',
|
119
|
+
DonorState: 'MD',
|
120
|
+
DonorZip: '21210',
|
121
|
+
DonorCountry: 'US',
|
122
|
+
DonorPhone: '410-544-8778',
|
123
|
+
CardType: 'Visa',
|
124
|
+
NameOnCard: 'John Smith',
|
125
|
+
CardNumber: '4111111111111111',
|
126
|
+
ExpMonth: '12',
|
127
|
+
ExpYear: '2015',
|
128
|
+
CSC: csc
|
129
|
+
}
|
130
|
+
end
|
131
|
+
|
132
|
+
def donor_token
|
133
|
+
'NFG_' + Time.now.strftime("%Y-%m-%d-%H%M%S")
|
134
|
+
end
|