cardconnect 1.0.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.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/Gemfile +11 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +154 -0
  6. data/Rakefile +178 -0
  7. data/cardconnect.gemspec +25 -0
  8. data/lib/cardconnect.rb +49 -0
  9. data/lib/cardconnect/configuration.rb +13 -0
  10. data/lib/cardconnect/connection.rb +35 -0
  11. data/lib/cardconnect/error.rb +3 -0
  12. data/lib/cardconnect/services/authorization/authorization.rb +17 -0
  13. data/lib/cardconnect/services/authorization/authorization_request.rb +51 -0
  14. data/lib/cardconnect/services/authorization/authorization_response.rb +41 -0
  15. data/lib/cardconnect/services/capture/capture.rb +17 -0
  16. data/lib/cardconnect/services/capture/capture_request.rb +50 -0
  17. data/lib/cardconnect/services/capture/capture_response.rb +24 -0
  18. data/lib/cardconnect/services/deposit/deposit.rb +17 -0
  19. data/lib/cardconnect/services/deposit/deposit_request.rb +64 -0
  20. data/lib/cardconnect/services/deposit/deposit_response.rb +40 -0
  21. data/lib/cardconnect/services/inquire/inquire.rb +17 -0
  22. data/lib/cardconnect/services/inquire/inquire_request.rb +44 -0
  23. data/lib/cardconnect/services/inquire/inquire_response.rb +31 -0
  24. data/lib/cardconnect/services/refund/refund.rb +16 -0
  25. data/lib/cardconnect/services/refund/refund_request.rb +50 -0
  26. data/lib/cardconnect/services/refund/refund_response.rb +40 -0
  27. data/lib/cardconnect/services/service_endpoint.rb +69 -0
  28. data/lib/cardconnect/services/settlement_status/settlement_status.rb +17 -0
  29. data/lib/cardconnect/services/settlement_status/settlement_status_request.rb +64 -0
  30. data/lib/cardconnect/services/settlement_status/settlement_status_response.rb +39 -0
  31. data/lib/cardconnect/services/void/void.rb +16 -0
  32. data/lib/cardconnect/services/void/void_request.rb +50 -0
  33. data/lib/cardconnect/services/void/void_response.rb +40 -0
  34. data/lib/cardconnect/utils.rb +22 -0
  35. data/lib/cardconnect/version.rb +3 -0
  36. data/test/api_request_stubs.rb +83 -0
  37. data/test/api_response_stubs.rb +120 -0
  38. data/test/cardconnect/configuration_test.rb +28 -0
  39. data/test/cardconnect/connection_test.rb +36 -0
  40. data/test/cardconnect/services/authorization/authorization_request_test.rb +141 -0
  41. data/test/cardconnect/services/authorization/authorization_response_test.rb +93 -0
  42. data/test/cardconnect/services/authorization/authorization_test.rb +59 -0
  43. data/test/cardconnect/services/capture/capture_request_test.rb +65 -0
  44. data/test/cardconnect/services/capture/capture_response_test.rb +39 -0
  45. data/test/cardconnect/services/capture/capture_test.rb +58 -0
  46. data/test/cardconnect/services/deposit/deposit_request_test.rb +65 -0
  47. data/test/cardconnect/services/deposit/deposit_response_test.rb +75 -0
  48. data/test/cardconnect/services/deposit/deposit_test.rb +55 -0
  49. data/test/cardconnect/services/inquire/inquire_request_test.rb +45 -0
  50. data/test/cardconnect/services/inquire/inquire_response_test.rb +59 -0
  51. data/test/cardconnect/services/inquire/inquire_test.rb +56 -0
  52. data/test/cardconnect/services/refund/refund_request_test.rb +49 -0
  53. data/test/cardconnect/services/refund/refund_response_test.rb +73 -0
  54. data/test/cardconnect/services/refund/refund_test.rb +57 -0
  55. data/test/cardconnect/services/settlement_status/settlement_status_request_test.rb +65 -0
  56. data/test/cardconnect/services/settlement_status/settlement_status_response_test.rb +47 -0
  57. data/test/cardconnect/services/settlement_status/settlement_status_test.rb +55 -0
  58. data/test/cardconnect/services/void/void_request_test.rb +49 -0
  59. data/test/cardconnect/services/void/void_response_test.rb +77 -0
  60. data/test/cardconnect/services/void/void_test.rb +57 -0
  61. data/test/cardconnect_test.rb +14 -0
  62. data/test/test_helper.rb +33 -0
  63. metadata +179 -0
