cardconnect 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +3 -2
  3. data/CHANGELOG.md +9 -0
  4. data/README.md +12 -4
  5. data/lib/cardconnect.rb +5 -1
  6. data/lib/cardconnect/services/authorization/authorization_response.rb +1 -5
  7. data/lib/cardconnect/services/bin/bin.rb +15 -0
  8. data/lib/cardconnect/services/bin/bin_request.rb +43 -0
  9. data/lib/cardconnect/services/bin/bin_response.rb +36 -0
  10. data/lib/cardconnect/services/capture/capture_request.rb +1 -5
  11. data/lib/cardconnect/services/capture/capture_response.rb +9 -11
  12. data/lib/cardconnect/services/inquire/inquire_response.rb +13 -14
  13. data/lib/cardconnect/services/profile/profile.rb +1 -1
  14. data/lib/cardconnect/services/profile/profile_delete_response.rb +1 -5
  15. data/lib/cardconnect/services/profile/profile_get_response.rb +6 -8
  16. data/lib/cardconnect/services/profile/profile_put_response.rb +1 -5
  17. data/lib/cardconnect/services/refund/refund_response.rb +1 -5
  18. data/lib/cardconnect/services/settlement_status/settlement_status_response.rb +1 -5
  19. data/lib/cardconnect/services/void/void_response.rb +1 -5
  20. data/lib/cardconnect/utils.rb +3 -6
  21. data/lib/cardconnect/version.rb +1 -1
  22. data/test/api_request_stubs.rb +7 -0
  23. data/test/api_response_stubs.rb +38 -6
  24. data/test/cardconnect/services/bin/bin_request_test.rb +45 -0
  25. data/test/cardconnect/services/bin/bin_response_test.rb +67 -0
  26. data/test/cardconnect/services/bin/bin_test.rb +56 -0
  27. data/test/cardconnect/services/inquire/inquire_response_test.rb +26 -2
  28. data/test/cardconnect/services/profile/profile_get_response_test.rb +8 -0
  29. data/test/test_helper.rb +2 -0
  30. metadata +12 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 0d6ec54a93e96b0853646453b4279a2f4940f944
4
- data.tar.gz: 4fdb897d65793526a08198bffd4f7b0e1533dbb6
2
+ SHA256:
3
+ metadata.gz: 1319ba15f85f510f12fc111ca22d27ac342d91688e0728c11a21b946af2e1f02
4
+ data.tar.gz: a39c7ab4f3b114407a8c5172ade8dd7d27fecca2e40457a2e029e5c592b0775a
5
5
  SHA512:
6
- metadata.gz: 7c9363231dcd9e016e566bf9bee06c6d58f08c9bf17c8e5b873a5ccb6e5192b42859bfb5517b75c565b220ba7f62a5442251eaf317fb042d5ac9d343bb103d4c
7
- data.tar.gz: ecc1e1b60110560499449a41b3f615d1506ec0ce2bde957a719ac95cf7d7ebedd243eb3d9da2431e51c237399fea5c7eb2ad6febef6145f76bfd7c82555804c4
6
+ metadata.gz: d32dca6f0801050dec6a2645e4104f57347e1d4e26ec84f32410aadf3e07de9a92081c574a2023360972da3d69c6ec0c44f9e7ca3924e5564eab6870c57ad98d
7
+ data.tar.gz: 87948c7f5600544bff1801804bb5989e0a8d7e0bcb3bfa0f2120dd0f1a36eef03f8f0037e5418de32d3809b999e0d2f513738940ebcad856dc0d4d252b801047
@@ -1,9 +1,10 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.5
4
+ - 2.4
5
+ - 2.3
3
6
  - 2.2
4
7
  - 2.1
5
- - 2.0
6
- - 1.9.3
7
8
  addons:
8
9
  code_climate:
