creditsafe 0.2.0 → 0.3.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/.ruby-version +1 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +67 -53
- data/Guardfile +1 -0
- data/circle.yml +2 -2
- data/creditsafe.gemspec +4 -1
- data/lib/creditsafe.rb +1 -0
- data/lib/creditsafe/client.rb +45 -32
- data/lib/creditsafe/errors.rb +1 -0
- data/lib/creditsafe/messages.rb +1 -0
- data/lib/creditsafe/version.rb +2 -1
- data/spec/creditsafe/client_spec.rb +95 -35
- data/spec/creditsafe/messages_spec.rb +2 -1
- data/spec/spec_helper.rb +1 -0
- metadata +57 -28
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e3f7e899ff7ea1566d2a958e2ebb966971f49af3
|
|
4
|
+
data.tar.gz: a9eca4831066ac57b6c67199d8d34898c795194c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 39c2f54873c5d70bdc66df50c1c44f9813961b888b5b5ed038ebd3b6e5086a7bf8dc2fd7cb195858e45e7f26a4667d19b5ad914e163465c78d26e7e2cc0abd0f
|
|
7
|
+
data.tar.gz: 7fc19fcbca0b22f6003f4f44f8f519a93f9ba43b0a67711cccb02dff2dcbadde0d765f1bd654749eef6c75da5cc5ba0156e0007fcde59d06d901e9f9aea52ee6
|
data/.rubocop.yml
CHANGED
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.3.1
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -2,33 +2,36 @@ PATH
|
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
4
|
creditsafe (0.2.0)
|
|
5
|
+
activesupport (>= 4.2.0)
|
|
5
6
|
excon (~> 0.45)
|
|
6
7
|
savon (~> 2.8)
|
|
7
8
|
|
|
8
9
|
GEM
|
|
9
10
|
remote: https://rubygems.org/
|
|
10
11
|
specs:
|
|
11
|
-
|
|
12
|
+
activesupport (5.0.0)
|
|
13
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
14
|
+
i18n (~> 0.7)
|
|
15
|
+
minitest (~> 5.1)
|
|
16
|
+
tzinfo (~> 1.1)
|
|
17
|
+
addressable (2.4.0)
|
|
12
18
|
akami (1.3.1)
|
|
13
19
|
gyoku (>= 0.4.0)
|
|
14
20
|
nokogiri
|
|
15
|
-
ast (2.
|
|
21
|
+
ast (2.3.0)
|
|
16
22
|
builder (3.2.2)
|
|
17
|
-
byebug (
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
coderay (1.1.0)
|
|
22
|
-
columnize (0.9.0)
|
|
23
|
-
crack (0.4.2)
|
|
23
|
+
byebug (9.0.5)
|
|
24
|
+
coderay (1.1.1)
|
|
25
|
+
concurrent-ruby (1.0.2)
|
|
26
|
+
crack (0.4.3)
|
|
24
27
|
safe_yaml (~> 1.0.0)
|
|
25
28
|
diff-lcs (1.2.5)
|
|
26
|
-
excon (0.
|
|
27
|
-
ffi (1.9.
|
|
29
|
+
excon (0.51.0)
|
|
30
|
+
ffi (1.9.14)
|
|
28
31
|
formatador (0.2.5)
|
|
29
|
-
guard (2.
|
|
32
|
+
guard (2.14.0)
|
|
30
33
|
formatador (>= 0.2.4)
|
|
31
|
-
listen (
|
|
34
|
+
listen (>= 2.7, < 4.0)
|
|
32
35
|
lumberjack (~> 1.0)
|
|
33
36
|
nenv (~> 0.1)
|
|
34
37
|
notiffany (~> 0.0)
|
|
@@ -36,7 +39,7 @@ GEM
|
|
|
36
39
|
shellany (~> 0.0)
|
|
37
40
|
thor (>= 0.18.1)
|
|
38
41
|
guard-compat (1.2.1)
|
|
39
|
-
guard-rspec (4.
|
|
42
|
+
guard-rspec (4.7.3)
|
|
40
43
|
guard (~> 2.1)
|
|
41
44
|
guard-compat (~> 1.1)
|
|
42
45
|
rspec (>= 2.99.0, < 4.0)
|
|
@@ -45,61 +48,67 @@ GEM
|
|
|
45
48
|
rubocop (~> 0.20)
|
|
46
49
|
gyoku (1.3.1)
|
|
47
50
|
builder (>= 2.1.2)
|
|
48
|
-
|
|
49
|
-
httpi (2.4.
|
|
51
|
+
hashdiff (0.3.0)
|
|
52
|
+
httpi (2.4.2)
|
|
50
53
|
rack
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
rb-
|
|
55
|
-
|
|
54
|
+
socksify
|
|
55
|
+
i18n (0.7.0)
|
|
56
|
+
listen (3.1.5)
|
|
57
|
+
rb-fsevent (~> 0.9, >= 0.9.4)
|
|
58
|
+
rb-inotify (~> 0.9, >= 0.9.7)
|
|
59
|
+
ruby_dep (~> 1.2)
|
|
60
|
+
lumberjack (1.0.10)
|
|
56
61
|
method_source (0.8.2)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
62
|
+
mini_portile2 (2.1.0)
|
|
63
|
+
minitest (5.9.0)
|
|
64
|
+
nenv (0.3.0)
|
|
65
|
+
nokogiri (1.6.8)
|
|
66
|
+
mini_portile2 (~> 2.1.0)
|
|
67
|
+
pkg-config (~> 1.1.7)
|
|
61
68
|
nori (2.6.0)
|
|
62
|
-
notiffany (0.
|
|
69
|
+
notiffany (0.1.1)
|
|
63
70
|
nenv (~> 0.1)
|
|
64
71
|
shellany (~> 0.0)
|
|
65
|
-
parser (2.3.
|
|
72
|
+
parser (2.3.1.2)
|
|
66
73
|
ast (~> 2.2)
|
|
74
|
+
pkg-config (1.1.7)
|
|
67
75
|
powerpack (0.1.1)
|
|
68
|
-
pry (0.10.
|
|
76
|
+
pry (0.10.4)
|
|
69
77
|
coderay (~> 1.1.0)
|
|
70
78
|
method_source (~> 0.8.1)
|
|
71
79
|
slop (~> 3.4)
|
|
72
|
-
pry-byebug (3.
|
|
73
|
-
byebug (~>
|
|
80
|
+
pry-byebug (3.4.0)
|
|
81
|
+
byebug (~> 9.0)
|
|
74
82
|
pry (~> 0.10)
|
|
75
|
-
rack (1.6.
|
|
83
|
+
rack (1.6.4)
|
|
76
84
|
rainbow (2.1.0)
|
|
77
|
-
rb-fsevent (0.9.
|
|
78
|
-
rb-inotify (0.9.
|
|
85
|
+
rb-fsevent (0.9.7)
|
|
86
|
+
rb-inotify (0.9.7)
|
|
79
87
|
ffi (>= 0.5.0)
|
|
80
|
-
rspec (3.
|
|
81
|
-
rspec-core (~> 3.
|
|
82
|
-
rspec-expectations (~> 3.
|
|
83
|
-
rspec-mocks (~> 3.
|
|
84
|
-
rspec-core (3.2
|
|
85
|
-
rspec-support (~> 3.
|
|
86
|
-
rspec-expectations (3.
|
|
88
|
+
rspec (3.5.0)
|
|
89
|
+
rspec-core (~> 3.5.0)
|
|
90
|
+
rspec-expectations (~> 3.5.0)
|
|
91
|
+
rspec-mocks (~> 3.5.0)
|
|
92
|
+
rspec-core (3.5.2)
|
|
93
|
+
rspec-support (~> 3.5.0)
|
|
94
|
+
rspec-expectations (3.5.0)
|
|
87
95
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
88
|
-
rspec-support (~> 3.
|
|
96
|
+
rspec-support (~> 3.5.0)
|
|
89
97
|
rspec-its (1.2.0)
|
|
90
98
|
rspec-core (>= 3.0.0)
|
|
91
99
|
rspec-expectations (>= 3.0.0)
|
|
92
|
-
rspec-mocks (3.
|
|
100
|
+
rspec-mocks (3.5.0)
|
|
93
101
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
94
|
-
rspec-support (~> 3.
|
|
95
|
-
rspec-support (3.
|
|
96
|
-
rubocop (0.
|
|
97
|
-
parser (>= 2.3.
|
|
102
|
+
rspec-support (~> 3.5.0)
|
|
103
|
+
rspec-support (3.5.0)
|
|
104
|
+
rubocop (0.42.0)
|
|
105
|
+
parser (>= 2.3.1.1, < 3.0)
|
|
98
106
|
powerpack (~> 0.1)
|
|
99
107
|
rainbow (>= 1.99.1, < 3.0)
|
|
100
108
|
ruby-progressbar (~> 1.7)
|
|
101
|
-
unicode-display_width (~> 0.
|
|
102
|
-
ruby-progressbar (1.
|
|
109
|
+
unicode-display_width (~> 1.0, >= 1.0.1)
|
|
110
|
+
ruby-progressbar (1.8.1)
|
|
111
|
+
ruby_dep (1.4.0)
|
|
103
112
|
safe_yaml (1.0.4)
|
|
104
113
|
savon (2.11.1)
|
|
105
114
|
akami (~> 1.2)
|
|
@@ -111,16 +120,20 @@ GEM
|
|
|
111
120
|
wasabi (~> 3.4)
|
|
112
121
|
shellany (0.0.1)
|
|
113
122
|
slop (3.6.0)
|
|
123
|
+
socksify (1.7.0)
|
|
114
124
|
thor (0.19.1)
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
125
|
+
thread_safe (0.3.5)
|
|
126
|
+
timecop (0.8.1)
|
|
127
|
+
tzinfo (1.2.2)
|
|
128
|
+
thread_safe (~> 0.1)
|
|
129
|
+
unicode-display_width (1.1.0)
|
|
118
130
|
wasabi (3.5.0)
|
|
119
131
|
httpi (~> 2.0)
|
|
120
132
|
nokogiri (>= 1.4.2)
|
|
121
|
-
webmock (1.
|
|
133
|
+
webmock (1.24.6)
|
|
122
134
|
addressable (>= 2.3.6)
|
|
123
135
|
crack (>= 0.3.2)
|
|
136
|
+
hashdiff
|
|
124
137
|
|
|
125
138
|
PLATFORMS
|
|
126
139
|
ruby
|
|
@@ -135,7 +148,8 @@ DEPENDENCIES
|
|
|
135
148
|
rspec (~> 3.1)
|
|
136
149
|
rspec-its (~> 1.2)
|
|
137
150
|
rubocop (~> 0.37)
|
|
151
|
+
timecop (~> 0.8)
|
|
138
152
|
webmock (~> 1.20)
|
|
139
153
|
|
|
140
154
|
BUNDLED WITH
|
|
141
|
-
1.
|
|
155
|
+
1.12.5
|
data/Guardfile
CHANGED
data/circle.yml
CHANGED
data/creditsafe.gemspec
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# coding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
lib = File.expand_path('../lib', __FILE__)
|
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
5
|
require 'creditsafe/version'
|
|
@@ -6,7 +7,7 @@ require 'creditsafe/version'
|
|
|
6
7
|
Gem::Specification.new do |spec|
|
|
7
8
|
spec.name = 'creditsafe'
|
|
8
9
|
spec.version = Creditsafe::VERSION
|
|
9
|
-
spec.authors = ['
|
|
10
|
+
spec.authors = ['GoCardless Engineering']
|
|
10
11
|
spec.email = ['engineering@gocardless.com']
|
|
11
12
|
spec.summary = 'Ruby client for the Creditsafe SOAP API'
|
|
12
13
|
spec.description = 'Ruby client for the Creditsafe SOAP API'
|
|
@@ -19,6 +20,7 @@ Gem::Specification.new do |spec|
|
|
|
19
20
|
|
|
20
21
|
spec.add_runtime_dependency 'savon', '~> 2.8'
|
|
21
22
|
spec.add_runtime_dependency 'excon', '~> 0.45'
|
|
23
|
+
spec.add_runtime_dependency 'activesupport', '>= 4.2.0'
|
|
22
24
|
|
|
23
25
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
|
24
26
|
spec.add_development_dependency 'rspec', '~> 3.1'
|
|
@@ -27,4 +29,5 @@ Gem::Specification.new do |spec|
|
|
|
27
29
|
spec.add_development_dependency 'guard-rubocop', '~> 1.2'
|
|
28
30
|
spec.add_development_dependency 'rubocop', '~> 0.37'
|
|
29
31
|
spec.add_development_dependency 'webmock', '~> 1.20'
|
|
32
|
+
spec.add_development_dependency 'timecop', '~> 0.8'
|
|
30
33
|
end
|
data/lib/creditsafe.rb
CHANGED
data/lib/creditsafe/client.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'securerandom'
|
|
2
3
|
require 'savon'
|
|
3
4
|
require 'excon'
|
|
@@ -5,17 +6,19 @@ require 'excon'
|
|
|
5
6
|
require 'creditsafe/errors'
|
|
6
7
|
require 'creditsafe/messages'
|
|
7
8
|
|
|
9
|
+
require 'active_support/notifications'
|
|
10
|
+
|
|
8
11
|
module Creditsafe
|
|
9
12
|
class Client
|
|
10
|
-
XMLNS_OPER = 'oper'
|
|
11
|
-
XMLNS_OPER_VAL = 'http://www.creditsafe.com/globaldata/operations'
|
|
13
|
+
XMLNS_OPER = 'oper'
|
|
14
|
+
XMLNS_OPER_VAL = 'http://www.creditsafe.com/globaldata/operations'
|
|
12
15
|
|
|
13
|
-
XMLNS_DAT = 'dat'
|
|
14
|
-
XMLNS_DAT_VAL = 'http://www.creditsafe.com/globaldata/datatypes'
|
|
16
|
+
XMLNS_DAT = 'dat'
|
|
17
|
+
XMLNS_DAT_VAL = 'http://www.creditsafe.com/globaldata/datatypes'
|
|
15
18
|
|
|
16
|
-
XMLNS_CRED = 'cred'
|
|
19
|
+
XMLNS_CRED = 'cred'
|
|
17
20
|
XMLNS_CRED_VAL =
|
|
18
|
-
'http://schemas.datacontract.org/2004/07/Creditsafe.GlobalData'
|
|
21
|
+
'http://schemas.datacontract.org/2004/07/Creditsafe.GlobalData'
|
|
19
22
|
|
|
20
23
|
def initialize(username: nil, password: nil, savon_opts: {})
|
|
21
24
|
raise ArgumentError, "Username must be provided" if username.nil?
|
|
@@ -29,11 +32,8 @@ module Creditsafe
|
|
|
29
32
|
def find_company(search_criteria = {})
|
|
30
33
|
check_search_criteria(search_criteria)
|
|
31
34
|
|
|
32
|
-
response =
|
|
33
|
-
|
|
34
|
-
client.call(:find_companies, message: message)
|
|
35
|
-
end
|
|
36
|
-
|
|
35
|
+
response = invoke_soap(:find_companies,
|
|
36
|
+
find_company_message(search_criteria))
|
|
37
37
|
companies = response.
|
|
38
38
|
fetch(:find_companies_response).
|
|
39
39
|
fetch(:find_companies_result).
|
|
@@ -43,10 +43,10 @@ module Creditsafe
|
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
def company_report(creditsafe_id, custom_data: nil)
|
|
46
|
-
response =
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
response = invoke_soap(
|
|
47
|
+
:retrieve_company_online_report,
|
|
48
|
+
retrieve_company_report_message(creditsafe_id, custom_data)
|
|
49
|
+
)
|
|
50
50
|
|
|
51
51
|
response.
|
|
52
52
|
fetch(:retrieve_company_online_report_response).
|
|
@@ -127,28 +127,41 @@ module Creditsafe
|
|
|
127
127
|
end
|
|
128
128
|
end
|
|
129
129
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
response =
|
|
130
|
+
def invoke_soap(message_type, message)
|
|
131
|
+
started = Time.now
|
|
132
|
+
notification_payload = { request: message }
|
|
133
|
+
|
|
134
|
+
response = client.call(message_type, message: message)
|
|
135
135
|
handle_message_for_response(response)
|
|
136
|
-
response.body
|
|
137
|
-
rescue =>
|
|
138
|
-
handle_error(
|
|
136
|
+
notification_payload[:response] = response.body
|
|
137
|
+
rescue => raw_error
|
|
138
|
+
processed_error = handle_error(raw_error)
|
|
139
|
+
notification_payload[:error] = processed_error
|
|
140
|
+
raise processed_error
|
|
141
|
+
ensure
|
|
142
|
+
publish("creditsafe.#{message_type}", started, Time.now,
|
|
143
|
+
SecureRandom.hex(10), notification_payload)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def publish(*args)
|
|
147
|
+
ActiveSupport::Notifications.publish(*args)
|
|
139
148
|
end
|
|
140
149
|
|
|
150
|
+
# There's a potential bug in the creditsafe API where they actually return
|
|
151
|
+
# an HTTP 401 if you're unauthorized, hence the sad special case below
|
|
141
152
|
def handle_error(error)
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
153
|
+
case error
|
|
154
|
+
when Savon::SOAPFault
|
|
155
|
+
return UnknownApiError.new(error.message)
|
|
156
|
+
when Savon::HTTPError
|
|
157
|
+
if error.to_hash[:code] == 401
|
|
158
|
+
return AccountError.new('Unauthorized: invalid credentials')
|
|
159
|
+
end
|
|
160
|
+
return UnknownApiError.new(error.message)
|
|
161
|
+
when Excon::Errors::Error
|
|
162
|
+
return HttpError.new("Error making HTTP request: #{error.message}")
|
|
148
163
|
end
|
|
149
|
-
|
|
150
|
-
rescue Excon::Errors::Error => err
|
|
151
|
-
raise HttpError, "Error making HTTP request: #{err.message}"
|
|
164
|
+
error
|
|
152
165
|
end
|
|
153
166
|
|
|
154
167
|
def client
|
data/lib/creditsafe/errors.rb
CHANGED
data/lib/creditsafe/messages.rb
CHANGED
data/lib/creditsafe/version.rb
CHANGED
|
@@ -1,13 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'spec_helper'
|
|
2
3
|
require 'creditsafe/client'
|
|
4
|
+
require 'timecop'
|
|
3
5
|
|
|
4
6
|
URL = 'https://webservices.creditsafe.com/GlobalData/1.3/'\
|
|
5
|
-
'MainServiceBasic.svc'
|
|
7
|
+
'MainServiceBasic.svc'
|
|
6
8
|
|
|
7
9
|
RSpec.describe(Creditsafe::Client) do
|
|
10
|
+
notifications = []
|
|
8
11
|
let(:username) { "b" }
|
|
9
12
|
let(:password) { "c" }
|
|
13
|
+
before(:all) do
|
|
14
|
+
ActiveSupport::Notifications.subscribe do |*args|
|
|
15
|
+
notifications << ActiveSupport::Notifications::Event.new(*args)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
before(:each) { notifications = [] }
|
|
10
19
|
|
|
20
|
+
shared_examples_for 'sends notifications' do
|
|
21
|
+
let(:time) { Time.local(1990) }
|
|
22
|
+
it 'records a SOAP event' do
|
|
23
|
+
Timecop.freeze(time) do
|
|
24
|
+
method_call
|
|
25
|
+
end
|
|
26
|
+
expect(notifications).to match([have_attributes(
|
|
27
|
+
name: "creditsafe.#{soap_verb}",
|
|
28
|
+
transaction_id: match(/\A.{20}\Z/),
|
|
29
|
+
time: time,
|
|
30
|
+
end: time,
|
|
31
|
+
payload: {
|
|
32
|
+
request: be_truthy,
|
|
33
|
+
response: be_truthy
|
|
34
|
+
}
|
|
35
|
+
)])
|
|
36
|
+
end
|
|
37
|
+
end
|
|
11
38
|
shared_examples_for 'handles api errors' do
|
|
12
39
|
context 'when an error occurs due to invalid credentials' do
|
|
13
40
|
before do
|
|
@@ -18,14 +45,20 @@ RSpec.describe(Creditsafe::Client) do
|
|
|
18
45
|
end
|
|
19
46
|
|
|
20
47
|
it 'raises an AccountError' do
|
|
21
|
-
expect { method_call }.to raise_error(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
48
|
+
expect { method_call }.to raise_error(
|
|
49
|
+
Creditsafe::AccountError, /invalid credentials/
|
|
50
|
+
) do |error|
|
|
51
|
+
expect(notifications).to match(
|
|
52
|
+
[
|
|
53
|
+
have_attributes(
|
|
54
|
+
name: "creditsafe.#{soap_verb}",
|
|
55
|
+
payload: {
|
|
56
|
+
request: be_truthy,
|
|
57
|
+
error: error
|
|
58
|
+
}
|
|
59
|
+
)
|
|
60
|
+
]
|
|
61
|
+
)
|
|
29
62
|
end
|
|
30
63
|
end
|
|
31
64
|
end
|
|
@@ -37,7 +70,21 @@ RSpec.describe(Creditsafe::Client) do
|
|
|
37
70
|
end
|
|
38
71
|
|
|
39
72
|
it 'raises an UnknownApiError' do
|
|
40
|
-
expect { method_call }.to raise_error(
|
|
73
|
+
expect { method_call }.to raise_error(
|
|
74
|
+
Creditsafe::UnknownApiError
|
|
75
|
+
) do |error|
|
|
76
|
+
expect(notifications).to match(
|
|
77
|
+
[
|
|
78
|
+
have_attributes(
|
|
79
|
+
name: "creditsafe.#{soap_verb}",
|
|
80
|
+
payload: {
|
|
81
|
+
request: be_truthy,
|
|
82
|
+
error: error
|
|
83
|
+
}
|
|
84
|
+
)
|
|
85
|
+
]
|
|
86
|
+
)
|
|
87
|
+
end
|
|
41
88
|
end
|
|
42
89
|
end
|
|
43
90
|
|
|
@@ -48,15 +95,8 @@ RSpec.describe(Creditsafe::Client) do
|
|
|
48
95
|
|
|
49
96
|
it 'raises an HttpError' do
|
|
50
97
|
expect { method_call }.to(
|
|
51
|
-
raise_error(Creditsafe::HttpError))
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
it 'gives a useful error message' do
|
|
55
|
-
begin
|
|
56
|
-
method_call
|
|
57
|
-
rescue Creditsafe::HttpError => err
|
|
58
|
-
expect(err.message).to include 'Excon::Errors::Timeout'
|
|
59
|
-
end
|
|
98
|
+
raise_error(Creditsafe::HttpError, /Excon::Error(?:s)?::Timeout/)
|
|
99
|
+
)
|
|
60
100
|
end
|
|
61
101
|
end
|
|
62
102
|
end
|
|
@@ -82,6 +122,7 @@ RSpec.describe(Creditsafe::Client) do
|
|
|
82
122
|
end
|
|
83
123
|
|
|
84
124
|
describe '#find_company' do
|
|
125
|
+
let(:soap_verb) { 'find_companies' }
|
|
85
126
|
let(:client) { described_class.new(username: username, password: password) }
|
|
86
127
|
let(:country_code) { "GB" }
|
|
87
128
|
let(:registration_number) { "RN123" }
|
|
@@ -144,6 +185,7 @@ RSpec.describe(Creditsafe::Client) do
|
|
|
144
185
|
:@id => 'GB003/0/07495895')
|
|
145
186
|
end
|
|
146
187
|
|
|
188
|
+
include_examples 'sends notifications'
|
|
147
189
|
include_examples 'handles api errors'
|
|
148
190
|
|
|
149
191
|
context "when no companies are found" do
|
|
@@ -157,6 +199,27 @@ RSpec.describe(Creditsafe::Client) do
|
|
|
157
199
|
it "returns nil" do
|
|
158
200
|
expect(find_company).to be_nil
|
|
159
201
|
end
|
|
202
|
+
|
|
203
|
+
it "records a nil payload" do
|
|
204
|
+
find_company
|
|
205
|
+
expect(notifications).to match([have_attributes(
|
|
206
|
+
payload: {
|
|
207
|
+
request: be_truthy,
|
|
208
|
+
response: {
|
|
209
|
+
find_companies_response: include(
|
|
210
|
+
find_companies_result: include(
|
|
211
|
+
messages: {
|
|
212
|
+
message: include(
|
|
213
|
+
"There are no results matching specified criteria."
|
|
214
|
+
)
|
|
215
|
+
},
|
|
216
|
+
companies: be_nil
|
|
217
|
+
)
|
|
218
|
+
)
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
)])
|
|
222
|
+
end
|
|
160
223
|
end
|
|
161
224
|
|
|
162
225
|
context "when an error occurs with further details" do
|
|
@@ -168,12 +231,10 @@ RSpec.describe(Creditsafe::Client) do
|
|
|
168
231
|
end
|
|
169
232
|
|
|
170
233
|
it 'gives a useful error, with the specific error in the response' do
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
'(Invalid countries list specified.)'
|
|
176
|
-
end
|
|
234
|
+
expect { method_call }.to raise_error(
|
|
235
|
+
Creditsafe::RequestError,
|
|
236
|
+
'Invalid operation parameters (Invalid countries list specified.)'
|
|
237
|
+
)
|
|
177
238
|
end
|
|
178
239
|
|
|
179
240
|
context "with further details provided in the response" do
|
|
@@ -185,17 +246,17 @@ RSpec.describe(Creditsafe::Client) do
|
|
|
185
246
|
end
|
|
186
247
|
|
|
187
248
|
it 'gives a useful error, with the specific error in the response' do
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
end
|
|
249
|
+
expect { method_call }.to raise_error(
|
|
250
|
+
Creditsafe::RequestError,
|
|
251
|
+
'Invalid operation parameters'
|
|
252
|
+
)
|
|
193
253
|
end
|
|
194
254
|
end
|
|
195
255
|
end
|
|
196
256
|
end
|
|
197
257
|
|
|
198
258
|
describe '#company_report' do
|
|
259
|
+
let(:soap_verb) { 'retrieve_company_online_report' }
|
|
199
260
|
before do
|
|
200
261
|
stub_request(:post, URL).to_return(
|
|
201
262
|
body: load_fixture('company-report-successful.xml'),
|
|
@@ -213,6 +274,7 @@ RSpec.describe(Creditsafe::Client) do
|
|
|
213
274
|
expect(company_report).to include(:company_summary)
|
|
214
275
|
end
|
|
215
276
|
|
|
277
|
+
include_examples 'sends notifications'
|
|
216
278
|
include_examples 'handles api errors'
|
|
217
279
|
|
|
218
280
|
context 'when a report is unavailable' do
|
|
@@ -226,11 +288,9 @@ RSpec.describe(Creditsafe::Client) do
|
|
|
226
288
|
end
|
|
227
289
|
|
|
228
290
|
it 'gives a useful error message' do
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
expect(err.message).to include 'Report unavailable'
|
|
233
|
-
end
|
|
291
|
+
expect { company_report }.to raise_error(
|
|
292
|
+
Creditsafe::DataError, /Report unavailable/
|
|
293
|
+
)
|
|
234
294
|
end
|
|
235
295
|
end
|
|
236
296
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'spec_helper'
|
|
2
3
|
require 'creditsafe/messages'
|
|
3
4
|
|
|
@@ -29,7 +30,7 @@ RSpec.describe(Creditsafe::Messages) do
|
|
|
29
30
|
context "for an empty code" do
|
|
30
31
|
let(:code) { '' }
|
|
31
32
|
it "was passed the wrong parameters" do
|
|
32
|
-
expect { subject(:message) }.to raise_error
|
|
33
|
+
expect { subject(:message) }.to raise_error(ArgumentError)
|
|
33
34
|
end
|
|
34
35
|
end
|
|
35
36
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,141 +1,169 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: creditsafe
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
-
|
|
7
|
+
- GoCardless Engineering
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-
|
|
11
|
+
date: 2016-08-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: savon
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - ~>
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: '2.8'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - ~>
|
|
24
|
+
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '2.8'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: excon
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - ~>
|
|
31
|
+
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: '0.45'
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - ~>
|
|
38
|
+
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0.45'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: activesupport
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: 4.2.0
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: 4.2.0
|
|
41
55
|
- !ruby/object:Gem::Dependency
|
|
42
56
|
name: bundler
|
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
|
44
58
|
requirements:
|
|
45
|
-
- - ~>
|
|
59
|
+
- - "~>"
|
|
46
60
|
- !ruby/object:Gem::Version
|
|
47
61
|
version: '1.3'
|
|
48
62
|
type: :development
|
|
49
63
|
prerelease: false
|
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
65
|
requirements:
|
|
52
|
-
- - ~>
|
|
66
|
+
- - "~>"
|
|
53
67
|
- !ruby/object:Gem::Version
|
|
54
68
|
version: '1.3'
|
|
55
69
|
- !ruby/object:Gem::Dependency
|
|
56
70
|
name: rspec
|
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
|
58
72
|
requirements:
|
|
59
|
-
- - ~>
|
|
73
|
+
- - "~>"
|
|
60
74
|
- !ruby/object:Gem::Version
|
|
61
75
|
version: '3.1'
|
|
62
76
|
type: :development
|
|
63
77
|
prerelease: false
|
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
79
|
requirements:
|
|
66
|
-
- - ~>
|
|
80
|
+
- - "~>"
|
|
67
81
|
- !ruby/object:Gem::Version
|
|
68
82
|
version: '3.1'
|
|
69
83
|
- !ruby/object:Gem::Dependency
|
|
70
84
|
name: rspec-its
|
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
|
72
86
|
requirements:
|
|
73
|
-
- - ~>
|
|
87
|
+
- - "~>"
|
|
74
88
|
- !ruby/object:Gem::Version
|
|
75
89
|
version: '1.2'
|
|
76
90
|
type: :development
|
|
77
91
|
prerelease: false
|
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
93
|
requirements:
|
|
80
|
-
- - ~>
|
|
94
|
+
- - "~>"
|
|
81
95
|
- !ruby/object:Gem::Version
|
|
82
96
|
version: '1.2'
|
|
83
97
|
- !ruby/object:Gem::Dependency
|
|
84
98
|
name: guard-rspec
|
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
|
86
100
|
requirements:
|
|
87
|
-
- - ~>
|
|
101
|
+
- - "~>"
|
|
88
102
|
- !ruby/object:Gem::Version
|
|
89
103
|
version: '4.5'
|
|
90
104
|
type: :development
|
|
91
105
|
prerelease: false
|
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
107
|
requirements:
|
|
94
|
-
- - ~>
|
|
108
|
+
- - "~>"
|
|
95
109
|
- !ruby/object:Gem::Version
|
|
96
110
|
version: '4.5'
|
|
97
111
|
- !ruby/object:Gem::Dependency
|
|
98
112
|
name: guard-rubocop
|
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
|
100
114
|
requirements:
|
|
101
|
-
- - ~>
|
|
115
|
+
- - "~>"
|
|
102
116
|
- !ruby/object:Gem::Version
|
|
103
117
|
version: '1.2'
|
|
104
118
|
type: :development
|
|
105
119
|
prerelease: false
|
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
121
|
requirements:
|
|
108
|
-
- - ~>
|
|
122
|
+
- - "~>"
|
|
109
123
|
- !ruby/object:Gem::Version
|
|
110
124
|
version: '1.2'
|
|
111
125
|
- !ruby/object:Gem::Dependency
|
|
112
126
|
name: rubocop
|
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
|
114
128
|
requirements:
|
|
115
|
-
- - ~>
|
|
129
|
+
- - "~>"
|
|
116
130
|
- !ruby/object:Gem::Version
|
|
117
131
|
version: '0.37'
|
|
118
132
|
type: :development
|
|
119
133
|
prerelease: false
|
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
135
|
requirements:
|
|
122
|
-
- - ~>
|
|
136
|
+
- - "~>"
|
|
123
137
|
- !ruby/object:Gem::Version
|
|
124
138
|
version: '0.37'
|
|
125
139
|
- !ruby/object:Gem::Dependency
|
|
126
140
|
name: webmock
|
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
|
128
142
|
requirements:
|
|
129
|
-
- - ~>
|
|
143
|
+
- - "~>"
|
|
130
144
|
- !ruby/object:Gem::Version
|
|
131
145
|
version: '1.20'
|
|
132
146
|
type: :development
|
|
133
147
|
prerelease: false
|
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
149
|
requirements:
|
|
136
|
-
- - ~>
|
|
150
|
+
- - "~>"
|
|
137
151
|
- !ruby/object:Gem::Version
|
|
138
152
|
version: '1.20'
|
|
153
|
+
- !ruby/object:Gem::Dependency
|
|
154
|
+
name: timecop
|
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
|
156
|
+
requirements:
|
|
157
|
+
- - "~>"
|
|
158
|
+
- !ruby/object:Gem::Version
|
|
159
|
+
version: '0.8'
|
|
160
|
+
type: :development
|
|
161
|
+
prerelease: false
|
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
+
requirements:
|
|
164
|
+
- - "~>"
|
|
165
|
+
- !ruby/object:Gem::Version
|
|
166
|
+
version: '0.8'
|
|
139
167
|
description: Ruby client for the Creditsafe SOAP API
|
|
140
168
|
email:
|
|
141
169
|
- engineering@gocardless.com
|
|
@@ -143,10 +171,11 @@ executables: []
|
|
|
143
171
|
extensions: []
|
|
144
172
|
extra_rdoc_files: []
|
|
145
173
|
files:
|
|
146
|
-
- .gitignore
|
|
147
|
-
- .rspec
|
|
148
|
-
- .rubocop.yml
|
|
149
|
-
- .rubocop_todo.yml
|
|
174
|
+
- ".gitignore"
|
|
175
|
+
- ".rspec"
|
|
176
|
+
- ".rubocop.yml"
|
|
177
|
+
- ".rubocop_todo.yml"
|
|
178
|
+
- ".ruby-version"
|
|
150
179
|
- CHANGELOG.md
|
|
151
180
|
- Gemfile
|
|
152
181
|
- Gemfile.lock
|
|
@@ -181,17 +210,17 @@ require_paths:
|
|
|
181
210
|
- lib
|
|
182
211
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
183
212
|
requirements:
|
|
184
|
-
- -
|
|
213
|
+
- - ">="
|
|
185
214
|
- !ruby/object:Gem::Version
|
|
186
215
|
version: '0'
|
|
187
216
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
188
217
|
requirements:
|
|
189
|
-
- -
|
|
218
|
+
- - ">="
|
|
190
219
|
- !ruby/object:Gem::Version
|
|
191
220
|
version: '0'
|
|
192
221
|
requirements: []
|
|
193
222
|
rubyforge_project:
|
|
194
|
-
rubygems_version: 2.
|
|
223
|
+
rubygems_version: 2.5.1
|
|
195
224
|
signing_key:
|
|
196
225
|
specification_version: 4
|
|
197
226
|
summary: Ruby client for the Creditsafe SOAP API
|