@@ -0,0 +1,59 @@
1
+ require 'test_helper'
2
+
3
+ describe CardConnect::Service::InquireResponse do
4
+ before do
5
+ @response = CardConnect::Service::InquireResponse.new(valid_inquire_response)
6
+ end
7
+
8
+ after do
9
+ @response = nil
10
+ end
11
+
12
+ describe 'FIELDS' do
13
+ it 'should have merchant id' do
14
+ @response.merchid.must_equal "000000927996"
15
+ end
16
+
17
+ it 'should have account' do
18
+ @response.account.must_equal "41XXXXXXXXXX4113"
19
+ end
20
+
21
+ it 'should have amount' do
22
+ @response.amount.must_equal "596.00"
23
+ end
24
+
25
+ it 'should have currency' do
26
+ @response.currency.must_equal "USD"
27
+ end
28
+
29
+ it 'should have retrieval reference number' do
30
+ @response.retref.must_equal "288015190411"
31
+ end
32
+
33
+ it 'should have response code' do
34
+ @response.respcode.must_equal "00"
35
+ end
36
+
37
+ it 'should have response processor' do
38
+ @response.respproc.must_equal "FNOR"
39
+ end
40
+
41
+ it 'should have response status' do
42
+ @response.respstat.must_equal "A"
43
+ end
44
+
45
+ it 'should have capture status' do
46
+ @response.resptext.must_equal "Approval"
47
+ end
48
+
49
+ it 'should have settlement status' do
50
+ @response.setlstat.must_equal "NOTCAPTURED"
51
+ end
52
+ end
53
+
54
+ describe "#body" do
55
+ it 'should generate hash with all the right values' do
56
+ @response.body.must_equal symbolize_keys(valid_inquire_response)
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,56 @@
1
+ require 'test_helper'
2
+
3
+ describe CardConnect::Service::Inquire do
4
+ before do
5
+ @connection = CardConnect::Connection.new.connection do |stubs|
6
+ path = @service.path + "/#{valid_inquire_request['retref']}/#{valid_inquire_request['merchid']}"
7
+ stubs.get(path) { [200, {}, valid_inquire_response] }
8
+ end
9
+ @service = CardConnect::Service::Inquire.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/inquire'
18
+ end
19
+
20
+ describe '#build_request' do
21
+ before do
22
+ @valid_params = valid_inquire_request
23
+ end
24
+
25
+ after do
26
+ @valid_params = nil
27
+ end
28
+
29
+ it 'creates a Capture request object with the passed in params' do
30
+ @service.build_request(@valid_params)
31
+
32
+ @service.request.must_be_kind_of CardConnect::Service::InquireRequest
33
+ @service.request.retref.must_equal "288002073633"
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,v| k == 'merchid' })
39
+ @service.request.must_be_kind_of CardConnect::Service::InquireRequest
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_inquire_request)
52
+ @service.submit
53
+ @service.response.must_be_kind_of CardConnect::Service::InquireResponse
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,49 @@
1
+ require 'test_helper'
2
+
3
+ describe CardConnect::Service::RefundRequest do
4
+ before do
5
+ @request = CardConnect::Service::RefundRequest.new(valid_refund_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 retrieval reference number' do
18
+ @request.retref.must_equal "288009185241"
19
+ end
20
+
21
+ it 'should have amount' do
22
+ @request.amount.must_equal "59.60"
23
+ end
24
+ end
25
+
26
+ describe '#valid?' do
27
+ it 'should not be valid if no attributes are passed in' do
28
+ CardConnect::Service::RefundRequest.new.valid?.must_equal false
29
+ end
30
+
31
+ it 'should be valid if valid attributes are passed in' do
32
+ CardConnect::Service::RefundRequest.new(valid_refund_request).valid?.must_equal true
33
+ end
34
+ end
35
+
36
+ describe '#errors' do
37
+ CardConnect::Service::RefundRequest::REQUIRED_FIELDS.each do |field|
38
+ it "should have an error message if #{field} is missing" do
39
+ CardConnect::Service::RefundRequest.new.errors.must_include "#{field.to_s.capitalize} is missing"
40
+ end
41
+ end
42
+ end
43
+
44
+ describe '#payload' do
45
+ it 'should generate hash with all the right values' do
46
+ @request.payload.must_equal symbolize_keys(valid_refund_request)
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,73 @@
1
+ require 'test_helper'
2
+
3
+ describe CardConnect::Service::RefundResponse do
4
+ before do
5
+ @response = CardConnect::Service::RefundResponse.new(valid_refund_response)
6
+ end
7
+
8
+ after do
9
+ @response = nil
10
+ end
11
+
12
+ describe 'FIELDS' do
13
+ it 'should have the merchant id' do
14
+ @response.merchid.must_equal "000000927996"
15
+ end
16
+
17
+ it 'should have the Amount' do
18
+ @response.amount.must_equal "59.60"
19
+ end
20
+
21
+ it 'should have the Retrieval Reference Number' do
22
+ @response.retref.must_equal "288010185242"
23
+ end
24
+
25
+ it 'should have the Response Code' do
26
+ @response.respcode.must_equal "00"
27
+ end
28
+
29
+ it 'should have the Response Processor' do
30
+ @response.respproc.must_equal "PPS"
31
+ end
32
+
33
+ it 'should have the status' do
34
+ @response.respstat.must_equal "A"
35
+ end
36
+
37
+ it 'should have the Response text' do
38
+ @response.resptext.must_equal "Approval"
39
+ end
40
+
41
+ it 'should have authcode' do
42
+ @response.authcode.must_equal "REFUND"
43
+ end
44
+ end
45
+
46
+ describe '#success?' do
47
+ it 'should be true when there are no errors' do
48
+ @response.success?.must_equal true
49
+ end
50
+
51
+ it 'should be false when there are errors' do
52
+ response = CardConnect::Service::RefundResponse.new(valid_refund_response.merge!("respstat" => "C", "resptext" => "this is an error"))
53
+ response.success?.must_equal false
54
+ end
55
+ end
56
+
57
+ describe '#errors' do
58
+ it 'should be empty when there are no errors' do
59
+ @response.errors.must_be_empty
60
+ end
61
+
62
+ it 'should be an array of error messages when there are errors' do
63
+ response = CardConnect::Service::RefundResponse.new(valid_refund_response.merge!("respstat" => "C", "resptext" => "this is an error"))
64
+ response.errors.must_equal ["this is an error"]
65
+ end
66
+ end
67
+
68
+ describe "#body" do
69
+ it 'should generate hash with all the right values' do
70
+ @response.body.must_equal symbolize_keys(valid_refund_response)
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,57 @@
1
+ require 'test_helper'
2
+
3
+ describe CardConnect::Service::Refund do
4
+ before do
5
+ @connection = CardConnect::Connection.new.connection do |stubs|
6
+ stubs.put(@service.path) { [200, {}, valid_refund_response] }
7
+ end
8
+ @service = CardConnect::Service::Refund.new(@connection)
9
+ end
10
+
11
+ after do
12
+ @service = nil
13
+ end
14
+
15
+ it 'must have the right path' do
16
+ @service.path.must_equal '/cardconnect/rest/refund'
17
+ end
18
+
19
+ describe '#build_request' do
20
+ before do
21
+ @valid_params = valid_refund_request
22
+ end
23
+
24
+ after do
25
+ @valid_params = nil
26
+ end
27
+
28
+ it 'uses the default merchant id if it is not passed in' do
29
+ @service.build_request(@valid_params.reject!{|k,v| k == 'merchid' })
30
+ @service.request.merchid.must_equal 'merchant123'
31
+ end
32
+
33
+ it 'creates an Authorization request object with the right params' do
34
+ @service.build_request(@valid_params)
35
+
36
+ @service.request.must_be_kind_of CardConnect::Service::RefundRequest
37
+
38
+ @service.request.merchid.must_equal '000000927996'
39
+ @service.request.retref.must_equal '288009185241'
40
+ @service.request.amount.must_equal '59.60'
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_refund_request)
52
+ @service.submit
53
+ @service.response.must_be_kind_of CardConnect::Service::RefundResponse
54
+ end
55
+ end
56
+
57
+ end
@@ -0,0 +1,65 @@
1
+ require 'test_helper'
2
+
3
+ describe CardConnect::Service::SettlementStatusRequest do
4
+ before do
5
+ @request = CardConnect::Service::SettlementStatusRequest.new(valid_settlestat_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 retrieval reference number' do
18
+ @request.date.must_equal "0110"
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::SettlementStatusRequest.new.valid?.must_equal false
25
+ end
26
+
27
+ it 'should be valid if valid attributes are passed in' do
28
+ CardConnect::Service::SettlementStatusRequest.new(valid_settlestat_request).valid?.must_equal true
29
+ end
30
+ end
31
+
32
+ describe '#errors' do
33
+ CardConnect::Service::SettlementStatusRequest::REQUIRED_FIELDS.each do |field|
34
+ it "should have an error message if #{field} is missing" do
35
+ CardConnect::Service::SettlementStatusRequest.new.errors.must_include "#{field.to_s.capitalize} is missing"
36
+ end
37
+ end
38
+
39
+ describe '#validate_date_format' do
40
+ it 'should have an error when date is less than 4 characters long' do
41
+ request = CardConnect::Service::SettlementStatusRequest.new({date: '123'})
42
+ request.valid?.must_equal false
43
+ request.errors.must_include "Date format is invalid. Please use MMDD format"
44
+ end
45
+
46
+ it 'should have an error when date is more than 4 characters long' do
47
+ request = CardConnect::Service::SettlementStatusRequest.new({date: '12345'})
48
+ request.valid?.must_equal false
49
+ request.errors.must_include "Date format is invalid. Please use MMDD format"
50
+ end
51
+
52
+ it 'should have an error when date is not parseable in MMDD format' do
53
+ request = CardConnect::Service::SettlementStatusRequest.new({date: '0000'})
54
+ request.valid?.must_equal false
55
+ request.errors.must_include "Date format is invalid. Please use MMDD format"
56
+ end
57
+ end
58
+ end
59
+
60
+ describe "#payload" do
61
+ it 'should generate the correct path params' do
62
+ @request.payload.must_equal "?merchid=#{@request.merchid}&date=#{@request.date}&"
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,47 @@
1
+ require 'test_helper'
2
+
3
+ describe CardConnect::Service::SettlementStatusResponse do
4
+ before do
5
+ @response = CardConnect::Service::SettlementStatusResponse.new(valid_settlestat_response)
6
+ end
7
+
8
+ after do
9
+ @response = nil
10
+ end
11
+
12
+ it 'should have the merchant id' do
13
+ @response.merchid.must_equal "000000927996"
14
+ end
15
+
16
+ it 'should have the batch id' do
17
+ @response.batchid.must_equal "71742042"
18
+ end
19
+
20
+ it 'should have the settlement status' do
21
+ @response.hoststat.must_equal "GB"
22
+ end
23
+
24
+ it 'should have the host batch id' do
25
+ @response.hostbatch.must_equal "71742041"
26
+ end
27
+
28
+ it 'should have the clearing house' do
29
+ @response.respproc.must_equal "FNOR"
30
+ end
31
+
32
+ it 'should have the transactions' do
33
+ @response.txns.must_equal [{setlstat: "N", retref: "179001161341"}, {setlstat: "Y", retref: "179002161341"}]
34
+ end
35
+
36
+ describe '#body' do
37
+ it 'should have all the right fields in the body' do
38
+ @response.body.keys.must_equal [:merchid, :batchid, :hoststat, :hostbatch, :respproc, :txns]
39
+ end
40
+
41
+ it 'should generate hash with all the right values' do
42
+ valid_payload = symbolize_keys(valid_settlestat_response.first)
43
+ valid_payload[:txns] = valid_payload[:txns].map{|txn| symbolize_keys(txn)}
44
+ @response.body.must_equal valid_payload
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,55 @@
1
+ require 'test_helper'
2
+
3
+ describe CardConnect::Service::SettlementStatus do
4
+ before do
5
+ @connection = CardConnect::Connection.new.connection do |stubs|
6
+ stubs.get(@service.path) { [200, {}, valid_settlestat_response] }
7
+ end
8
+ @service = CardConnect::Service::SettlementStatus.new(@connection)
9
+ end
10
+
11
+ after do
12
+ @service = nil
13
+ end
14
+
15
+ it 'must have the right path' do
16
+ @service.path.must_equal '/cardconnect/rest/settlestat'
17
+ end
18
+
19
+ describe '#build_request' do
20
+ before do
21
+ @valid_params = valid_settlestat_request
22
+ end
23
+
24
+ after do
25
+ @valid_params = nil
26
+ end
27
+
28
+ it 'creates a Capture request object with the passed in params' do
29
+ @service.build_request(@valid_params)
30
+
31
+ @service.request.must_be_kind_of CardConnect::Service::SettlementStatusRequest
32
+ @service.request.merchid.must_equal "000000927996"
33
+ @service.request.date.must_equal "0110"
34
+ end
35
+
36
+ it 'uses default merchant ID if merchid is not passed in' do
37
+ @service.build_request(@valid_params.reject!{|k,v| k == 'merchid' })
38
+ @service.request.must_be_kind_of CardConnect::Service::SettlementStatusRequest
39
+ @service.request.merchid.must_equal "merchant123"
40
+ end
41
+ end
42
+
43
+ describe '#submit' do
44
+ it 'raises an error when there is no request' do
45
+ @service.request.nil?.must_equal true
46
+ proc { @service.submit }.must_raise CardConnect::Error
47
+ end
48
+
49
+ it 'creates a response when a valid request is processed' do
50
+ @service.build_request(valid_settlestat_request)
51
+ @service.submit
52
+ @service.response.must_be_kind_of CardConnect::Service::SettlementStatusResponse
53
+ end
54
+ end
55
+ end