9
10
  repo_token: 77ed2a0fb6a3c8841131b45bcf6beae12ead240bb0b127d1a064d069bfbe9376
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## v2.3.0
4
+
5
+ * Added the following fields to response objects (@shivashankar-ror):
6
+ - CaptureResponse: `:respproc, :resptext, :commcard, :respstat, :respcode, :batchid, :token`
7
+ - InquireResponse: `:capturedate, :batchid, :token, :authdate, :lastfour, :name, :currency, :settledate`
8
+ - ProfileGetResponse: `:gsacard, :auoptout`
9
+
10
+ * Added support for Bin Service (@shivashankar-ror)
11
+
3
12
  ## v2.2.0
4
13
 
5
14
  * Add `token` field to Profile Service for create/update responses since this field can potentially be included in the response if a token hadn't already been created for that particular profile. (@mauriciozaffari)
data/README.md CHANGED
@@ -133,6 +133,18 @@ service.build_request(params)
133
133
  response = service.submit
134
134
  ```
135
135
 
136
+ ### Bin Service
137
+
138
+ CardConnect documentation for this service can be found here: https://developer.cardconnect.com/cardconnect-api#bin-service
139
+
140
+ Example:
141
+
142
+ ```ruby
143
+ service = CardConnect::Service::Bin.new
144
+ service.build_request(params)
145
+ response = service.submit
146
+ ```
147
+
136
148
  ### Response Codes
137
149
 
138
150
  http://developer.cardconnect.com/cardconnect-api/#response-codes
@@ -165,10 +177,6 @@ http://developer.cardconnect.com/cardconnect-api/#response-codes
165
177
 
166
178
  * Close Batch Service needs to be implemented
167
179
 
168
- #### Bin Service
169
-
170
- * Bin Service needs to be implemented
171
-
172
180
  ## Contributing
173
181
 
174
182
  1. Fork it ( https://github.com/mobilecause/cardconnect/fork )
@@ -23,6 +23,8 @@ require 'cardconnect/services/profile/profile_get_request'
23
23
  require 'cardconnect/services/profile/profile_get_response'
24
24
  require 'cardconnect/services/profile/profile_delete_request'
25
25
  require 'cardconnect/services/profile/profile_delete_response'
26
+ require 'cardconnect/services/bin/bin_request'
27
+ require 'cardconnect/services/bin/bin_response'
26
28
 
27
29
  require 'cardconnect/services/service_endpoint'
28
30
  require 'cardconnect/services/authorization/authorization'
@@ -32,6 +34,8 @@ require 'cardconnect/services/inquire/inquire'
32
34
  require 'cardconnect/services/refund/refund'
33
35
  require 'cardconnect/services/void/void'
34
36
  require 'cardconnect/services/profile/profile'
37
+ require 'cardconnect/services/bin/bin'
38
+
35
39
 
36
40
  module CardConnect
37
41
  class << self
@@ -47,4 +51,4 @@ module CardConnect
47
51
  @connection ||= Connection.new.connection
48
52
  end
49
53
  end
50
- end
54
+ end
@@ -24,11 +24,7 @@ module CardConnect
24
24
  end
25
25
 
26
26
  def body
27
- body = {}
28
- FIELDS.each do |attr|
29
- body.merge!(attr => send(attr))
30
- end
31
- body
27
+ FIELDS.collect{|attr| {attr => send(attr)} }.reduce({}, :merge)
32
28
  end
33
29
 
34
30
  private
@@ -0,0 +1,15 @@
1
+ module CardConnect
2
+ module Service
3
+ class Bin < ServiceEndpoint
4
+ # Initializes a Bin Service
5
+ #
6
+ # @param connection [CardConnect::Connection]
7
+ # @return CardConnect::Service::Bin
8
+ def initialize(connection = CardConnect.connection)
9
+ super(connection)
10
+ @resource_name = '/bin'
11
+ @rest_method = 'get'
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,43 @@
1
+ module CardConnect
2
+ module Service
3
+ class BinRequest
4
+ include Utils
5
+
6
+ REQUIRED_FIELDS = [:token, :merchid].freeze
7
+
8
+ FIELDS = REQUIRED_FIELDS
9
+
10
+ attr_accessor(*FIELDS)
11
+ attr_reader :errors
12
+
13
+ # Initializes a new BinGetRequest
14
+ #
15
+ # @param attrs [Hash]
16
+ # @return CardConnect::BinGetRequest
17
+ def initialize(attrs = {})
18
+ @errors = []
19
+ set_attributes(attrs, FIELDS)
20
+ validate_required_fields
21
+ end
22
+
23
+ # Indicates that the request is valid once it is built.
24
+ def valid?
25
+ errors.empty?
26
+ end
27
+
28
+ # Builds the request payload
29
+ def payload
30
+ "/#{merchid}/#{token}"
31
+ end
32
+
33
+ private
34
+
35
+ def validate_required_fields
36
+ REQUIRED_FIELDS.each do |field|
37
+ value = send(field)
38
+ value.nil? || value.empty? ? errors.push("#{field.capitalize} is missing") : next
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,36 @@
1
+ module CardConnect
2
+ module Service
3
+ class BinResponse
4
+ include Utils
5
+
6
+ FIELDS = [
7
+ :country, :cardusestring, :gsa, :product,
8
+ :corporate, :fsa, :subtype, :purchase, :prepaid, :binlo,
9
+ :issuer, :binhi
10
+ ].freeze
11
+
12
+ # Error messages
13
+ BIN_INFO_NOT_FOUND = 'No bin information found'
14
+ TOKEN_NOT_FOUND = 'Token not found'
15
+ BIN_NOT_ENABLED = 'Bin feature not enabled for merchant'
16
+
17
+ attr_accessor(*FIELDS)
18
+ attr_reader :errors
19
+
20
+ def initialize(response)
21
+
22
+ set_attributes(response, FIELDS)
23
+ # raise [response, self].inspect
24
+ @errors = []
25
+ end
26
+
27
+ def success?
28
+ @errors.empty?
29
+ end
30
+
31
+ def body
32
+ FIELDS.collect{|attr| {attr => send(attr)} }.reduce({}, :merge)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -29,11 +29,7 @@ module CardConnect
29
29
 
30
30
  # Builds the request payload
31
31
  def payload
32
- payload = {}
33
- FIELDS.each do |field|
34
- payload.merge!(field => send(field))
35
- end
36
- payload
32
+ FIELDS.collect{|field| {field => send(field)} }.reduce({}, :merge)
37
33
  end
38
34
 
39
35
  private
@@ -3,15 +3,17 @@ module CardConnect
3
3
  class CaptureResponse
4
4
  include Utils
5
5
 
6
- FIELDS = [:merchid, :account, :amount, :retref, :setlstat].freeze
6
+ FIELDS = [:merchid, :account, :amount, :retref, :setlstat, :respproc,
7
+ :resptext, :commcard, :respstat, :respcode,
8
+ :batchid, :token].freeze
7
9
 
8
10
  # Settlement Statuses
9
11
  TXN_NOT_FOUND = 'Txn not found' # The Retref was not found
10
- AUTHORIZED = 'Authorized' # Auth only, not captured
11
- QUEUED = 'Queued for Capture' # Queued for the Processor
12
- ZERO_AMOUNT = 'Zero Amount' # Capture (and Auth) were Voided
13
- ACCEPTED = 'Accepted' # Accepted by the Processor
14
- REJECTED = 'Rejected' # Rejected by the Processor
12
+ AUTHORIZED = 'Authorized' # Auth only, not captured
13
+ QUEUED = 'Queued for Capture' # Queued for the Processor
14
+ ZERO_AMOUNT = 'Zero Amount' # Capture (and Auth) were Voided
15
+ ACCEPTED = 'Accepted' # Accepted by the Processor
16
+ REJECTED = 'Rejected' # Rejected by the Processor
15
17
 
16
18
  attr_accessor(*FIELDS)
17
19
 
@@ -20,11 +22,7 @@ module CardConnect
20
22
  end
21
23
 
22
24
  def body
23
- body = {}
24
- FIELDS.each do |attr|
25
- body.merge!(attr => send(attr))
26
- end
27
- body
25
+ FIELDS.collect{|attr| {attr => send(attr)} }.reduce({}, :merge)
28
26
  end
29
27
  end
30
28
  end
@@ -3,17 +3,20 @@ module CardConnect
3
3
  class InquireResponse
4
4
  include Utils
5
5
 
6
- FIELDS = [:merchid, :account, :amount, :currency, :retref, :respcode,
7
- :respproc, :respstat, :resptext, :setlstat].freeze
8
-
6
+ FIELDS = [
7
+ :merchid, :account, :amount, :currency, :retref, :respcode,
8
+ :respproc, :respstat, :resptext, :setlstat, :capturedate, :batchid,
9
+ :token, :authdate, :lastfour, :name, :settledate
10
+ ].freeze
11
+
9
12
  # Settlement Status
10
- AUTHORIZED = 'Authorized' # Txn has not been Captured
11
- QUEUED = 'Queued for Capture' # Txn is in flight to Clearing House
12
- ACCEPTED = 'Accepted' # Txn was accepted for Settlement
13
- REJECTED = 'Rejected' # Txn was not accepted
13
+ AUTHORIZED = 'Authorized' # Txn has not been Captured
14
+ QUEUED = 'Queued for Capture' # Txn is in flight to Clearing House
15
+ ACCEPTED = 'Accepted' # Txn was accepted for Settlement
16
+ REJECTED = 'Rejected' # Txn was not accepted
14
17
  ZERO_AMOUNT = 'Zero Amount' # Txn was $0
15
- VOIDED = 'Voided' # Txn has been voided
16
- DECLINED = 'Declined' # Txn had an error
18
+ VOIDED = 'Voided' # Txn has been voided
19
+ DECLINED = 'Declined' # Txn had an error
17
20
 
18
21
  attr_accessor(*FIELDS)
19
22
  attr_reader :errors
@@ -28,11 +31,7 @@ module CardConnect
28
31
  end
29
32
 
30
33
  def body
31
- body = {}
32
- FIELDS.each do |attr|
33
- body.merge!(attr => send(attr))
34
- end
35
- body
34
+ FIELDS.collect{|attr| {attr => send(attr)} }.reduce({}, :merge)
36
35
  end
37
36
  end
38
37
  end
@@ -5,7 +5,7 @@ module CardConnect
5
5
  #
6
6
  # @param connection [CardConnect::Connection]
7
7
  # @return CardConnect::Service::Profile
8
- def initialize(rest_method = nil, connection = CardConnect.connection)
8
+ def initialize(rest_method, connection = CardConnect.connection)
9
9
  super(connection)
10
10
  @resource_name = '/profile'
11
11
  @rest_method = rest_method
@@ -22,11 +22,7 @@ module CardConnect
22
22
  end
23
23
 
24
24
  def body
25
- body = {}
26
- FIELDS.each do |attr|
27
- body.merge!({attr => send(attr)})
28
- end
29
- body
25
+ FIELDS.collect{|attr| {attr => send(attr)} }.reduce({}, :merge)
30
26
  end
31
27
 
32
28
  private
@@ -3,13 +3,15 @@ module CardConnect
3
3
  class ProfileGetResponse
4
4
  include Utils
5
5
 
6
- FIELDS = [:profileid, :acctid, :respstat, :account, :respcode, :resptext, :respproc, :accttype, :expiry,
7
- :name, :address, :city, :region, :country, :phone, :postal, :ssnl4, :email, :defaultacct, :license, :token]
6
+ FIELDS = [:gsacard, :profileid, :acctid, :respstat, :account,
7
+ :respcode, :resptext, :respproc, :accttype, :expiry,
8
+ :name, :address, :city, :region, :country, :phone, :postal,
9
+ :ssnl4, :email, :defaultacct, :license, :token, :auoptout]
8
10
 
9
11
  attr_accessor(*FIELDS)
10
12
  attr_reader :errors
11
13
 
12
- STATUS_APPROVED = 'A'
14
+ STATUS_APPROVED = 'A'
13
15
  STATUS_NOT_FOUND = 'C'
14
16
 
15
17
  def initialize(response)
@@ -23,11 +25,7 @@ module CardConnect
23
25
  end
24
26
 
25
27
  def body
26
- body = {}
27
- FIELDS.each do |attr|
28
- body.merge!({attr => send(attr)})
29
- end
30
- body
28
+ FIELDS.collect{|attr| {attr => send(attr)} }.reduce({}, :merge)
31
29
  end
32
30
 
33
31
  private
@@ -25,11 +25,7 @@ module CardConnect
25
25
  end
26
26
 
27
27
  def body
28
- body = {}
29
- FIELDS.each do |attr|
30
- body.merge!({attr => send(attr)})
31
- end
32
- body
28
+ FIELDS.collect{|attr| {attr => send(attr)} }.reduce({}, :merge)
33
29
  end
34
30
 
35
31
  private
@@ -23,11 +23,7 @@ module CardConnect
23
23
  end
24
24
 
25
25
  def body
26
- body = {}
27
- FIELDS.each do |attr|
28
- body.merge!(attr => send(attr))
29
- end
30
- body
26
+ FIELDS.collect{|attr| {attr => send(attr)} }.reduce({}, :merge)
31
27
  end
32
28
 
33
29
  private
@@ -20,11 +20,7 @@ module CardConnect
20
20
  end
21
21
 
22
22
  def body
23
- body = {}
24
- FIELDS.each do |attr|
25
- body.merge!(attr => send(attr))
26
- end
27
- body
23
+ FIELDS.collect{|attr| {attr => send(attr)} }.reduce({}, :merge)
28
24
  end
29
25
 
30
26
  private
@@ -24,11 +24,7 @@ module CardConnect
24
24
  end
25
25
 
26
26
  def body
27
- body = {}
28
- FIELDS.each do |attr|
29
- body.merge!(attr => send(attr))
30
- end
31
- body
27
+ FIELDS.collect{|attr| {attr => send(attr)} }.reduce({}, :merge)
32
28
  end
33
29
 
34
30
  private
@@ -4,18 +4,15 @@ module CardConnect
4
4
  return if attributes.empty?
5
5
  attributes = attributes[0] if attributes.is_a? Array
6
6
  attributes = symbolize_keys(attributes)
7
+
7
8
  fields.each do |attr|
8
- next unless attributes[attr]
9
+ next if attributes[attr].nil?
9
10
  send("#{attr}=", attributes[attr])
10
11
  end
11
12
  end
12
13
 
13
14
  def symbolize_keys(hash)
14
- symbolized_hash = {}
15
- hash.each do |k, v|
16
- symbolized_hash[k.to_sym] = v
17
- end
18
- symbolized_hash
15
+ hash.collect{|key, value| {key.to_sym => value} }.reduce({}, :merge)
19
16
  end
20
17
  end
21
18
  end
@@ -1,3 +1,3 @@
1
1
  module CardConnect
2
- VERSION = '2.2.0'.freeze
2
+ VERSION = '2.3.0'.freeze
3
3
  end
@@ -113,3 +113,10 @@ def valid_profile_put_request
113
113
  "profileupdate" => "Y"
114
114
  }
115
115
  end
116
+
117
+ def valid_bin_request
118
+ {
119
+ 'token' => '9477709629051443',
120
+ 'merchid' => '000000927996'
121
+ }
122
+ end
@@ -24,22 +24,35 @@ def valid_capture_response
24
24
  'setlstat' => 'Pending',
25
25
  'retref' => '288002073633',
26
26
  'merchid' => '000000927996',
27
- 'account' => '41XXXXXXXXXX4113'
27
+ 'account' => '41XXXXXXXXXX4113',
28
+ 'respproc' => 'FNOR',
29
+ 'resptext' => 'Approval',
30
+ 'respstat' => 'A',
31
+ 'respcode' => '00',
32
+ 'batchid' => '1900941569',
33
+ 'token' => '9418594164541111',
34
+ 'commcard' => ' C '
28
35
  }
29
36
  end
30
-
31
37
  def valid_inquire_response # rubocop:disable Metrics/MethodLength
32
38
  {
33
39
  'amount' => '596.00',
34
40
  'resptext' => 'Approval',
35
- 'setlstat' => 'NOTCAPTURED',
41
+ 'setlstat' => 'Accepted',
36
42
  'respcode' => '00',
37
43
  'retref' => '288015190411',
38
44
  'merchid' => '000000927996',
39
- 'account' => '41XXXXXXXXXX4113',
45
+ 'account' => '9418594164541111',
40
46
  'respproc' => 'FNOR',
41
47
  'respstat' => 'A',
42
- 'currency' => 'USD'
48
+ 'currency' => 'USD',
49
+ 'token' => '9418594164541111',
50
+ 'authdate' => '20180410',
51
+ 'lastfour' => '1111',
52
+ 'name' => 'TOM JONES',
53
+ 'capturedate' => '20180326065748',
54
+ 'batchid' => '1900941569',
55
+ 'settledate' => '20180327143721'
43
56
  }
44
57
  end
45
58
 
@@ -108,7 +121,9 @@ def valid_profile_get_response #rubocop:disable Metrics/MethodLength
108
121
  "city" => "ANYTOWN",
109
122
  "expiry" => "0214",
110
123
  "profileid" => "12345678901234567890",
111
- "acctid" => "1"
124
+ "acctid" => "1",
125
+ "gsacard" => "N",
126
+ "auoptout" => "N"
112
127
  }
113
128
  end
114
129
 
@@ -150,3 +165,20 @@ def valid_profile_put_response #rubocop:disable Metrics/MethodLength
150
165
  "gsacard" => "N"
151
166
  }
152
167
  end
168
+
169
+ def valid_bin_response
170
+ {
171
+ "country" => "USA",
172
+ "product" => "V",
173
+ "cardusestring" => "True credit",
174
+ "gsa" => false,
175
+ "corporate" => true,
176
+ "fsa" => false,
177
+ "subtype" => "Visa Corporate T&E",
178
+ "purchase" => false,
179
+ "prepaid" => false,
180
+ "binlo" => "478823XXX",
181
+ "issuer" => "JPMorgan Chase Bank N.A. - Commercial",
182
+ "binhi" => "478825XXX"
183
+ }
184
+ end
@@ -0,0 +1,45 @@
1
+ require 'test_helper'
2
+
3
+ describe CardConnect::Service::BinRequest do
4
+ before do
5
+ @request = CardConnect::Service::BinRequest.new(valid_bin_request)
6
+ end
7
+
8
+ after do
9
+ @request = nil
10
+ end
11
+
12
+ describe 'FIELDS' do
13
+ it 'should have merchant id' do
14
+ @request.merchid.must_equal '000000927996'
15
+ end
16
+
17
+ it 'should have token' do
18
+ @request.token.must_equal '9477709629051443'
19
+ end
20
+ end
21
+
22
+ describe '#valid?' do
23
+ it 'should not be valid if no attributes are passed in' do
24
+ CardConnect::Service::BinRequest.new.valid?.must_equal false
25
+ end
26
+
27
+ it 'should be valid if valid attributes are passed in' do
28
+ CardConnect::Service::BinRequest.new(valid_bin_request).valid?.must_equal true
29
+ end
30
+ end
31
+
32
+ describe '#errors' do
33
+ CardConnect::Service::BinRequest::REQUIRED_FIELDS.each do |field|
34
+ it "should have an error message if #{field} is missing" do
35
+ CardConnect::Service::BinRequest.new.errors.must_include "#{field.to_s.capitalize} is missing"
36
+ end
37
+ end
38
+ end
39
+
40
+ describe '#payload' do
41
+ it 'should generate the correct path params' do
42
+ @request.payload.must_equal '/000000927996/9477709629051443'
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,67 @@
1
+ require 'test_helper'
2
+
3
+ describe CardConnect::Service::BinResponse do
4
+ before do
5
+ @response = CardConnect::Service::BinResponse.new(valid_bin_response)
6
+ end
7
+
8
+ after do
9
+ @response = nil
10
+ end
11
+
12
+ describe 'FIELDS' do
13
+ it 'should have country' do
14
+ @response.country.must_equal 'USA'
15
+ end
16
+
17
+ it 'should have product' do
18
+ @response.product.must_equal 'V'
19
+ end
20
+
21
+ it 'should have cardusestring' do
22
+ @response.cardusestring.must_equal 'True credit'
23
+ end
24
+
25
+ it 'should have gsa' do
26
+ @response.gsa.must_equal false
27
+ end
28
+
29
+ it 'should have corporate' do
30
+ @response.corporate.must_equal true
31
+ end
32
+
33
+ it 'should have fsa' do
34
+ @response.fsa.must_equal false
35
+ end
36
+
37
+ it 'should have subtype' do
38
+ @response.subtype.must_equal 'Visa Corporate T&E'
39
+ end
40
+
41
+ it 'should have purchase' do
42
+ @response.purchase.must_equal false
43
+ end
44
+
45
+ it 'should have prepaid' do
46
+ @response.prepaid.must_equal false
47
+ end
48
+
49
+ it 'should have binlo' do
50
+ @response.binlo.must_equal '478823XXX'
51
+ end
52
+
53
+ it 'should have issuer' do
54
+ @response.issuer.must_equal "JPMorgan Chase Bank N.A. - Commercial"
55
+ end
56
+
57
+ it 'should have binhi' do
58
+ @response.binhi.must_equal "478825XXX"
59
+ end
60
+ end
61
+
62
+ describe '#body' do
63
+ it 'should generate hash with all the right values' do
64
+ @response.body.must_equal symbolize_keys(valid_bin_response)
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,56 @@
1
+ require 'test_helper'
2
+
3
+ describe CardConnect::Service::Bin do
4
+ before do
5
+ @connection = CardConnect::Connection.new.connection do |stubs|
6
+ path = "#{@service.path}/#{valid_bin_request['merchid']}/#{valid_bin_request['token']}"
7
+ stubs.get(path) { [200, {}, valid_bin_response] }
8
+ end
9
+ @service = CardConnect::Service::Bin.new(@connection)
10
+ end
11
+
12
+ after do
13
+ @service = nil
14
+ end
15
+
16
+ it 'must have the right path' do
17
+ @service.path.must_equal '/cardconnect/rest/bin'
18
+ end
19
+
20
+ describe '#build_request' do
21
+ before do
22
+ @valid_params = valid_bin_request
23
+ end
24
+
25
+ after do
26
+ @valid_params = nil
27
+ end
28
+
29
+ it 'creates a bin request object with the passed in params' do
30
+ @service.build_request(@valid_params)
31
+
32
+ @service.request.must_be_kind_of CardConnect::Service::BinRequest
33
+ @service.request.token.must_equal '9477709629051443'
34
+ @service.request.merchid.must_equal '000000927996'
35
+ end
36
+
37
+ it 'uses default merchant ID if merchid is not passed in' do
38
+ @service.build_request(@valid_params.reject! { |k, _| k == 'merchid' })
39
+ @service.request.must_be_kind_of CardConnect::Service::BinRequest
40
+ @service.request.merchid.must_equal 'merchant123'
41
+ end
42
+ end
43
+
44
+ describe '#submit' do
45
+ it 'raises an error when there is no request' do
46
+ @service.request.nil?.must_equal true
47
+ proc { @service.submit }.must_raise CardConnect::Error
48
+ end
49
+
50
+ it 'creates a response when a valid request is processed' do
51
+ @service.build_request(valid_bin_request)
52
+ @service.submit
53
+ @service.response.must_be_kind_of CardConnect::Service::BinResponse
54
+ end
55
+ end
56
+ end
@@ -14,8 +14,12 @@ describe CardConnect::Service::InquireResponse do
14
14
  @response.merchid.must_equal '000000927996'
15
15
  end
16
16
 
17
+ it 'should have name' do
18
+ @response.name.must_equal 'TOM JONES'
19
+ end
20
+
17
21
  it 'should have account' do
18
- @response.account.must_equal '41XXXXXXXXXX4113'
22
+ @response.account.must_equal '9418594164541111'
19
23
  end
20
24
 
21
25
  it 'should have amount' do
@@ -47,7 +51,27 @@ describe CardConnect::Service::InquireResponse do
47
51
  end
48
52
 
49
53
  it 'should have settlement status' do
50
- @response.setlstat.must_equal 'NOTCAPTURED'
54
+ @response.setlstat.must_equal 'Accepted'
55
+ end
56
+
57
+ it 'should have token' do
58
+ @response.token.must_equal '9418594164541111'
59
+ end
60
+
61
+ it 'should have authdate' do
62
+ @response.authdate.must_equal '20180410'
63
+ end
64
+
65
+ it 'should have captureddate' do
66
+ @response.capturedate.must_equal '20180326065748'
67
+ end
68
+
69
+ it 'should have lastfour value' do
70
+ @response.lastfour.must_equal '1111'
71
+ end
72
+
73
+ it 'should have settledate' do
74
+ @response.settledate.must_equal '20180327143721'
51
75
  end
52
76
  end
53
77
 
@@ -93,6 +93,14 @@ describe CardConnect::Service::ProfileGetResponse do
93
93
  it 'should have token' do
94
94
  @response.token.must_equal '9440670166031111'
95
95
  end
96
+
97
+ it 'should have gsacard' do
98
+ @response.gsacard.must_equal 'N'
99
+ end
100
+
101
+ it 'should have auoptout' do
102
+ @response.auoptout.must_equal 'N'
103
+ end
96
104
  end
97
105
 
98
106
  describe '#success?' do
@@ -18,6 +18,8 @@ end
18
18
  # Stub out the Faraday connection for testing.
19
19
  module CardConnect
20
20
  class Connection
21
+ undef :connection if method_defined? :connection
22
+
21
23
  def connection
22
24
  @connection ||= Faraday.new(faraday_options) do |faraday|
23
25
  faraday.request :basic_auth, @config.api_username, @config.api_password
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cardconnect
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim McKenzie
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-01-10 00:00:00.000000000 Z
13
+ date: 2018-04-24 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -80,6 +80,9 @@ files:
80
80
  - lib/cardconnect/services/authorization/authorization.rb
81
81
  - lib/cardconnect/services/authorization/authorization_request.rb
82
82
  - lib/cardconnect/services/authorization/authorization_response.rb
83
+ - lib/cardconnect/services/bin/bin.rb
84
+ - lib/cardconnect/services/bin/bin_request.rb
85
+ - lib/cardconnect/services/bin/bin_response.rb
83
86
  - lib/cardconnect/services/capture/capture.rb
84
87
  - lib/cardconnect/services/capture/capture_request.rb
85
88
  - lib/cardconnect/services/capture/capture_response.rb
@@ -112,6 +115,9 @@ files:
112
115
  - test/cardconnect/services/authorization/authorization_request_test.rb
113
116
  - test/cardconnect/services/authorization/authorization_response_test.rb
114
117
  - test/cardconnect/services/authorization/authorization_test.rb
118
+ - test/cardconnect/services/bin/bin_request_test.rb
119
+ - test/cardconnect/services/bin/bin_response_test.rb
120
+ - test/cardconnect/services/bin/bin_test.rb
115
121
  - test/cardconnect/services/capture/capture_request_test.rb
116
122
  - test/cardconnect/services/capture/capture_response_test.rb
117
123
  - test/cardconnect/services/capture/capture_test.rb
@@ -156,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
156
162
  version: '0'
157
163
  requirements: []
158
164
  rubyforge_project:
159
- rubygems_version: 2.6.8
165
+ rubygems_version: 2.7.3
160
166
  signing_key:
161
167
  specification_version: 4
162
168
  summary: CardConnect API Ruby Client
@@ -168,6 +174,9 @@ test_files:
168
174
  - test/cardconnect/services/authorization/authorization_request_test.rb
169
175
  - test/cardconnect/services/authorization/authorization_response_test.rb
170
176
  - test/cardconnect/services/authorization/authorization_test.rb
177
+ - test/cardconnect/services/bin/bin_request_test.rb
178
+ - test/cardconnect/services/bin/bin_response_test.rb
179
+ - test/cardconnect/services/bin/bin_test.rb
171
180
  - test/cardconnect/services/capture/capture_request_test.rb
172
181
  - test/cardconnect/services/capture/capture_response_test.rb
173
182
  - test/cardconnect/services/capture/capture_test.rb