cardconnect 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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